6.线性表可用顺序表和单链表作为存储结构。试问.docVIP

6.线性表可用顺序表和单链表作为存储结构。试问.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
6.线性表可用顺序表和单链表作为存储结构。试问: 两种存储表示各有哪些主要优缺点? 如果有n个表同时并存,且处理过程中个表的长度会动态发生变化,表的总数也可能自动变化,在此情况下应选用哪种存储表示?为什么? 若表的总数基本稳定,且很少进行插入和删除,但要求以最快速度存取表中元素,这时应采用哪种存储表示?为什么? 答:(1)顺序表的优点:以数据元素在计算机内的物理位置相邻来表示它在表中的逻辑相邻关系,可随机存储任一元素,元素的存储位置可用公式表示。 缺点:插入和删除的运算量大,效率较低,必须先分配存储空间,造成空间利用率低。 链表的优点:单链表中每个元素的存储空间是在需要时才申请,其逻辑关系靠指针来表示,空间效率高,当数据元素占的内存较大时,插入和删除的效率高。 缺点:它不能随机存取数据元素。 (2)应选用单链表,因为顺序表必须预先分配存储空间,而此表的总数和长度都会变化,不易确定存储空间的大小。 (3)应选用顺序表,因为表的总数基本稳定,且删除和插入操作少,顺序表可随机存储。 7.设ha和hb分别是两个带表头结点的升序单链表的表头指针。试设计一个算法将这两个链表合并成为一个降序单链表。要求结果链表仍使用原来两个链表的结点空间而不另开辟其他存储空间,表中允许出现重复数据。 答:算法思路:先将两个单链表用二路归并按升序合并,再将合并后的单链表逆置。 参考源程序: Void InverseMerge(Chain A, Chain B) { //结果放在A中 ChainNoae *pa, *pb, *p, *q; pa=A.fist-next; pb=B.fist-next; A.first-next=0; B.first-next=0; while(pa != 0 pb != 0) { if( pa-data = pb-data) { q = pa; pa = pa-next; } else { q = pb; pb = pb-next; } q-next = A.first-next; A.first-next = q; } if(pa != 0) p = pa; else p = pb; while(p != 0) { q = p; p = p-next; q-next = A.first-next; A.first-next = q; } } 8.设有一个线性表,试分别在顺序表和单链表两种存储表示方式下,各设计一个将线性表逆置的算法,要求不重新开辟存储空间。所谓逆置是指将线性表中的元素次序颠倒过来,即成为。 解:(1)线性表:只要交换和的值。参考程序: void Reverse(SqList L) { int i=1, j=L.Length(); ElemType a; While(ij){a=L.elem[i]; L.elem[i]=L.elem[j]; L.elem[j]=a; i++; j--;} } (2) 单链表: 将第一个元素的指针指向0,逐个将指向,最后将指向,参考程序: void Reverse(ChainT L)//带头结点的线性单链表逆置 { while(! (L.first-link)-link) return; ChainNodeT *p, *q, *r; p = L.first-link; q = p-link; p-link = 0; while( q-link){r = q-link; q-link = p; p = q; q = r; } q-link = p; L.first-link = q; } 9. 设有一个栈,元素的进栈次序依次为A, B, C, D, E. 试问能否得到下面的出栈序列?若能请写出操作序列,若不能请说明原因。 (1) C, E, A, B, D (2) C, B, A, D, E (3) D, C, A, B, E (4) A, C, B, E, D (5) A, B, C, D, E (6) E, A, B, C, D 答:(1), (3), (6) 不能。 (1):E 出栈后,其余三个的次序只能是:D, B, A (3): D 出栈后,A, B, C 的次序只能是:C, B, A (6): E 出栈后,A, B, C, D 的次序只能是:D, C, B, A (2): 入栈A, B, C, 出栈C, B, A, 入栈D, 出栈D, 入栈E, 出栈E, (4): 入栈A, 出栈A, 入栈B, C, 出栈C, B, 入栈D, E, 出栈E,

文档评论(0)

***** + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档