数据结构-链表操作

来源:互联网 发布:初中英语词汇软件 编辑:程序博客网 时间:2024/05/18 06:22
#include<iostream>using namespace std; #define OK 1;#define ERROR 0;typedef  int   ElemType;typedef  int   Status; typedef struct LNode    //定义链表结构体{   ElemType data;   struct LNode *next;}LNode, *LinkList;   Status CreateList_L(LinkList &L,int n)    //创建链表并输入数据{   int i;   LinkList p,q;      //p q :过度指针   L=new LNode;     //新申请的结点    L->next=NULL;      //生成头指针   q=L;    cout<<"please input "<<n<< " numbers";   for(i=1;i<=n;i++)        { p=new LNode;     //申请新的结点    cin>>p->data;    q->next=p;  // 链表链接    q=q->next;    // 跳指针   }   q->next=NULL;     //生成尾指针   return OK;}  Status Outptlist_L(LinkList L)     //输出链表{ LinkList p;            p=L->next;   //指向首结点  if(p==NULL)    //当链表尾空 指示返回空链表  {   cout<<"This list is empyt."<<endl;  }  while (p!=NULL)    {   cout<<p->data<<" ";    //当链表不为空,输出链表数据   p=p->next;          // 跳指针  }  cout <<endl;  return OK;}  int  Listlength_(LinkList L)   //求链表长度{   LinkList p;               int  n=0;  p=L->next;      //p指向首结点  while (p!=NULL)  {   n++;                   p=p->next;     }  return n;}   Status GetElem_L(LinkList L,int i,ElemType &e)       //将链表L中第i个元素用e返回{ LinkList p; int j; if (i<1||i> Listlength_(L))  //判断选择的合理性  return ERROR;  p=L->next;  for (j=1;j<i;j++)   //for 循环寻找第i个元素   p=p->next ;      e=p->data;               //用e返回   return OK;}  Status ListInsert_L(LinkList&L,int i,ElemType e)    //  在链表第i个位置插入e{LinkList p,S;int j;if (i<1||i> Listlength_(L)+1)  //判断选择的合理性  return ERROR;if (i==1)  p=L;  //当在第一个元素插入时p指向头指针else p=L->next;     //否则指向首结点  for(j=1;j<i-1;j++)   p=p->next;S=new LNode;          //申请新的结点S->data=e;            //将e赋给新的结点S->next=p->next;        //将新结点与前一个结点的next链接p->next=S;              //将前一个结点与新节点链接return OK;}  Status ListDelete_L(LinkList&L,int i,ElemType &e)       //删除链表L的第i个元素,并用e返回{ LinkList p,q; int j; if (i<1||i> Listlength_(L))  //判断选择的合理性  return ERROR;     p=L->next;     for(j=1;j<i-1;j++)        //找到第i个元素  p=p->next;     q =p->next;        //  q指向p的next  e=q->data;            // 取q的数据  p->next=q->next;      //将p的next与q的next链接  free(q);               //释放指针  return OK;}     void main ()  {   int n,m,k;     LinkList L1;     cout <<"please input a umber: ";  cin>> m;     CreateList_L(L1,m);  cout<<"输出列表:";     Outptlist_L( L1);     cout<<"The length is  "<< Listlength_(L1)<<endl;      GetElem_L( L1,3,n);     cout<<"The number is  "<<n<<endl;  ListInsert_L(L1,6, 0);  cout<<"The Insertlist is :  ";  Outptlist_L( L1);  ListDelete_L(L1,3,k);  cout<<"The Deletelist is :  ";  Outptlist_L( L1);     cout<<"The Delete number is  "<<k<<endl;  }

原创粉丝点击