李春葆《数据结构教程》(第4版)课后习题-线性表(圣才出品)

李春葆《数据结构教程》(第4版)课后习题-线性表(圣才出品)
李春葆《数据结构教程》(第4版)课后习题-线性表(圣才出品)

第2章线性表

1.叙述线性表两种存储结构各自的主要特点。

答:线性表的两种存储结构分别是顺序存储结构和链式存储结构。顺序存储结构的主要特点如下:

(1)节点中只有自身的数据域,没有指针域。因此,顺序存储结构的存储密度大,存储空间利用率高;

(2)可以通过序号直接访问任何数据元素,即可以随机存取;

(3)插入和删除操作会引起大量元素的移动。

链式存储结构的主要特点如下:

(1)节点中除自身的数据域还有表示关联信息的指针域。因此链式存储结构比顺序存储结构的存储密度小,存储空间利用率较低;

(2)在逻辑上相邻的节点在物理上不比相邻,因此不可以随机存取,只能顺序存取;

(3)插入和删除操作方便灵活。不必移动节点,只需修改节点中的指针域即可。

2.设计一个算法,将x插入到一个有序(从小到大排序)的线性表(顺序存储结构)的适当位置上,并保持线性表的有序性。

答:通过比较在顺序表L中找到插入x的位置i,将该位置及后面的元素后移一个位置,将x插入到位置i中,最后将L的长度增1。对应的算法如下:

3.假设一个顺序表L中所有元素为整数,设计一个算法调整该顺序表,使其中所有小于零的元素放在所有大于等于零的元素的前面。

答:i、j分别置初值为0和L.1ength-1,当i

4.设计一个算法,将一个带头节点的数据域依次为a1,a2,…,a n(n≥3)的单链表的所有节点逆置,即第一个节点的数据域变为a n,……,最后一个节点的数据域变为a1。

答:用P指针扫描单链表,将当前节点*P采用头插法插入到新建的单链表中。对应的算法如下:

5.设有一个带头节点的单链表L,节点的结构为(data,next),data为整数元素,next为后继节点的指针。设计一个算法,按递减次序输出该单链表中各节点的数据元素,并释放节点所占的存储空间,并要求算法的空间复杂度为O(1)

答:对应的算法如下:

6.设有一个双链表h,每个节点中除有prior、data和next三个域外,还有一个访问频度域freq,在链表被启用之前,其值均初始化为零。每当进行LocateNode(h,x)运算时,令元素值为x的节点中freq域的值加1,并调整表中节点的次序,使其按访问频度的递减顺序排列,以便使频繁访问的节点总是靠近表头。试写一个符合上述要求的LocateNode运算的算法。

答:在DLinkList类型的定义中添加int freq域,将该域初始化为0。在每次查找到一个节点*p时,将其freq域增l,再与它前面的一个节点*q进行比较,若*p节点的freq域值较大,则两者交换,如此找一个合适的位置。对应的算法如下:

7.设ha=(a1,a2,…,a n)和hb=(b1,b2,…,b n)是两个带头节点的循环单链表,编写将这两个表合并为带头节点的循环单链表hc的算法。

答:先找到ha的最后一个节点*p,将ha的最后一个节点的next指向hb的第一个数据节点,再找到hb的最后一个节点*p,将其构成循环单链表。对应的算法如下:

8.设非空线性表ha和hb都用带头节点的循环双链表表示。设计一个算法Insert(ha,hb,i),其功能是:i=0时,将线性表hb插入到线性表ha的前面;当i>0时,将线性表hb插入到线性表ha中第i个节点的后面;当i大于等于线性表ha的长度时,将线性表hb 插入到线性表ha的后面。

答:利用带头节点的循环双链表的特点设计的算法如下:

相关主题
相关文档
最新文档