数据结构与算法设计习题.pptxVIP

  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文档。上传文档
查看更多
数据结构与算法设计习题

3、对于给定的n个元素,可以构造出的逻辑结构有 ⑴ 、 ⑵ 、 ⑶ 、 ⑷ 四种。答案:⑴ 集合 ⑵ 线性结构 ⑶ 树结构 ⑷ 图结构 4 设n为正整数。试确定下列各程序段中前置以记号*的语句的执行次数: (1) k=0; for(i=1;i=n;i++) for(j=i;j=n;j++) k++; * (2) i=1;j=0; while(i+j=n) if(ij)j++; * else i++; 第二章 习题(习题二)1.单选题 1) 线性表的顺序存储结构是通过( )表示元素之间的关系 A. 后继元素地址B. 元素的存储顺序 C. 左、右孩子地址D. 后继元素的数组下标 2) 在线性表顺序存储结构下,在第i个元素之前插入新元素一般需要( ) 。 A. 移动元素B. 修改头指针 C. 修改指针D.申请新的结点空间 3) 若长度为n的线性表采用顺序存储结构,在其第i (1≤i≤n+1)个位置之前插入一个新元素的算法的时间复杂度为( ) 。 A. O(n) B. O(1) C. O(n2) D. O(log2n)???4)在线性表的链式存储结构下,插入操作算法______。 A) 需要判断是否表满 B) 需要判断是否表空 C) 不需要判断是否表满 D) 需要判断是否表空和表满5)若某线性表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点,则采用存储结构算法的时间效率最高的是______。 A) 单链表B) 给出表尾指针的单循环链表 C) 双向链表D) 给出表尾指针双向循环链表答案:C答案:D第二章 习题(习题三)2. 填空题(1)在顺序表中插入或删除一个元素,需要平均移动 元素,具体移动的元素个数与 有关。(2)顺序表中逻辑上相邻的元素的物理位置 紧邻。单链表中逻辑上相邻的元素的物理位置 紧邻。 表的一半 插入点的位置 一定或也不一定 (3)在单链表中,除了头结点外,任一结点的存储位置由 指示。(4)在单链表中设置头结点的作用是该结点的直接前趋 在表的第一个元素结点之前插入新元素结点或删除第一个元素结点不需修改头指针3. 在什么情况下用顺序表比链性表好? 解答: 当我们经常要从线性表中存取指定位置的元素时或当很少作插入、删除操作时,用顺序表比链性表好。 算法题2. 指出下面算法的错误和低效之处,并将其改写成一个既正确又高效的算法。Status DeleteK(SqList a ,int i, int k){// 设线性表元素从a.base[1]起存储,从第i个元素起删除k个元素。 if( i1|| k 0 ||(i+k) a.length) return ERROR; for( count=1; countk; count++) { for(j=a.length; j=i+1;j--) a.elem[j-1]= a.elem[j]; a.length -- ; }//for return OK;}//DeleteK01i-2i-1in-1 99 a1 a2ai-1 aiai+1 an解答 错误:移动元素的顺序有误; 低效:每次循环只删除了一个元素正确且高效的算法如下:Status DeleteK(SqList a ,int i, int k){//设线性表元素从a.base[1]起存储,从第i个元素起删除k个元素。 if ( i1|| k 0 || (i+k)a.length) return ERROR; for ( j=i+k;j=a.length; ++j) a.elem[j-k]= a.elem[j]; a.length - =k ; return OK;}//DeleteK3. 编写一算法,实现单链表的原地置逆。即利用原来的结点将线性表L =(a1, a2, …… , an) 变换为:L =( an, …… , a2, a1)succsuccpsuccppLpLa1a2a3?a3a2?a11)标志后继结点(*succ);2)修改指针(将*p插入在头结点之后);3)重置结点*p(p重新指向原表中后继);void inverse( LinkList L ){// 逆置带头结点的单链表 L p = L-next; L-next = NULL; while ( p != NULL ) { succ = p-next;// succ指向 *p 的后继 p-next = L-next; L-next =

文档评论(0)

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

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

1亿VIP精品文档

相关文档