- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第二章弥补
习题1. 说明数组和链表的区别,各有何优缺点?
区别:
数组占用连续的内存空间,链表不要求结点的空间连续。
各自的优缺点:
① 插入与删除操作:由于数组在插入与删除数据时需移动大量的数据元素,而链表只需要改变一些指针的链接,因此,链表比数组易于实现数据的插入和删除操作。
② 内存空间的占用情况:因链表多了一个指针域,故较浪费空间,因此,在空间占用方面,数组优于链表。
③ 数据的存取操作:访问链表中的结点必须从表头开始,是顺序的存取方式,而数组元素的访问是通过数组下标来实现的,是随机存取方式,因此,在数据存取方面,数组优于链表。
④ 数据的合并与分离:链表优于数组,因为只需要改变指针的指向。
习题2. 已知长度为n的线性表A采用顺序存储结构,请写一算法,删除该线性表中所有值为item的数据元素。
【解题思路】
思路一:从线性表的第一个数据元素开始到最后那个数据元素,依次判断线性表中的数据元素是否满足删除条件。若某个数据元素满足条件,则从线性表中删除该数据元素,然后修改线性表的长度。
算法一:
算法的ADL描述:
算法 DEL 1( A , n ,item )
i ← 1 .
WHILE (i ≤ n) DO
IF ( A[i] = item ) THEN
(
FOR j = i + 1 TO n DO
A[j-1] ← A[j] .
n ← n –1 .
)
ELSE
i ← i + 1 . █
说明:对于数据元素A[i],如果满足条件,将其从线性表中删除。由于从第i+1个位置移到第i个位置的元素也可能满足条件,因此,此时的i值不能增加1,还需要原地等待以判断从后面移来的那个元素是否也满足删除条件(如果也满足删除条件,接着删除该元素),只有当A[i]不满足删除条件时,i才向后移一个位置。
思路二:容易看出,算法一的时间复杂性为O(n2) 。下面我们对算法一进行改进,使时间复杂性为O(n)。思路如下:当判断某个数据元素A[i]并得知其满足删除条件时,先不马上对其作删除操作,只记录这样的数据元素的个数m,只是在当某个数据元素不是要删除的数据元素时,这时将该数据元素移到线性表的第i-m个位置。
算法一的思路虽然简单、朴实,可读性好,但时间复杂度较高。而算法二虽然在理解上较算法一稍微复杂一点,但算法的时间效率大大提高了。
算法二:
算法的ADL描述:
算法 DEL 2( A , n ,item )
m ← 0 .
FOR i = 1 TO n DO
IF ( A[i] = item ) THEN
m ← m +1 .
ELSE
A[i-m] ← A[i] .
n ← n - m . █
习题3. 已知非空线性链表第一个结点由list指出,请写一算法,交换p所指结点与其下一个结点在链表中的位置(设p指向的不是链表最后的那个结点)。
【解题思路】整个算法应分成两个部分:(1)确定p的位置,同时给出p的前驱*p ;(2)将结点*p与p的后继结点交换。
算法的ADL描述:
算法 CHANGE(list, p)
q ← list .
WHILE (next (q) ≠ p) DO
q ← next (q) .
IF (next (p) ≠ NULL)
(
r ← next (p) .
next (q) ← r .
next (p) ← next (r) .
next (r) ← p .
) . █
习题4. 向LinkedList类中增加一个函数Contrary,功能为将其所有结点按相反次序链接。
【解题思路】对这个问题而言,可以有多种解决办法。比如下面的两种方法。
第一种方法:由于没有对空间限制,因此可利用堆栈作为中间数据结构来颠倒数据;
第二种方法:将原链表中的头指针和头结点断开,构成一个新的空表(即令头指针head指向空),然后将原链表中各结点,从第一个结点起,依次插入这个新表的头部(即表头插入)。
第二种方法的ADL描述:
算法 Contrary(head)
p←head.
head←null.
While p≠null Do
( q←p. p←next(p).
next(q) ←head.
head←q.
) . █
您可能关注的文档
- 盘左盘由校订检核.doc
- 盲板抽堵功课平安治理轨制.doc
- 直板反胶副手拉球的基础道理和练习方法.doc
- 目标形式的课程设计.doc
- 相干方平安治理.doc
- 相对要知道的大码女装服装搭配技能.doc
- 相遇题目演习.doc
- 看不清防治.doc
- 看不清的苦与乐.doc
- 看我铁路英雄,谱写生命真谛.doc
- 金融产品2024年投资策略报告:积极适应市场风格,行为金融+机器学习新发现.pdf
- 交运物流2024年度投资策略:转型十字路,峰回路又转(2023120317).pdf
- 建材行业2024年投资策略报告:板块持续磨底,重点关注需求侧复苏.pdf
- 宏观2024年投资策略报告:复苏之路.pdf
- 光储氢2024年投资策略报告:复苏在春季,需求的非线性增长曙光初现.pdf
- 公用环保2024年投资策略报告:电改持续推进,火电盈利稳定性有望进一步提升.pdf
- 房地产2024年投资策略报告:聚焦三大工程,静待需求修复.pdf
- 保险2024年投资策略报告:资产负债匹配穿越利率周期.pdf
- 政策研究2024年宏观政策与经济形势展望:共识与分歧.pdf
- 有色金属行业2024年投资策略报告:新旧需求共振&工业原料受限,构筑有色大海星辰.pdf
文档评论(0)