单链表的查找插入与删除Word下载.docx
- 文档编号:20056281
- 上传时间:2023-01-16
- 格式:DOCX
- 页数:13
- 大小:100.77KB
单链表的查找插入与删除Word下载.docx
《单链表的查找插入与删除Word下载.docx》由会员分享,可在线阅读,更多相关《单链表的查找插入与删除Word下载.docx(13页珍藏版)》请在冰豆网上搜索。
二、程序设计的基本思想,原理和算法描述:
1、基本操作函数
link*get(link*l,inti);
//创建链表
link*ins(link*l,inta,inti)//在链表内插入值
link*find(link*l,inta);
//在链表内查找值
link*del(link*l,inti);
//在链表内删除值
link*delrepeat(link*l);
//在链表内删除重复值
link*deleven(link*l);
//删除链表内偶数值
link*rotate(link*l);
//形成循环链表
voiddivide(link*l);
//分解成两个链表
cout<
<
endl;
2、基本操作
cout<
"
请选择您要的操作:
;
1、插入"
2、查找"
3、删除"
4、删除重复结点"
5、删除偶数结点"
6、构建循环链表"
7、分解为两个链表"
0、退出"
三、源程序及注释:
#include<
iostream>
usingnamespacestd;
typedefstructnode
{
intdata;
structnode*next;
}link;
voidprint1(link*l);
link*get(link*l,inti)
link*p;
intj=0;
p=l;
while((j<
i)&
&
(p->
next!
=NULL))
{
p=p->
next;
j++;
}
if(j==i)
returnp;
else
returnNULL;
}
link*ins(link*l,inta,inti)
{
link*p,*s;
p=get(l,i-1);
if(p==NULL)
cout<
输入有误"
else
s=(link*)malloc(sizeof(link));
s->
data=a;
next=p->
p->
next=s;
returnl;
link*find(link*l,inta)
inti=0;
while(p!
=NULL)
{
i++;
if(p->
data!
=a)
p=p->
else
{
cout<
您查找的数据在第"
i-1<
个位置."
j=1;
}
if(j!
=1)
您查找的数据不在线性表中."
returnl;
link*del(link*l,inti)
s=p->
next=s->
free(s);
link*delrepeat(link*l)//删除相同元素并释放内存
link*s,*r,*t;
if(l->
next==NULL)
s=l->
next;
while(s->
next)
t=s;
r=s->
while(t->
if(s->
data==r->
data)
t->
next=r->
free(r);
r=t->
}
else
t=t->
s=s->
if(!
s)
returnl;
}
link*deleven(link*l)
link*q=l;
link*p=l->
while(p)
data%2==0)
link*r=p;
q->
free(r);
q=q->
link*rotate(link*l)
link*p=l;
while(p->
next)p=p->
p->
next=l;
link*t=l->
while(t!
=l)
t=t->
已经变为循环链表,其他操作将受影响,程序结束!
'
\n'
voiddivide(link*l)
link*a=l;
link*b=(link*)malloc(sizeof(node));
b->
next=NULL;
link*Lb=b;
inti=1;
link*La=l;
link*p=l->
if(i++%2==0)
La->
p->
Lb->
next=p;
Lb=Lb->
p=La->
La=La->
链表a"
print1(a);
链表b"
print1(b);
voidprint1(link*l)
inti,k;
inta;
link*p,*q;
当前线性表为:
p=p->
if(l!
do
p->
data<
"
}while(p!
=NULL);
link*print(link*l)
cin>
>
k;
if(k==1)
请输入您要插入的数据值:
cin>
a;
请输入您要插入的位置:
i;
p=ins(l,a,i);
q=print(l);
elseif(k==2)
请输入您要查找的数据值:
p=find(l,a);
elseif(k==3)
请输入您要删除的数据的位置:
p=del(l,i);
elseif(k==4)
删除重复结点后的"
p=delrepeat(l);
elseif(k==5)
删除偶数结点后的"
p=deleven(l);
elseif(k==6)
p=rotate(l);
elseif(k==7)
divide(l);
elseif(k==0);
{cout<
输入错误!
intmain()
请输入20个整数:
intch[20];
inti;
//link*head;
link*r,*p,*q,*l;
l=(link*)malloc(sizeof(link));
l->
r=l;
for(i=0;
i<
20;
i++)
ch[i];
p=(link*)malloc(sizeof(link));
data=ch[i];
r->
r=r->
return0;
四、运行输出结果:
五、调试和运行程序过程中产生的问题及采取的措施:
1、本次实验采用C++语言,程序基本能实现实验所要求的操作功能,但是首次使用C++来完成所有链表的操作,有很多小细节不够注意,比如定义结点与结点的使用,需要多操作,多熟悉语。
2、最后两个操作
voidrotate(link*l);
//变为循环链表
voiddivide(link*l);
//分解成两个链表
一旦执行,将破坏链表的结构,无法再进行其他操作,需要结束整个程序。
可以设置一个主函数结束标志,此处就不详细说明。
六、对算法的程序的讨论、分析,改进设想,其它经验教训:
程序是8个基本操作,设置不同的数字对应这些基本操作,由用户自己选择执行,这样程序灵活,也便于用户使用和观察。
在创建链表时,原来设计的是输入固定长度的链表,后来改进为由用户输入任意长度的数据,只需要用一个标志数字表示结束即可。
七、对实验方式、组织、设备、题目的意见和建议:
这个实验基本涵盖了单链表所有的简单操作,只要能写完程序并顺利运行,也就掌握了单链表的相关知识内容。
但是由于涵盖内容偏多,课内无法完成,必须在课外花很多时间,建议老师对此有所调整。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单链表 查找 插入 删除