实现链表的各种操作(利用链表来实现)

来源:互联网 发布:js取session中的值 编辑:程序博客网 时间:2024/05/01 12:58
#include <iostream>
#include<stdlib.h>
typedef char ElemType;
typedef struct LNode
{
    ElemType data;
    struct LNode*next;
}LinkList;
using namespace std;


int main()
{
    void InitList(LinkList*&L);
    void CreateListR(LinkList*&L,ElemType e,int n);
    void DisList(LinkList*L);
    void ListLength(LinkList *L);
    void ListEmpty(LinkList *L);
    void GetElem(LinkList*L,int i);
    void LocateElem(LinkList*L,ElemType e);
    void ListInsert(LinkList*&L,int i,ElemType e);
    void ListDelete(LinkList*&L,int i,ElemType &e);
    void DestoryList(LinkList*&L);
    int num;
    LinkList *L;
    while (cin>>num)
    {
        switch (num)
        {
          case 1:InitList(L);break;
          case 2:char temp;
          cout<<"输入插入元素的个数 ";
              int n;cin>>n;
            CreateListR(L,temp,n);break;
         case 3:DisList(L);break;
         case 4: ListLength(L);break;
         case 5:ListEmpty(L);break;
         case 6:int index;
                cout<<"请输入查找原素的下标 ";
                cin>>index;
                GetElem(L,index);break;
        case 7:cout<<"请输入要查找的元素 ";
                char keyword;cin>>keyword;
                LocateElem(L,keyword);break;
        case 8: cout<<"请输入要插入的位置和内容";
                int insert_num;cin>>insert_num;
                char  insert_word;cin>>insert_word;
            ListInsert(L,insert_num,insert_word);break;
        case 9:cout<<"请输入要删除的位置和内容";
                int delete_num;cin>>delete_num;
                char delete_word;cin>>delete_word;
              ListDelete(L,delete_num,delete_word);break;
        case 10:DestoryList(L);break;
        }
    }


    return 0;
}
 void InitList(LinkList*&L)
 {
     L=(LinkList*)malloc(sizeof(LinkList));
     L->next=NULL;
     cout<<"线性表初始化成功"<<endl;
 }
 void CreateListR(LinkList*&L,ElemType e,int n)
 {
     LinkList*s,*r;
     L=(LinkList*)malloc(sizeof(LinkList));
     r=L;
     for(int i=0;i<n;++i)
     {cout<<"请输入插入元素 ";
         cin>>e;
         s=(LinkList*)malloc(sizeof(LinkList));
         s->data=e;
         r->next=s;
         r=s;
         cout<<"插入元素成功"<<endl;
     }
     r->next=NULL;
 }
 void DisList(LinkList*L)
 {
     LinkList *pointer=L->next;
     while(pointer!=NULL)
     {
         cout<<pointer->data<<" ";
         pointer=pointer->next;
     }
     cout<<endl;
 }
  void ListLength(LinkList *L)
  {
      int counter=0;
      LinkList *p=L;
      while(p->next!=NULL)
      {
          counter++;
          p=p->next;
      }
      cout<<"此时线性表的长度为L->length="<<counter<<endl;
  }
  void ListEmpty(LinkList *L)
  {
      if(L->next==NULL)
      {
          cout<<"YES"<<endl;


      }
      else
      {
          cout<<"NO"<<endl;
      }
  }
  void GetElem(LinkList*L,int i)
  {
      int j=0;
      LinkList*p=L;
      while(j<i&&p!=NULL)
      {
          j++;
          p=p->next;
      }
      if(p==NULL)
      {
          cout<<"未查找到该元素"<<endl;
      }
      else
      {
          cout<<"依据序号查找到的元素为"<<p->data<<endl;
      }
  }
 void LocateElem(LinkList*L,ElemType e)
 {
     int i=1;
     LinkList*p=L->next;
     while(p!=NULL&&p->data!=e)
     {
         p=p->next;
         i++;
     }
     if(p==NULL)
     {
         cout<<"输入的元素有误,为查找到"<<endl;
     }
     else
     {
         cout<<e<<"的下标为"<<i<<endl;
     }
 }
  void ListInsert(LinkList*&L,int i,ElemType e)
  {
      LinkList *p=L,*s;
      int j=0;
      while(j<i-1&&p!=NULL)
      {
          j++;
          p=p->next;
      }
      if(p==NULL)
      {
          cout<<"插入位置错误,返回"<<endl;
      }
      else
      {
          s=(LinkList*)malloc(sizeof(LinkList));
          s->data=e;
          s->next=p->next;
          p->next=s;
          cout<<"插入数据成功"<<endl;
      }
  }
   void ListDelete(LinkList*&L,int i,ElemType &e)
   {
       int j=0;
       LinkList*p=L,*q;
       while(j<i-1&&p!=NULL)
       {
           j++;
           p=p->next;
       }
       if(p==NULL)
       {
           cout<<"删除元素失败,返回"<<endl;
       }
       else
       {
           q=p->next;
           if(q==NULL)
           {
                cout<<"删除元素失败,返回"<<endl;
           }
           e=q->data;
           p->next=q->next;
           free(q);
           cout<<"删除元素成功"<<endl;
       }
   }
       void DestoryList(LinkList*&L)
       {
           LinkList*pre=L,*p=p->next;
           while(p!=NULL)
           {
               free(pre);
               pre=p;
               p=pre->next;
           }
           free(pre);
           cout<<"销毁线性表成功"<<endl;
       }

0 0