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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

3数据结构实验链表答案.docx

1、3数据结构实验链表答案实 验 报 告院(系):信息科学与技术学院 课程名称:数据结构 日期:班级学号实验室专业姓名计算机号实验名称线性链表的运算成绩评定所用软件V C或TC教师签名实验目的1 掌握线性链表的基本概念2 掌握线性链表的建立、插入和删除等方法。3 掌握线性链表的基本算法。实验总结一、程序:#include stdio.h#include stdlib.htypedef char elemtype;typedef struct node elemtype data; struct node *next; NODE,*NODEPTR;NODEPTR createlistf() char

2、 ch; NODEPTR head; NODE *p; head=(NODEPTR )malloc(sizeof(NODE); head-next=0; ch=getchar(); while(ch!=n) p=(NODE *)malloc(sizeof(NODE); p-data=ch; p-next=head-next; head-next=p; ch=getchar(); return (head); int InsLinkList(NODE *p, char x) NODE *s; /* 定义指向结点类型的指针 */ s=(NODE *)malloc(sizeof(NODE); /*

3、生成新结点 */ s-data=x; s-next=p-next; p-next=s; return 1;void DelLinkList(NODE *p) NODE *q; if(p-next!=0) q=p-next; /* q指向p的后继结点 */ p-next=q-next; /* 修改p结点的指针域 */ free(q); /* 删除并释放结点 */ NODE *lbcz(NODE *h,int x) NODE *p; p=h; while (p!=0 & p-data!=x) p=p-next; return(p); void printlink(NODE *h)NODE *p;p

4、=h-next;printf(n);while (p!=0) printf(%c,p-data); p=p-next; printf(n);void main()NODE *h,*p;char x;printf(n头插法建立单链表,应包含字符a,以回车作为结束符n);h=createlistf();printf(n建立的单链表为n);printlink(h);printf(n在链表中查找字符an);p=lbcz(h,a);printf(n将字符k插入到字符a后面n);InsLinkList(p,k);printf(n插入字符后的链表为n);printlink(h);printf(n输入链表中被

5、删除字符的前一个字符n);scanf(%c,&x);p=lbcz(h,x);printf(n删除该字符后的一个字符n);DelLinkList(p);printf(n删除字符后的链表为n);printlink(h);二、源代码以及输入数据输出结果为:#include stdio.h#include stdlib.htypedef int elemtype;typedef struct node elemtype data; struct node *next; NODE,*NODEPTR;NODEPTR createlistf() int ch; NODEPTR head; NODE *p;

6、head=(NODEPTR )malloc(sizeof(NODE); head-next=0; scanf(%d,&ch); while(ch!=0) p=(NODE *)malloc(sizeof(NODE); p-data=ch; p-next=head-next; head-next=p; scanf(%d,&ch); return (head); int InsLinkList(NODE *h, int x) NODE *s,*q,*p; /* 定义指向结点类型的指针 */ p=h;q=p;while(p-next!=NULL & p-datanext;s=(NODE *)mallo

7、c(sizeof(NODE); /* 生成新结点 */ s-data=x; s-next=q-next; q-next=s; return 1;void printlink(NODE *h)NODE *p;p=h-next;printf(n);while (p!=0) printf( %d,p-data); p=p-next; printf(n); void main()NODE *h;printf(用头插法建升序链表,注意输入数字的顺序与得到顺序相反,以0作为结束n);h=createlistf();printf(建立的链表为);printlink(h);InsLinkList(h,55);

8、printf(插入后的链表为);printlink(h);运行情况为:三、已知单链表L,写一算法,删除其重复结点。算法思路:用指针p指向第一个数据结点,从它的后继结点开始到表的结束,找与其值相同的结点并删除之;p指向下一个;依此类推,p指向最后结点时算法结束。源程序如下:#include stdio.h#include stdlib.htypedef char elemtype;typedef struct node elemtype data; struct node *next; NODE,*NODEPTR;NODEPTR createlistf() char ch; NODEPTR he

9、ad; NODE *p; printf(头插法建立链表n); printf(请输入字符串,以回车键结束:); head=(NODEPTR )malloc(sizeof(NODE); head-next=0; ch=getchar(); while(ch!=n) p=(NODE *)malloc(sizeof(NODE); p-data=ch; p-next=head-next; head-next=p; ch=getchar(); return (head); void deLinkList(NODEPTR H) NODE *p,*q,*r; p=H-next; /p指向第一个结点 while

10、 (p!=NULL) q=p; while (q-next!=NULL) / 从*p的后继开始找重复结点 if (q-next-data=p-data) r=q-next; /找到重复结点,用r指向,删除*r q-next=r-next; free(r); else q=q-next; /while(q-next) p=p-next; /p指向下一个,继续 /while(p-next)void plink(NODE *h)NODE *p;p=h-next;printf(n);while (p!=NULL) printf(%c,p-data); p=p-next; printf(n);void

11、main()NODE *h;h=createlistf();printf(建立的链表为);plink(h);deLinkList(h);printf(删除了重复结点的链表为);plink(h);四、设有两个单链表A、B,其中元素递增有序,编写算法将A、B归并成一个按元素值递减(允许有相同值)有序的链表C,要求用A、B中的原结点形成,不能重新申请结点。#include stdio.h#include stdlib.htypedef int elemtype;typedef struct node elemtype data; struct node *next; NODE,*NODEPTR;NO

12、DEPTR createlistf() /使用尾插法建立线性链表 int x; NODEPTR head,r; NODE *p; head=(NODEPTR )malloc(sizeof(NODE); head-next=0; r=head; /r作为尾指针 printf(请输入整型数据到线性表中,以-1作为结束符n); scanf(%d,&x); while(x!=-1) /使用-1作为输入结束符 p=(NODE *)malloc(sizeof(NODE); p-data=x; r-next=p; r=p; scanf(%d,&x); r-next=0; return (head); NOD

13、EPTR merge(NODEPTR A,NODEPTR B) /线性链表的合并 NODEPTR C; NODE *p,*q,*s; p=A-next;q=B-next; C=A; /C表的头结点 C-next=NULL; free(B);while (p&q) if (p-datadata) s=p;p=p-next; else s=q;q=q-next; /从原AB表上摘下较小者 s-next=C-next; /插入到C表的头部 C-next=s; /whileif (p=NULL) p=q;while (p) / 将剩余的结点一个个摘下插入到C表的头部*/ s=p;p=p-next; s

14、-next=C-next; C-next=s; return C;void plink(NODE *h) /线性链表的输出NODE *p;p=h-next;printf(n);while (p!=0) printf(%d ,p-data); p=p-next; printf(n);void main()NODE *a,*b;printf(建立有序线性链表a和线性链表b(升序)n);a=createlistf();b=createlistf();printf(所建立的线性链表a和线性链表b分别为:n);plink(a);plink(b);a=merge(a,b);printf(合并后的线性链表为

15、:n);plink(a);五、已知单链表表示的线性表中含有两类的数据元素(字母字符,数字字符)。试设计算法,按结点的值将单链表拆分成两个循环链表,分别只含有数字或字母。要求:利用原表中的结点空间作为这两个表的结点空间,头结点可另开辟空间。 #include stdio.h#include stdlib.htypedef char elemtype;typedef struct node elemtype data; struct node *next; NODE,*NODEPTR;NODEPTR createlistf() /使用尾插法建立线性单链表 char x; NODEPTR head,

16、r; NODE *p; head=(NODEPTR )malloc(sizeof(NODE); head-next=0; r=head; /r作为尾指针 printf(请输入字符到线性表中,以回车作为结束符n); x=getchar(); while(x!=n) /使用回车作为输入结束符 p=(NODE *)malloc(sizeof(NODE); p-data=x; r-next=p; r=p; x=getchar(); r-next=NULL; return (head); void plink(NODE *a) /单链表的输出NODE *p;p=a-next;printf(n);whil

17、e (p!=NULL) printf(%c ,p-data); p=p-next; printf(n);void plooplink(NODE *a) /循环单链表的输出NODE *p;p=a-next;printf(n);while (p!=a) printf(%c ,p-data); p=p-next; printf(n); void chaifen(NODEPTR h) /线性链表的拆分 NODEPTR a,b; NODE *ar,*br,*p; if(h-next =NULL) return ; a=(NODEPTR )malloc(sizeof(NODE); a-next=a; /申

18、请a头结点 ar=a; b=(NODEPTR )malloc(sizeof(NODE); /申请b头结点 b-next=b; br=b; p=h-next; while(p!=NULL) if(p-data=0 & p-datanext=p;ar=ar-next; else br-next=p;br=br-next; p=p-next; ar-next=a; br-next=b;printf(拆分后的线性链表为:n);plooplink(a);plooplink(b); printf(n); void main()NODE *a;printf(建立线性链表an);a=createlistf()

19、;printf(所建立的线性链表a为:n);plink(a);printf(对线性链表进行拆分n);chaifen(a);用参数传递方式:/*已知单循环链表表示的线性表中含有两类的数据元素(字母字符,数字字符)。试设计算法,按结点的值将单链表拆分成两个循环链表,分别只含有数字或字母。要求:利用原表中的结点空间作为这两个表的结点空间,头结点可另开辟空间。*/#include stdio.h#include stdlib.h#define NULL 0typedef char elemtype;typedef struct nodeelemtype data;struct node *next;

20、NODE,*NODEPTR;NODEPTR createlistf() /头插法建立循环单链表char ch;NODEPTR head;NODE *p;head=(NODEPTR )malloc(sizeof(NODE);head-next=head; /建立循环空链表ch=getchar();while(ch!=n) p=(NODE *)malloc(sizeof(NODE);p-data=ch;p-next=head-next;head-next=p;ch=getchar();return(head);void chaifen(NODEPTR h,NODEPTR *a,NODEPTR *b

21、) /线性链表的拆分 NODE *ar,*br,*p; if(h-next=h) return ; /空表返回 (*a)=(NODEPTR )malloc(sizeof(NODE); /得到数字字符的空链表a (*a)-next=*a; ar=*a; /指针ar指向数字字符链表a (*b)=(NODEPTR )malloc(sizeof(NODE); /得到字母字符的空链表 (*b)-next=*a; br=*b; /指针br指向字母字符链表ab p=h-next; while(p!=h) if(p-data=0 & p-datanext=p;ar=ar-next; else br-next=

22、p;br=br-next; /否则加入到链表b p=p-next; ar-next=*a; br-next=*b; void plink(NODE *h) /输出循环单链表NODE *p;p=h-next;printf(n);while (p!=h)printf(%c,p-data);p=p-next;printf(n);void main()NODE *a;NODEPTR b,c;a=createlistf();printf(头插法建立的循环单链表a为:);plink(a);printf(n);chaifen(a,&b,&c);printf(拆分后的数字字符线性链表为:);plink(b);printf(拆分后的字母字符线性链表为:);plink(c);

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

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