网站大量收购独家精品文档,联系QQ:2885784924

第二章弥补.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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. ) . █

文档评论(0)

f8r9t5c + 关注
实名认证
内容提供者

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

版权声明书
用户编号:8000054077000003

1亿VIP精品文档

相关文档