2022年数据结构习题解析与实训整理 .pdf
《2022年数据结构习题解析与实训整理 .pdf》由会员分享,可在线阅读,更多相关《2022年数据结构习题解析与实训整理 .pdf(25页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第 3 章 链式存储结构链式存储结构是存放数据的另一种重要方式。通常将链式存储的线性表称为链表。链式存储结构相对于顺序存储结构的最大的不同有两点,一是数据的逻辑结构和物理存储位置相互独立 ,逻辑关系上相邻的元素物理位置上不一定是相邻的。二是数据元素所需的存储空间可动态分配。这一章的习题重点是单链表的各种建立算法及在单链表上的常见操作的程序实现。单链表的数据结构如下所示。#defineDATATYPE2chartypedefstructnodeDATATYPE2data;structnodenext;LINKLIST;说明:单链表中元素结点的数据域为data,类型设定为字符 ,结点的指针域为 n
2、ext。3.1习题解析【习题 1】建立单链表 (1)题目要求 :将用户输入的数据按头插入法建立一个不带头结点的单链表。输入结点数据时以输入一串字符的方式实现,字符为结束输入字符。【解答】#includedatastru.h#include#includeintcount_nohead(LINKLIST head)/不带头结点的单链表:输出单链表元素值并计数/名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 25 页 - - - - - - - - - l22数据结构习题解析
3、与实训inti=0;LINKLIST p;p=head;printf(输出单链表元素值 : );while(p!=NULL)printf(%c ,p-data);i+;p=p-next;printf(n);returni;LINKLIST creatlink_nohead_head(LINKLIST head)/用头插入法建立不带头结点的单链表/LINKLIST t;charch;printf(单链表元素值为单个字符,连续输入 ,以为结束字符 : );while(ch=getchar()!=)=(LINKLIST)malloc(sizeof(LINKLIST);t-data=ch;t-next
4、=head;head=t;return(head);main()INKLIST head=NULL;intnum;printf(n建立单链表n);head=creatlink_nohead_head(head);fflush(stdin);num=count_nohead(head);printf(单链表元素个数n,num);【习题 2】建立单链表 (2)题目要求 :将用户输入的数据按头插入法建立一个带头结点的单链表。输入数据方式同上题。【解答】#includedatastru.h#include#include名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - -
5、- - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 25 页 - - - - - - - - - 第3章链式存储结构l23intcount_head(LINKLIST head)/带头结点的单链表:输出单链表元素值并计数/inti=0;LINKLIST p;p=head-next;printf(输出单链表元素值 : );while(p!=NULL)printf(%c ,p-data);i+;p=p-next;printf(n);returni;LINKLIST creatlink_head_head(LINKLIST head)/用头插入法建立带头结点的单
6、链表/LINKLIST t;charch;t=(LINKLIST )malloc(sizeof(LINKLIST);head=t;t-next=NULL;printf(单链表元素值为单个字符,连续输入 ,为结束字符 : );while(ch=getchar()!=)t=(LINKLIST)malloc(sizeof(LINKLIST);t-data=ch;t-next=head-next;head-next=t;return(head);main()INKLIST head=NULL;intnum;printf(n建立单链表n);head=creatlink_head_head(head);f
7、flush(stdin);num=count_head(head);printf(单链表元素个数n,num);【习题 3】建立单链表 (3)题目要求 :将用户输入的数据按尾插入法建立一个不带头结点的单链表。输入数据名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 25 页 - - - - - - - - - l24数据结构习题解析与实训方式同上题。【解答】#includedatastru.h#include#includeintcount_nohead(LINKLIST h
8、ead)/不带头结点的单链表:输出单链表元素值并计数/inti=0;LINKLIST p;p=head;printf(输出单链表元素值 : );while(p!=NULL)i+;printf(%c ,p-data);p=p-next;printf(n);returni;LINKLIST creatlink_nohead_rail(LINKLIST head)/用尾插入法建立不带头结点的单链表/LINKLIST last,t;charch;last=head;printf(单链表元素值为单个字符,连续输入 ,以为结束字符 : );while(ch=getchar()!=)=(LINKLIST)m
9、alloc(sizeof(LINKLIST);t-data=ch;t-next=NULL;if(head=NULL)head=t;last=t;elselast-next=t;last=t;return(head);main()LINKLIST head=NULL;intnum;printf(n建立单链表n);名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 25 页 - - - - - - - - - 第3章链式存储结构l25head=creatlink_nohead_r
10、ail(head);fflush(stdin);num=count_nohead(head);printf(单链表元素个数n,num);【习题 4】建立单链表 (4)题目要求 :将用户输入的数据按尾插入法建立一个带头结点的单链表。输入数据方式同上题。【解答】#includedatastru.h#include#includeintcount_head(LINKLIST head)/带头结点的单链表:输出单链表元素值并计数/inti=0;LINKLIST p;p=head-next;printf(输出单链表元素值 : );while(p!=NULL)i+;printf(%c ,p-data);p
11、=p-next;printf(n );returni;LINKLIST creatlink_head_rail(LINKLIST head)/用尾插入法建立带头结点的单链表/LINKLIST last,t;charch;t=(LINKLIST )malloc(sizeof(LINKLIST);head=t;last=t;t-next=NULL;printf(单链表元素值为单个字符,连续输入 ,以为结束字符 : );while(ch=getchar()!=)=(LINKLIST)malloc(sizeof(LINKLIST);t-data=ch;t-next=NULL;last-next=t;l
12、ast=t;return(head);名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 25 页 - - - - - - - - - l26数据结构习题解析与实训main()LINKLIST head=NULL;intnum;printf(n建立单链表n);head=creatlink_head_rail(head);fflush(stdin);num=count_head(head);printf(单链表元素个数为n,num);【习题 5】逆置单链表题目要求 :按头插入法
13、建立一个不带头结点的单链表,用最少的辅助空间实现单链表元素的逆置。【解答】#includedatastru.h#include#includeLINKLIST invertlink(LINKLISThead)/单链表元素逆置/LINKLIST p,q,r;q=NULL;p=head;while(p!=NULL)r=q;q=p;p=p-next;q-next=r;returnq;intcount_nohead(LINKLIST head)/不带头结点的单链表:输出单链表元素值并计数/inti=0;LINKLIST p;p=head;printf(输出单链表元素值 : );while(p!=NUL
14、L)printf(%c ,p-data);i+;p=p-next;printf(n);returni;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 25 页 - - - - - - - - - 第3章链式存储结构l27LINKLIST creatlink_nohead_head(LINKLIST head)/用头插入法建立不带头结点的单链表/LINKLIST t;charch;printf(单链表元素值为单个字符,连续输入 ,以为结束字符 : );while(ch=ge
15、tchar()!=)=(LINKLIST)malloc(sizeof(LINKLIST);t-data=ch;t-next=head;head=t;return(head);main()LINKLIST head=NULL;intnum;printf(n建立单链表n);head=creatlink_nohead_head(head);fflush(stdin);num=count_nohead(head);printf(单链表元素个数为n,num);printf(n逆置单链表n);head=invertlink(head);num=count_nohead(head);【习题 6】有序链表插入
16、元素题目要求 :建立一个带头结点的单链表,表中元素从小到大有序排列。输入一个元素并将其插入到单链表中正确的位置上。【解答】#includedatastru.h#include#includeinser_order(DATATYPE2x,LINKLISThead)/将给定值 x插入有序表中 ,并保持有序 /LINKLIST pr,pn,pp;pr=head;pn=head-next;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 25 页 - - - - - - - - -
17、 l28数据结构习题解析与实训while(pn!=NULL&pn-datanext;pp=(LINKLIST )malloc(sizeof(LINKLIST);pp-data=x;pp-next=pr-next;pr-next=pp;intcount_head(LINKLIST head)/带头结点的单链表:输出单链表元素值并计数/inti=0;LINKLIST p;p=head-next;printf(输出单链表元素值 : );while(p!=NULL)printf(%c ,p-data);i+;p=p-next;printf(n);returni;LINKLIST creatlink_o
18、rder_head(LINKLIST head)/建立带头结点的有序单链表/INKLIST t,p,q;charch;t=(LINKLIST )malloc(sizeof(LINKLIST);head=t;t-next=NULL;printf(单链表元素值为单个字符,连续输入 ,以为结束字符 : );while(ch=getchar()!=)=(LINKLIST)malloc(sizeof(LINKLIST);t-data=ch;q=head;p=head-next;while(p!=NULL&p-datanext;q-next=t;t-next=p;return(head);main()IN
19、KLIST head=NULL;intnum;charch;printf(n建立单链表n);head=creatlink_order_head(head);名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 25 页 - - - - - - - - - 第3章链式存储结构l29fflush(stdin);num=count_head(head);printf(单链表元素个数n,num);printf(n输入插入元素值 : );ch=getchar();inser_order(
20、ch,head);printf(n元素插入后n);num=count_head(head);printf(插入后单链表元素个数n,num);【习题 7】有序链表删除重复元素题目要求 :建立一个带头结点的单链表,表中元素递增有序。删除表中值相同的多余元素 (即重复元素只保留一个 )。【解答】#includedatastru.h#include#includevoiddelete(LINKLIST a)/在有序链表中删除重复元素,保留一个 /LINKLIST la;la=a-next;while(la!=NULL&la-next!=NULL)if(la-data=la-next-data)la-n
21、ext=la-next-next;elsela=la-next;intcount_head(LINKLIST head)/带头结点的单链表:输出单链表元素值并计数/inti=0;LINKLIST p;p=head-next;printf(输出单链表元素值 : );while(p!=NULL)i+;printf(%c ,p-data);p=p-next;printf( n);returni;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 25 页 - - - - - - -
22、 - - l30数据结构习题解析与实训LINKLIST creatlink_order_head(LINKLIST head)/建立带头结点的有序单链表/INKLIST t,p,q;charch;t=(LINKLIST )malloc(sizeof(LINKLIST);head=t;t-next=NULL;printf(单链表元素值为单个字符,连续输入 ,以为结束字符 : );while(ch=getchar()!=)=(LINKLIST)malloc(sizeof(LINKLIST);t-data=ch;q=head;p=head-next;while(p!=NULL&p-datanext;
23、q-next=t;t-next=p;return(head);main()LINKLIST head=NULL;intnum;printf(n建立单链表n);head=creatlink_order_head(head);fflush(stdin);num=count_head(head);printf(n删除重复元素后n);delete(head);num=count_head(head);【习题 8】无序链表删除重复元素题目要求 :建立一个带头结点的单链表,元素按输入的次序排列。删除表中值相同的多余元素 (即重复元素只保留一个 )。希望读者能清楚理解在有序链表上删除重复元素的算法和在无序链
24、表上删除重复元素的算法的思路不同。【解答】#includedatastru.h#include#includevoiddelete(LINKLIST a)/在无序单链表中删除重复元素,只保留一个 /名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 25 页 - - - - - - - - - 第3章链式存储结构l31LINKLIST la,p,q;la=a-next;while(la!=NULL)q=la;p=la-next;while(p!=NULL)f(p-data=
25、la-data)p=p-next;q-next=p;elseq=p;p=p-next;la=la-next;intcount_head(LINKLIST head)/输出带头结点的单链表元素值并计数/inti=0;LINKLIST p;p=head-next;printf(输出单链表元素值 : );while(p!=NULL)i+;printf(%c ,p-data);p=p-next;printf(n);returni;LINKLIST creatlink_head_rail(LINKLIST head)/用尾插入法建立带头结点的单链表/LINKLIST last,t;charch;t=(L
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年数据结构习题解析与实训整理 2022 数据结构 习题 解析 整理
限制150内