单链表的建立删除及建立递增的单链表.docx
- 文档编号:7835345
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:17
- 大小:18.87KB
单链表的建立删除及建立递增的单链表.docx
《单链表的建立删除及建立递增的单链表.docx》由会员分享,可在线阅读,更多相关《单链表的建立删除及建立递增的单链表.docx(17页珍藏版)》请在冰豆网上搜索。
单链表的建立删除及建立递增的单链表
班级:
数学112班学号:
201112010222姓名:
吕文辉报告日期:
2012/12/9
试验一:
单链表
一、实验目的
(1)掌握单链表的存储结构形式及其描述。
(2)掌握单链表的建立、查找、插入和删除操作。
二、实验要求
(1)编写函数,实现随机产生或键盘输入一组元素,建立一个带头结点的单链表(无序)。
(2)编写函数,实现遍历单链表。
(3)编写函数,实现把单向链表中元素逆置(不允许申请新的结点空间)。
(4)编写函数,建立一个非递减有序单链表。
(5)编写函数,利用以上算法,建立两个非递减有序单链表,然后合并成一个非递减链表。
(6)编写函数,在非递减有序单链表中插入一个元素使链表仍然有序。
(7)编写函数,实现在非递减有序链表中删除值为x的结点。
(8)编写一个主函数,在主函数中设计一个简单的菜单,分别调试上述算法。
三、实验代码:
#include
#include
#include
///////////////////////////////////////////
typedefcharelemtype;
#definenull0
constintn=20;
inti=1;
typedef
structnode
{elemtypedata;
structnode*p;
}node,*linklist;
///////////////////////////
voidinitlist(linklistL);//初始化单链表
voidcreatefromhead(linklistL);//利用头插法建立单链表;
voidtextlinklist(linklistL);//检测单链表;
voidcreatefromtail(linklistL);//尾插法建立单链表;
voidlinklistnizhi(linklistk);//单链表的逆置;
voidLorder(elemtypea[n],intn);//给数组中元素排序;
voidincreaselinklist(linklistk);//给单链表中的元素排序;
linklistunittwolinklist(linklistk1,linklistk2);//建立两个非递减有序单链表,然后合并成一个非递减链表。
voidDeleteIncreaselinklist(linklistk);//编写函数,实现在非递减有序链表中删除值为x的结点
voidInsertelemtypelinklist(linklistk);//编写函数,在非递减有序单链表中插入一个元素使链表仍然有序
voidalllinklistfunctionlwh(chars);//将所有函数的整合在一个函数里面;
voidtextlwhplinklist(linklistlwhp);
///////////////////////////////
intmain()
{
cout<<"************************"< cout<<"头插法建立程序的眼演示实例"< cout<<"************************"< chars; cout<<"如果执行程序请输入L"< cin>>s; alllinklistfunctionlwh(s); //////////////////////////////////////////////// //调试程序时要用到的代码; /*nodelwh; linklistlwhp; lwhp=&lwh; initlist(lwhp); cout<<"sizeof(node)"< cout<<"sizeof(lwhp)"< cout<<"第一个为表头指针,不放数据,由于用的头插法,故输出链表的顺序和输入的顺序恰好相反"< createfromhead(lwhp); createfromtail(lwhp); linklistnizhi(lwhp);1逆置单链表; increaselinklist(lwhp);//给单链表中的元素排序; //建立另外一个单链表; nodelwh1; linklistlwhp1; lwhp1=&lwh1; initlist(lwhp1); createfromtail(lwhp1); linklistlwhp2; lwhp2=unittwolinklist(lwhp,lwhp1); DeleteIncreaselinklist(lwhp); Insertelemtypelinklist(lwhp); charw; cout<<"如果想检验是否成功建立单链表,如果想检验就请输入y或Y"< cin>>w; if(w=='y'||w=='Y') { textlinklist(lwhp); } */ //调试程序时要用到的代码; ////////////////////////////////////////////////////// return0; } ////////////////////////////////////////////////////////// voidalllinklistfunctionlwh(chars) {intlwhf=1; if('L'==s) {cout<<"如果想运行初始化单链表函数请输入0"< cout<<"如果想运行利用头插法建立单链表函数请输入1"< cout<<"如果想运行尾插法建立单链表单链表请输入2"< cout<<"如果想运行单链表的逆置函数请输入3"< cout<<"如果想运行给数组中元素排序函数请输入4"< cout<<"如果想运行建立两个非递减有序单链表,然后合并成一个非递减链表函数请输入5"< cout<<"如果想运行实现在非递减有序链表中删除值为x的结点请输入6"< cout<<"如果想运行在非递减有序单链表中插入一个元素使链表仍然有序表函数请输入7"< cout<<"如果想运行退出该层函数请输入8"< cout<<"请输入序号: "< inti; charf; cin>>i; while(lwhf) { switch(i) {case0: cout<<"初始化单链表函数"< nodelwh0; linklistlwhp0; lwhp0=&lwh0; initlist(lwhp0); textlwhplinklist(lwhp0); cout<<"执行成功"< break; case1: cout<<"利用头插法建立单链表函数"< cout<<"请输入字符"< nodelwh1; linklistlwhp1; lwhp1=&lwh1; initlist(lwhp1); createfromhead(lwhp1); textlwhplinklist(lwhp1); break; case2: cout<<"尾插法建立单链表单链表"< cout<<"请输入字符"< nodelwh2; linklistlwhp2; lwhp2=&lwh2; initlist(lwhp2); createfromtail(lwhp2); textlwhplinklist(lwhp2); break; case3: cout<<"单链表的逆置函数"< cout<<"请输入字符"< nodelwh3; linklistlwhp3; lwhp3=&lwh3; initlist(lwhp3); createfromtail(lwhp3); linklistnizhi(lwhp3); textlwhplinklist(lwhp3); break; case4: cout<<"给数组中元素排序函数"< cout<<"请输入字符"< nodelwh4; linklistlwhp4; lwhp4=&lwh4; initlist(lwhp4); createfromtail(lwhp4); increaselinklist(lwhp4); textlwhplinklist(lwhp4); break; case5: cout<<"建立两个非递减有序单链表,然后合并成一个非递减链表函数"< cout<<"请输入第一个单链表的字符"< nodelwh50; linklistlwhp50; lwhp50=&lwh50; initlist(lwhp50); createfromtail(lwhp50); cout<<"请输入第二个单链表的字符"< nodelwh51; linklistlwhp51; lwhp51=&lwh51; initlist(lwhp51); createfromtail(lwhp51); linklistlwhp52; lwhp52=unittwolinklist(lwhp50,lwhp51); textlwhplinklist(lwhp52); break; case6: cout<<"实现在非递减有序链表中删除值为x的结点"< cout<<"请输入字符"< nodelwh6; linklistlwhp6; lwhp6=&lwh6; initlist(lwhp6); createfromtail(lwhp6); DeleteIncreaselinklist(lwhp6); textlwhplinklist(lwhp6); break; case7: cout<<"在非递减有序单链表中插入一个元素使链表仍然有序表函数"< cout<<"请输入字符"< nodelwh7; linklistlwhp7; lwhp7=&lwh7; initlist(lwhp7); createfromtail(lwhp7); Insertelemtypelinklist(lwhp7); textlwhplinklist(lwhp7); break; default: break; } cout<<"请重新选择序号"< cin>>i; if(i! =1&&i! =2&&i! =3&&i! =4&&i! =5&&i! =6&&i! =7&&i! =8) { cout<<"如果不想选择序号就输入字符"< cin>>f; if(f=='y'||f=='Y') { lwhf=1; } elselwhf=0; } } } } voidtextlwhplinklist(linklistlwhp) { charw; cout<<"如果想检验是否成功建立单链表,如果想检验就请输入y或Y"< cin>>w; if(w=='y'||w=='Y') { textlinklist(lwhp); } } /////////////////////////////////////////////////////////// //所有函数的代码定义: voidinitlist(linklistL) { //L=(linklist)malloc(sizeof(node)); L->p=null; } //头插法建立单链表; voidcreatefromhead(linklistL) { node*jiedian; //jiedian=L; charzimu; boolflag=true; //cin>>zimu; /*if(zimu! ='&') { L->data=zimu; }*/ while(flag) {cin>>zimu; if(zimu! ='&') { jiedian=(linklist)malloc(sizeof(node)); jiedian->data=zimu; jiedian->p=L->p; L->p=jiedian; //cout<<"jiedian->data"< } elseflag=false; } } //一个检测单链表是否建立成功的函数; voidtextlinklist(linklistL) {linklistp1; inti=1; p1=L->p;//建立指向单链表的第一个节点的指针; while(p1! =null) { cout<<"这是第"<data="< <<""<<"L->p="< p1=p1->p; i++; } } //利用尾插法建立单链表 voidcreatefromtail(linklistL) { linklists,r; boolflag=true; r=L; charc; while(flag) {cin>>c; if(c! ='&') {s=(linklist)malloc(sizeof(node)); s->data=c; r->p=s; r=s; } else{ r->p=null; flag=false; } } } //单链表中元素逆置; voidlinklistnizhi(linklistk)//假设k是个由尾插法建立起来的单链表; /*算法思想: 只交换元素的位置,不改变节点的指针*/ {linklistk1,k2,k3; k1=k->p; k2=k1; k3=k1; inti=0,w; elemtypea[n]; while(k1! =null) { a[i]=k1->data; k1=k1->p; i++; } w=i;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单链表 建立 删除 递增
![提示](https://static.bdocx.com/images/bang_tan.gif)