数据结构单链表实验.docx
- 文档编号:29057503
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:17
- 大小:17.47KB
数据结构单链表实验.docx
《数据结构单链表实验.docx》由会员分享,可在线阅读,更多相关《数据结构单链表实验.docx(17页珍藏版)》请在冰豆网上搜索。
数据结构单链表实验
#include“iostream.h”
#include"Linkedlist.h"
intmain(intargc,char*argv[])
{
listl,p,l1,l2,l3;
inti,x;
intnChoice=-1;//操作选择
do
{
//显示主菜单
cout<<"*******************************************************************************\n";
cout<<"*0-退出|1-尾插法创建单链表\n";
cout<<"*2-头插法创建单链表|3-销毁单链表\n";
cout<<"*4-求链表长度|5-求单链表中第i个元素\n";
cout<<"*6-在第i个结点前插入值为x的结点|7-链表中查找元素值为x的结点\n";
cout<<"*8-删除单链表中第i个元素结点|9-递增有序单链表插入元素\n";
cout<<"*10-单链表中奇偶数项分开|11-求两个递增有序单链表L1和L2中的公共元素\n";
cout<<"*12-删除递增有序单链表中的重复元素|13-两个递增有序单链表合并\n";
cout<<"*******************************************************************************\n";
cout<<"请输入数字选择操作:
";
cin>>nChoice;
switch(nChoice)
{
case1:
//尾插法创建单链表
cout<<"请输入单链表中元素(9999退出):
"< l.create_r(); l.print(); l.destroy(); cout< break; case2: //头插发创建单链表 cout<<"请输入单链表中元素(9999退出): "< p.create_h(); p.print(); l.destroy(); cout< break; case3: // cout<<"请输入单链表中元素(9999退出): "< l.create_r(); l.destroy(); cout< break; case4: //求链表长度 cout<<"请输入单链表中元素(9999退出): "< l.create_r(); cout<<"链表长度为: "; cout< l.destroy(); break; case5: //求单链表中第i个元素 cout<<"请输入单链表中元素(9999退出): "< l.create_r(); cout<<"请输入要查找元素的序号: "; cin>>i; if(l.get_element(i,x)==false)cout<<"要查找的元素不存在! "< elsecout<<"找到您要查找的元素为: "< l.destroy(); break; case6: //在第i个结点前插入值为x的结点 cout<<"请输入单链表中元素(9999退出): "< l.create_r(); cout<<"请输入要插入的位置及数值"< cout<<"位置序号: "; cin>>i; cout< cout<<"数值: "; cin>>x; cout< l.insert(i,x); l.print(); l.destroy(); cout< break; case7: //链表中查找元素值为x的结点 cout<<"请输入单链表中元素(9999退出): "< l.create_r(); cout<<"请输入要查找元素的值x: "; cin>>x; if(l.locate(x)==false) cout<<"你查找的元素不存在! "< elsecout<<"你查找元素的指针为l: "< l.destroy(); case8: //删除单链表中第i个元素结点 cout<<"请输入单链表中元素(9999退出): "< l.create_r(); cout<<"请输入你要删除节点的序号i: "; cin>>i; if(l.delete_element(i)==false)cout<<"你要删除的节点不存在! "< else{l.delete_element(i); l.print(); cout< l.destroy(); break; case9: //递增有序单链表插入元素 cout<<"请输入单链表中元素(9999退出): "< l.create_r(); cout<<"请输入你要插入的元素x: "; cin>>x; l.insert1(x); l.print(); cout< l.destroy(); break; case10: //单链表中奇偶数项分开 cout<<"请输入单链表中元素(9999退出): "< l.create_r(); cout<<"原表为: "< l.print(); cout< l.division(l,l1,l2); cout<<"偶数项为: "; l1.print(); cout< l1.destroy(); cout<<"奇数项为: "; l2.print(); cout< l2.destroy(); break; case11: //求两个递增有序单链表L1和L2中的公共元素 cout<<"请输入单链表L1中元素(9999退出): "< l1.create_r(); cout<<"请输入单链表L2中元素(9999退出): "< l2.create_r(); l3.interset(l1,l2,l3); cout<<"L1和L2中的公共元素为: "; l3.print(); cout< break; case12: //删除递增有序单链表中的重复元素 cout<<"请输入单链表中元素(9999退出): "< l.create_r(); l.delete1(); cout<<"删除重复元素后的单链表为: "< l.print(); cout< break; } }while(nChoice! =0); return0; } #include"iostream.h" typedefintelementtype; typedefstructLNode { elementtypedata; structLNode*next; }node; classlist { public: list(); intlength()const; voiddestroy(); voidcreate_r(); voidcreate_h(); boolget_element(constinti,elementtype&x)const; node*locate(constelementtypex)const; boolinsert(constinti,constelementtypex); booldelete_element(constinti); node*get_head(){returnhead;} intprint(); voidinsert1(constelementtypey); voiddivision(listl,list&a,list&b); voidinterset(lista,listb,list&c); booldelete1(); private: intcount; node*head; }; //表尾插入法建表 voidlist: : create_r() { elementtypex; cin>>x; node*rear=head; while(x! =9999) { count++; node*s=newnode; s->data=x; rear->next=s; rear=s; rear->next=NULL; cin>>x; } } //表头插入法建立链表 voidlist: : create_h() { elementtypex; node*s=newnode; cin>>x; while(x! =9999) { count++; s=newnode; s->data=x; s->next=head->next; head->next=s; cin>>x; } } // list: : list() { head=newnode; head->next=NULL; count=0; } intlist: : length()const {returncount;} voidlist: : destroy() { node*p,*u; p=head;//p指向头结点 while(p) { u=p->next;//取得下一个结点指针 deletep;//删除当前结点 p=u;//p指向下一个结点 } head=NULL;//头指针置空 cout<<"单链表已销毁"< } boollist: : get_element(constinti,elementtype&x)const { node*p=newnode; p=head->next; intj=1; while(p! =NULL&&j! =1) { p=p->next; j++; } if(p==NULL)returnfalse; x=p->data; returntrue; } //查找运算 node*list: : locate(constelementtypex)const { node*p=newnode; p=head->next; while(p! =NULL) {if(p->data==x)returnp; elsep=p->next; } returnNULL; } //插入算法 boollist: : insert(constinti,constelementtypex) { node*p=newnode; p=head; intj=0; while(j! =i-1&&p! =NULL) { p=p->next; j++; } if(i<1||i>count+1) returnfalse; node*s=newnode; s->data=x; s->next=p->next; p->next=s; count++; returntrue; } //删除运算 boollist: : delete_element(constinti) { node*p=newnode; node*u=newnode; intj=0; p=head->next; while(j! =i-1&&p! =NULL) { p=p->next; j++; } if(i<1||i>count) returnfalse; u=p->next; p->next=u->next; deleteu; count--; returntrue; } intlist: : print() { node*p=newnode; p=head->next; while(p) { cout< p=p->next; } returnNULL; } //递增有序单链表中插入元素,并保持递增有序性 voidlist: : insert1(constelementtypey) { node*p=newnode; p=head->next; while(p->data<=y) p=p->next; node*u=newnode; u->data=p->data; p->data=y; u->next=p->next; p->next=u; count++; } //将链表l中的奇偶数项节点分解开并分别放入两个链表中 voidlist: : division(listl,list&a,list&b) { node*p=newnode; p=l.head->next; node*rear,*rear1; rear=a.get_head(); rear1=b.get_head(); while(p! =NULL) { if(p->data%2==0) { a.count++; node*m=newnode; m->data=p->data; rear->next=m; rear=m; rear->next=NULL; } else { b.count++; node*n=newnode; n->data=p->data; rear1->next=n; rear1=n; rear1->next=NULL; } p=p->next; } } //将两个递增有序单链表L1和L2中的公共元素,放入新的单链表L3中 voidlist: : interset(lista,listb,list&c) { node*pa,*pb,*rc,*u; rc=c.get_head(); pa=a.get_head()->next; pb=b.get_head()->next; while(pa! =NULL&&pb! =NULL) { if(pa->data elseif(pa->data>pb->data)pb=pb->next; else{ u=newnode; u->data=pa->data; rc->next=u; rc=u; c.count++; pa=pa->next; pb=pb->next; } } rc->next=NULL; } //删除递增有序单链表中的重复元素 boollist: : delete1() { node*p=head->next; if(p==NULL)returnfalse; while(p->next! =NULL) { if(p->data==p->next->data) { node*u=newnode; u=p->next; p->next=u->next; deleteu; count--; } elsep=p->next; } returntrue; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 单链表 实验