ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:100.77KB ,
资源ID:7031768      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7031768.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单链表的查找插入与删除.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

单链表的查找插入与删除.docx

1、单链表的查找插入与删除数据结构实验报告一题目:单链表的查找、插入与删除 班级: 电子0802 学号: 姓名: 日期: 2011.03.08 程序名: cqq1.c 一、上机实验的问题和要求:单链表的查找、插入与删除。设计算法,实现线性结构上的单链表的产生以及元素的查找、插入与删除。具体实现要求:1.从键盘输入20个整数,产生不带表头的单链表,并输入结点值。2.从键盘输入1个整数,在单链表中查找该结点的位置。若找到,则显示“找到了”;否则,则显示“找不到”。3.从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x插入在对应位置上,输出单链表所有结点值,观察输出结果。4.从键

2、盘输入1个整数,表示欲删除结点的位置,输出单链表所有结点值,观察输出结果。5.将单链表中值重复的结点删除,使所得的结果表中个结点值均不相同,输出单链表所有结点值,观察输出结果。6.删除其中所有数据值为偶数的结点,输出单链表所有结点值,观察输出结果。7.把单链表变成带表头结点的循环链表,输出循环单链表所有结点值,观察输出结果。8.()将单链表分解成两个单链表A和B,使A链表中含有原链表中序号为奇数的元素,而B链表中含有原链表中序号为偶数的元素,且保持原来的相对顺序,分别输出单链表A和单链表B的所有结点值,观察输出结果。二、程序设计的基本思想,原理和算法描述:1、基本操作函数link * get(

3、link *l, int i); /创建链表link * ins (link *l, int a,int i) /在链表内插入值link * find(link *l, int a); /在链表内查找值link * del(link *l, int i); /在链表内删除值link * delrepeat( link *l); /在链表内删除重复值link * deleven(link *l); /删除链表内偶数值link * rotate(link *l); /形成循环链表void divide(link *l); /分解成两个链表coutendl;2、基本操作 cout请选择您要的操作:;

4、 cout 1、插入; cout 2、查找; cout 3、删除; cout 4、删除重复结点; cout 5、删除偶数结点; cout 6、构建循环链表; cout 7、分解为两个链表; cout 0、退出;三、源程序及注释:#include using namespace std;typedef struct nodeint data;struct node *next;link;void print1(link *l);link * get(link *l, int i) link *p; int j=0; p=l; while(jnext!=NULL) p=p-next;j+; if(

5、j=i) return p; else return NULL;link * ins (link *l, int a,int i) link *p,*s; p=get(l,i-1); if(p=NULL) cout输入有误data=a; s-next=p-next; p-next=s; return l;link * find(link *l, int a) link *p; int i=0; int j=0; p=l; while(p!=NULL) i+; if(p-data!=a) p=p-next; else cout您查找的数据在第i-1个位置.next; if(j!=1) cout您

6、查找的数据不在线性表中.endl; return l;link * del(link *l, int i) link *p,*s; p=get(l,i-1); if(p=NULL) cout输入有误next; p-next=s-next; free(s); return l;link * delrepeat( link *l) / 删除相同元素并释放内存 link *s, *r, *t; if ( l- next = NULL ) return l; s = l- next; while ( s- next ) t = s; r = s- next; while ( t- next ) if

7、( s- data = r- data ) t- next = r- next; free(r); r = t- next; else t = t- next; r = t- next; s = s- next; if ( !s ) return l; return l; link * deleven(link *l) link *q=l; link *p=l-next; while(p) if(p-data%2=0) link *r=p; q-next=p-next; p=p-next; free(r); else p=p-next; q=q-next; return l;link * ro

8、tate(link *l) link * p=l; while(p-next)p=p-next; p-next=l; link * t=l-next; while(t!=l) t=t-next; cout已经变为循环链表,其他操作将受影响,程序结束!next=NULL; link *Lb=b; int i=1; link * La=l; link * p=l-next; while(p) if(i+%2=0) La-next=p-next; p-next=NULL; Lb-next=p; Lb=Lb-next; p=La-next; else p=p-next; La=La-next; cou

9、t链表a; print1(a); cout链表b; print1(b); void print1(link *l) int i,k; int a; link *p,*q; cout当前线性表为:next; if(l!=NULL) do coutdatanext; while(p!=NULL); coutendl;link * print(link *l) int i,k; int a; link *p,*q; cout当前线性表为:next; if(l!=NULL) do coutdatanext; while(p!=NULL); coutendl; cout请选择您要的操作:; cout 1

10、、插入; cout 2、查找; cout 3、删除; cout 4、删除重复结点; cout 5、删除偶数结点; cout 6、构建循环链表; cout 7、分解为两个链表; cout 0、退出; coutk; if(k=1) couta; couti; p=ins(l,a,i); q=print(l); else if(k=2) couta; p=find(l,a); q=print(l); else if(k=3) couti; p=del(l,i); q=print(l); else if(k=4) cout删除重复结点后的; p=delrepeat(l); q=print(l); el

11、se if(k=5) cout删除偶数结点后的; p=deleven(l); q=print(l); else if(k=6) p=rotate(l); q=print(l); else if(k=7) divide(l); else if(k=0); else cout输入错误!endl; return l;int main() cout请输入20个整数:next=NULL; r=l; for(i=0;ichi; p=(link *)malloc(sizeof(link); p-data=chi;p-next=NULL; r-next=p;r=r-next; q=print(l); retu

12、rn 0;四、运行输出结果:五、调试和运行程序过程中产生的问题及采取的措施:1、本次实验采用C+语言,程序基本能实现实验所要求的操作功能,但是首次使用C+来完成所有链表的操作,有很多小细节不够注意,比如定义结点与结点的使用,需要多操作,多熟悉语。2、最后两个操作 void rotate(link *l); /变为循环链表 void divide(link *l); /分解成两个链表一旦执行,将破坏链表的结构,无法再进行其他操作,需要结束整个程序。可以设置一个主函数结束标志,此处就不详细说明。六、对算法的程序的讨论、分析,改进设想,其它经验教训:程序是8个基本操作,设置不同的数字对应这些基本操作,由用户自己选择执行,这样程序灵活,也便于用户使用和观察。 在创建链表时,原来设计的是输入固定长度的链表,后来改进为由用户输入任意长度的数据,只需要用一个标志数字表示结束即可。七、对实验方式、组织、设备、题目的意见和建议:这个实验基本涵盖了单链表所有的简单操作,只要能写完程序并顺利运行,也就掌握了单链表的相关知识内容。但是由于涵盖内容偏多,课内无法完成,必须在课外花很多时间,建议老师对此有所调整。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1