- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[理学]数据结构答案
第二章 线性表
四. 应用题
1.(1)应选用链接存储表示。如果采用顺序存储表示,必须在一个连续的可用空间中
为这 n 个表分配空间。初始时因不知道哪个表增长得快,必须平均分配空间。在程序
运行过程中,有的表占用的空间增长得快,有的表占用空间增长得慢;有的表很快就
用完了分配给它的空间,有的表才用了少量的空间,在进行元素的插入时就必须成片
地移动其他的表的空间,以空出位置进行插入;在元素删除时,为填补空白,也可能
移动许多元素。这个处理过程极其繁琐和低效。
如果采用链接存储表示,一个表的存储空间可以连续,可以不连续。表的增长通
过动态存储分配解决,只要存储器未满,就不会有表溢出的问题;表的收缩可以通过
? 动态存储释放实现,释放的空间还可以在以后动态分配给其他的存储申请要求,非常
灵活方便。对于 n 个表(包括表的总数可能变化)共存的情形,处理十分简便和快捷,
插入、删除时间复杂度为 O(1)。所以选用链接存储表示较好。
(2)应采用顺序存储表示。因为顺序存储表示的存取速度快,但修改效率低。若表
的总数基本稳定,且很少进行插入和删除,但要求以最快的速度存取表中的元素,这
时采用顺序存储表示较好,时间复杂度为 O(1)。
2.链式存储结构一般说克服了顺序存储结构的三个弱点。首先,插入、删除操作不
需移动元素,只修改指针;其次,不需要预先分配空间,可根据需要动态申请空间;
其三,表容量只受可用内存空间的限制。其缺点是因为指针增加了空间开销,当空间
不允许时,就不能克服顺序存储的缺点。
3. 顺序结构时 ai 与 ai+1 的物理位置相邻; 链表结构时 ai 与 ai+1 的物理位置不要求相邻。
4.首元结点是指链表中的第一个结点,也就是没有直接前驱的那个结点。
链表的头指针是一指向链表开始结点的指针(没有头结点时),单链表由头指针唯
一确定,因此单链表可以用头指针的名字来命名。
头结点是在链表的开始结点之前附加的一个结点。有了头结点之后,头指针指向
头结点,不论链表否为空,头指针总是非空。而且头指针的设置使得对链表的第一个
位置上的操作与在表其他位置上的操作一致(都是在某一结点之后)。
5.本题分别讨论三种链表的情况。
(1)单链表。若指针 p 指向某结点时,能够根据该指针找到其直接后继,能够顺后
继指针链找到*p 结点后的结点。但是由于不知道其头指针,所以无法访问到 p 指针指
向的结点的直接前驱。因此无法删去该结点。
(2)双向链表。由于这样的链表提供双向指针,根据*p 结点的前驱指针和后继指针
可以查找到其直接前驱和直接后继,从而可以删除该结点。其时间复杂度为 O(1)。
(3)单循环链表。根据已知结点位置,可以直接得到其后相邻的结点位置(直接后
继),又因为是循环链表,所以可以通过查找,得到 p 结点的直接前驱。因此可以删
? 去 p 所指结点。其时间复杂度应为 O(n)。
6.方法 1:由于链表操作一般都是按指针方向依次进行的,此处自然想到按这个次序
对每个结点作指针前置操作。下面则是置逆每个结点指针的操作。
设当前要对 p 指针逆置(p 初值为 L,即指向 a1 结点),为便于描述,此处不妨设 p
指针为 ai 结点(i=1,…,n)。所谓逆置,即将 ai 结点中的后继指针(指向 ai+1)改为指
向 ai-1 结点,因此要注意两个问题。
(1) 置逆后,原来指向 ai+1 结点的指针被破坏,因此下一步不能找到 ai+1 结点并
继续置逆,为此要先保留其地址,不妨用指针 r 保存,因此要先执行 r=p-next。
(2) 逆置:即将 ai-1 结点的地址填入 p 的指针中,为此,事先要有 ai-1 结点的地
址(指针),不妨用 q 保存,显然其初置为 NULL(i 从 1 开始)。
对当前结点置逆后,ai+1 结点的指针已保存在 r 中,因此可将指针 p 改为指向 ai+1
结点,q 改为指向 ai 结点,对各后继结点继续进行上述操作,直到 p 指针为空为止。
方法 2:在表头进行插入,将置逆过程分为遍历单链表和在表头进行插入操作。具
体过程为:(1) 初始化 p=L,L=NULL;
(2) q=p-next; 将 p 指向的结点插入到 L 的头部,且 p=q;直到 p 为空。
五. 算法设计题
1.分析:依次遍历单链表 A 上的各个元素 x,看它是否在线性表的其余元素中,若发
现有结点满足条件则将其删除。
算法描述参见 2.2.5 算法设计题第 4 题第 2 小题。
2.分析:遍历整个顺序表,用 k 记录下在 x 到 y 之间的元素个数,k 的初始
文档评论(0)