数据结构-链表的操作
#include<iostream>usingnamespacestd;#defineOK1;#defineERROR0;typedefintElemType;typedefintStatus;typedefstructLNode//定义链表结构体{ElemTypedata;structLNode*next;}LNode,*LinkList;StatusCreateList_L(LinkList&L,intn)//创建链表并输入数据{inti;LinkListp,q;//pq:过度指针L=newLNode;//新申请的结点L->next=NULL;//生成头指针q=L;cout<<"pleaseinput"<<n<<"numbers";for(i=1;i<=n;i++){p=newLNode;//申请新的结点cin>>p->data;q->next=p;//链表链接q=q->next;//跳指针}q->next=NULL;//生成尾指针returnOK;}StatusOutptlist_L(LinkListL)//输出链表{LinkListp;p=L->next;//指向首结点if(p==NULL)//当链表尾空指示返回空链表{cout<<"Thislistisempyt."<<endl;}while(p!=NULL){cout<<p->data<<"";//当链表不为空,输出链表数据p=p->next;//跳指针}cout<<endl;returnOK;}intListlength_(LinkListL)//求链表长度{LinkListp;intn=0;p=L->next;//p指向首结点while(p!=NULL){n++;p=p->next;}returnn;}StatusGetElem_L(LinkListL,inti,ElemType&e)//将链表L中第i个元素用e返回{LinkListp;intj;if(i<1||i>Listlength_(L))//判断选择的合理性returnERROR;p=L->next;for(j=1;j<i;j++)//for循环寻找第i个元素p=p->next;e=p->data;//用e返回returnOK;}StatusListInsert_L(LinkList&L,inti,ElemTypee)//在链表第i个位置插入e{LinkListp,S;intj;if(i<1||i>Listlength_(L)+1)//判断选择的合理性returnERROR;if(i==1)p=L;//当在第一个元素插入时p指向头指针elsep=L->next;//否则指向首结点for(j=1;j<i-1;j++)p=p->next;S=newLNode;//申请新的结点S->data=e;//将e赋给新的结点S->next=p->next;//将新结点与前一个结点的next链接p->next=S;//将前一个结点与新节点链接returnOK;}StatusListDelete_L(LinkList&L,inti,ElemType&e)//删除链表L的第i个元素,并用e返回{LinkListp,q;intj;if(i<1||i>Listlength_(L))//判断选择的合理性returnERROR;p=L->next;for(j=1;j<i-1;j++)//找到第i个元素p=p->next;q=p->next;//q指向p的nexte=q->data;//取q的数据p->next=q->next;//将p的next与q的next链接free(q);//释放指针returnOK;}voidmain(){intn,m,k;LinkListL1;cout<<"pleaseinputaumber:";cin>>m;CreateList_L(L1,m);cout<<"输出列表:";Outptlist_L(L1);cout<<"Thelengthis"<<Listlength_(L1)<<endl;GetElem_L(L1,3,n);cout<<"Thenumberis"<<n<<endl;ListInsert_L(L1,6,0);cout<<"TheInsertlistis:";Outptlist_L(L1);ListDelete_L(L1,3,k);cout<<"TheDeletelistis:";Outptlist_L(L1);cout<<"TheDeletenumberis"<<k<<endl;}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。