数据结构的第4-7习题的答案.ppt
《数据结构的第4-7习题的答案.ppt》由会员分享,可在线阅读,更多相关《数据结构的第4-7习题的答案.ppt(37页珍藏版)》请在三一办公上搜索。
1、线性结构,操作受限的线性表:栈、队列 线性结构线性表 数据元素受限的线性表:串,线性表回顾,第四章线性表知识要点:1、线性表类型的定义:(a1,a2,an)2、线性表的存储形式:顺序存储和链式存储方式,以及各自的优缺点 顺序存储:连续存储单元存储,分静态和动态2种 链式存储:单链表、静态链表、双链表、循环链表3、线性表的应用:一元多项式相加,第四章 习题,4.2请给出下述要求的判断条件:(1)以head为头指针、不带头结点的单链表为空的条件是什么?不为空的条件是什么?为空:head=NULL;不为空:head!=NULL;(2)以head为头指针、带头结点的单链表为空的条件是什么?不为空的条件
2、是什么?为空:head-next=NULL;不为空:head-next!=NULL;(3)以head为头指针、不带头结点的单链环为空的条件是什么?不为空的条件是什么?为空:head=NULL;不为空:head!=NULL;(4)以head为头指针、带头结点的单链环为空的条件是什么?不为空的条件是什么?为空:head-next=head;不为空:head-next!=head;,4.2请给出下述要求的判断条件:(5)以head为头指针、不带头结点的单链表仅含有两个结点的条件是什么?head-next-next=NULL;(6)以head为头指针、带头结点的单链表仅含有两个结点的条件是什么?hea
3、d-next-next-next=NULL;(7)以head为头指针、不带头结点的单链环仅含有两个结点的条件是什么?head-next-next=head;(8)以head为头指针、带头结点的单链环仅含有两个结点的条件是什么?head-next-next-next=head;,4.3在长度为n的顺序表上进行插入运算,有几个可插入的位置?在第i(假设合法)个位置上插入一个数据元素,需要向什么方向平移多少个数据元素?在长度为n的顺序表上进行删除运算,有几个可删除的数据元素?删除第i(假设合法)个位置上的数据元素,需要向什么方向平移多少个数据元素?长度为n,有n+1个插入位置第i个位置上插入,需向右
4、移动n-i+1个数据元素长度为n,有n个删除位置第i个位置上删除,需向左移动n-i个数据元素,4.4根据图示回答下面的问题:(1)如何访问p结点的数据域?P-data(2)如何访问p结点的直接前驱结点的数据域?P-prior-data(3)如何访问p结点的直接后继结点的数据域?P-next-data4.5对于以head为头指针的不带头结点的双链环而言,如何判断p指针所指结点是否为尾元结点?如何判断p指针所指结点是否为首元结点?对于以head为头指针的带头结点的双链环而言情况又如何?不带头结点 判断尾元 p-next?=head 判断首元 p?=head带头结点 判断尾元 p-next?=hea
5、d 判断首元 p?=head-next,4.6若线性表中的数据元素以值递增有序排列(数据元素的类型为整数类型),且用带头结点的单链表存储。试写出一个高效算法删除表中所有值大于min且小于max的数据元素(表中有这样的数据元素时),并说明该算法的时间复杂度。(说明:min和max是给定的两个参变量,可以设定为任意的整数值。)Void Delete(LinkList head)LinkList p,q;p=head;while(p-next!=NULL)if(p-next-datanext-datamin)q=p-next;p-next=q-next;free(q);else p=p-next;,
6、4.8 若有一个以head为头指针的带头结点的单链表,结点数据域值属于整数类型。现将其数据域值除以3,得余数0,1,2。试按这3种不同的情况,把原有的链表分解成3个不同的单链表,且只增设两个头结点空间,不允许另辟空间。写出一个算法实现上述要求,并且要求头结点的数据域记录该链表中的数据结点数目。,void decomposition(LinkList ah,LinkList,4.9 设有一个不带头结点的单链表,其结点的值均为整数,并按绝对值从小到大链接。试将该单链表改造为结点按绝对值从大到小进行链接。不允许另辟空间,写出一个算法实现上述要求。,head,p,q,r,q,p=NULL,r,r=NU
7、LL,q,p,Void invert(LinkList,4.10 线性表有两种存储结构,即顺序表和单链表。试问:(1)若有N个线性表同时并存,且在处理过程中各表长度会动态发生变化,线性表的总数也会自动地改变,在此情况下应选用哪种存储结构?为什么?应采用链式存储结构,因为采用链式存储时插入删除操作不需要移动数据元素(2)若线性表的总数基本稳定,且很少进行插入和删除操作,但要以最快的速度存取表中元素,那么应采用哪种存储结构?为什么?应采用顺序存储结构,因为采用顺序存储时可以随机存取,提高存取表中元素的速度。,栈回顾,第五章栈知识要点:1、栈类型的定义:(a1,a2,an),只在栈顶进行插删操作,先
8、进后出。2、栈的存储形式:顺序存储:链式存储:3、栈的应用:表达式求值,5.2 设计一个算法,判断某输入字符串是否具有中心对称关系,例如ababbaba,baxzxab皆具有中心对称性(具有中心对称性的字符串称为回文)。思路:采用顺序栈解决。void judge()SqStack S;InitStack(,5.5 已知函数F(n)=n+1 当n=0时 n*F(n/2)当n0时 式中,n为正整数。写出它的递归算法。Int f(int n)if(n=0)return 1;return n*f(int(n/2);,5.8 写出下列程序的输出结果。(说明:该程序中用到的栈S是数据元素为char类型的栈
9、。)Void main()stack S;char x,y;InitStack(S);x=c;y=y;push(S,x);push(S,n);push(S,y);pop(S,x);push(S,a);push(S,x);pop(S,x);push(S,n);,While(!StackEmpty(S)pop(S,y);printf(“%c”,y);printf(“%c”,x);,结果:nancy,5.9 已知一个栈S的输入序列为abcd,下面两个序列是否能通过栈的push和pop操作输出?如果能,请写出操作序列;如果不能,请说明原因。(x表示入栈,s表示出栈)(1)dbca;(2)cbda。(1
10、)不能(2)xxxssxss,5.10 写一个算法将给定十进制数转换为二进制数。void conversion()initstack(s);/初始化一个空栈 cinn;/输入要转换的十进制整数n while(n)/当n不为0时执行 push(s,n%2);n=n/2;/余数进栈 while(!stackempty(s)/当栈不为空时进行 pop(s,e);coute;,5.11写一算法识别依次读入的一个以#为结束符的字符序列是否是形如“序列1序列2”的字符序列。其中,序列1和序列2中都不含有字符,且序列2是序列1的逆序列。例如“aab*cdaadc*baa”是满足条件的字符序列。,int Is
11、Reverse()/判断输入的字符串中前和后部分是否为逆串,是则返回1,否则返回0InitStack(s);char e;cine;while(e!=and e!=#)push(s,e);cine;if(e=#)return 0;cine;while(e!=#)if(StackEmpty(s)return 0;pop(s,c);if(e!=c)return 0;cine;if(!StackEmpty(s)return 0;return 1;/IsReverse,队列回顾,第六章队列知识要点:1、队列类型的定义:(a1,a2,an),只在队首进行删除操作,在队尾进行插入操作,先进先出。2、队列的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 习题 答案
链接地址:https://www.31ppt.com/p-5986050.html