|
|
|
|
移动端

练习(1)

《数据结构与算法分析:Java语言描述(原书第3版)》第3章表、栈和队列,本章讨论最简单和最基本的三种数据结构。实际上, 每一个有意义的程序都将显式地至少使用一种这样的数据结构, 而栈则在程序中总是要被间接地用到, 不管我们在程序中是否做了声明。本节为本章的练习部分。

作者:冯舜玺/陈越 译来源:机械工业出版社|2016-04-13 18:02

技术沙龙 | 邀您于8月25日与国美/AWS/转转三位专家共同探讨小程序电商实战

练习(1)

3.1 给定一个表L和另一个表P, 它们包含以升序排列的整数。操作printLots(L,P)将打印L中那些由P所指定的位置上的元素。例如, 如果P=1,3,4,6,  那么, L中位于第1、 第3、 第4和第6个位置上的元素被打印出来。写出过程printLots(L,P)。只可使用public型的Collections API容器操作。该过程的运行时间是多少?

3.2 通过只调整链(而不是数据)来交换两个相邻的元素, 使用

a. 单链表。

b. 双链表。

3.3 实现MyLinkedList的contains例程。

3.4 给定两个已排序的表L1和L2, 只使用基本的表操作编写计算L1∩L2的过程。

3.5 给定两个已排序的表L1和L2, 只使用基本的表操作编写计算L1∪L2的过程。

3.6 Josephus问题(Josephus problem)是下面的游戏: N个人编号从1到N, 围坐成一个圆圈。从1号开始传递一个热土豆。经过M次传递后拿着热土豆的人被清除离座, 围坐的圆圈缩紧, 由坐在被清除的人后面的人拿起热土豆继续进行游戏。最后剩下的人取胜。因此, 如果M=0和N=5, 则游戏人依序被清除, 5号游戏人获胜。如果M=1和N=5, 96那么被清除的人的顺序是2,4,1,5。

a. 编写一个程序解决M和N在一般值下的Josephus问题, 应使程序尽可能地高效率, 要确保能够清除各个单元。

b. 你的程序的运行时间是多少?

3.7 下列程序的运行时间是多少?

3.8 下列例程删除作为参数被传递的表的前半部分:

a. 为什么在进入for循环前存储theSize?

b. 如果lst是一个ArrayList, removeFirstHalf的运行时间是多少?

c. 如果lst是一个LinkedList, removeFirstHalf的运行时间是多少?

d. 对于这两种类型的List使用迭代器都能使removeFirstHalf更快吗?

3.9 提供对MyArrayList类的addAll方法的实现。方法addAll将由items给定的特定集合的所有项添加到MyArrayList的末端。再提供上述实现的运行时间。你使用的方法声明与Java Collections API中的略有不同, 其形式如下:

3.10 提供对MyLinkedList类的removeAll方法的实现。方法removeAll将由items给定的特定集合的所有项从MyLinkedList中删除。再提供上述实现的运行时间。你使用的方法声明与Java Collections API中的略有不同, 其形式如下:

3.11 假设单链表使用一个头节点实现, 但无尾节点, 并假设它只保留对该头节点的引用。编写一个类, 包含

a.返回链表大小的方法。

b.打印链表的方法。

c.测试值x是否含于链表的方法。

d.如果值x尚未含于链表, 添加值x到该链表的方法。

e.如果值x含于链表, 将x从该链表中删除的方法。

3.12 保持单链表以排序的顺序重复练习3.11。

3.13 添加ListIterator对MyArrayList类的支持。java.util中的ListIterator接口比3.3.5节所述含有更多的方法。注意, 你要编写一个listIterator方法返回新构造的ListIterator, 并且还要注意现存的迭代器方法可以返回一个新构造的ListIterator。这样, 你将改变ArrayListIterator, 使得它实现ListIterator而不是Iterator。对于3.3.5节中未列出的那些方法抛出UnsupportedOperationException异常。

3.14 如练习3.13所述, 添加ListIterator对MyLinkedList类的支持。

3.15 将splice操作添加到LinkedList类中。该方法的声明

将所有的项从lst中删除(使lst为空), 把它们放到MyLinkedList this中的itr之前, 而lst和this必须是不同的表。你的程序必须以常数时间运行。

喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:342347198

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

精通EJB 3.0

本书是关于EJB 3.0的专业技术教程,专注于EJB的概念、方法、开发过程的介绍。同时,本书还研究许多高端的EJB知识,使得开发者能够真正理解...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊