单链表基本操作(C++版)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

#includeiostream#includeiomanipusingnamespacestd;#defineOK1#defineERROR0typedefintStatus;typedefintElemType;//-------------单链表的存储结构--------------------typedefstructLNode{ElemTypedata;//结点的数据域structLNode*next;//结点的指针域}LNode,*LinkList;//-------------单链表的初始化-----------------------StatusInitList_L(LinkList&L){//构造一个空的链表LL=newLNode;//生成新结点作为头结点,用头指针L指向头结点L-next=NULL;//头结点的指针域置空returnOK;}//-------------按序号查找----------------------------------StatusGetElem_L(LinkListL,inti,ElemType&e){//在带头结点的单链表L中查找第i个元素LinkListp;p=L-next;//初始化,p指向第一个结点intj=1;//j为计数器while(p&&ji)//顺链域向后扫描,直到p指向第i个元素或p为空{p=p-next;++j;}if(!p||ji)//第i个元素不存在returnERROR;e=p-data;//取第i个元素returnOK;}//------------按值查找---------------------------------------LNode*LocateElem_L(LinkListL,ElemTypee){//在带头结点的单链表L中查找值为e的元素LNode*p;p=L-next;while(p&&p-data!=e)//寻找满足条件的结点p=p-next;returnp;//返回L中值为e的元素的位置;查找失败的话返回NULL}//------------插入-------------------------------------------StatusListInsert_L(LinkList&L,inti,ElemType&e){LinkListp=L;intj=0;while(p&&ji-1){p=p-next;++j;}if(!p||ji-1)returnERROR;LinkLists;s=newLNode;//生成新结点ss-data=e;//将结点s的数据域置为es-next=p-next;//将结点s插入L中p-next=s;cout插入完成endl;returnOK;}//--------------单链表删除------------StatusListDelete_L(LinkList&L,inti,ElemTypee){LinkListp=L;LinkListq;intj=0;while(p&&ji-1)//寻找第i-1个结点{p=p-next;++j;}if(!(p-next)||ji-1)returnERROR;//i大于表长+1或小于1q=p-next;//临时保存被删结点的地址以备释放p-next=q-next;//改变删除结点前驱结点的指针域e=q-data;deleteq;//释放删除结点的数据域coute被删除endl;returnOK;}//---------------前插法创建链表--逆序输入--------voidCreateList_F(LinkList&L,intn){L=newLNode;LinkListp;L-next=NULL;//先建立一个带头结点的空链表for(inti=n;i0;--i){p=newLNode;//生成新结点cinp-data;//输入元素值p-next=L-next;L-next=p;//插入到表头}}//--------------后插法创建链表--正序输入-----------voidCreateList_L(LinkList&L,intn){L=newLNode;LinkListp;L-next=NULL;LinkListr=L;//尾指针r指向头结点for(inti=0;in;++i){p=newLNode;//生成新结点cinp-data;p-next=NULL;r-next=p;r=p;//r指向新的结点}}intmain(){intchoice;intn;inti;ElemTypee;LNode*L;cout选项:endlsetw(10)1.创建endlsetw(10)2.查找endlsetw(10)3.插入endlsetw(10)4.删除endlsetw(10)0.退出endl请选择:endl;cinchoice;while(i!=0){switch(choice){case1:{intchoice1;InitList_L(L);cout1.前插法2.后插法endl请选择:endl;cinchoice1;switch(choice1){case1:cout请输入结点个数:endl;cinn;cout请输入元素值:endl;CreateList_F(L,n);break;case2:cout请输入结点个数:endl;cinn;cout请输入元素值:endl;CreateList_L(L,n);break;default:cout输入有误endl;break;}break;}case2:{intchoice1;cout1.按序号查找2.按值查找endl请选择:endl;cinchoice1;switch(choice1){case1:cout请输入序号;cini;GetElem_L(L,i,e);cout此结点数据域为:eendl;break;case2:cout请输入值:;cine;cout此数据的第一个位置为:LocateElem_L(L,e)endl;break;default:cout输入有误endl;break;}break;}case3:cout请输入位置:;cini;cout请输入数值:;cine;ListInsert_L(L,i,e);break;case4:cout请输入位置:;cini;ListDelete_L(L,i,e);break;case0:return0;default:cout输入有误,请重新输入:endl;}cout请选择:;cinchoice;}return0;}/*1105_XL*/

1 / 6
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功