数据结构Java版第二章习题.doc

数据结构Java版第二章习题

(按照自己的情况选作部分习题,不要抄袭) 第二章 习题 顺序存储线性表 一 判断题 1.线性表的逻辑顺序与存储顺序总是一致的。× 2.顺序存储的线性表可以按序号随机存取。√ 3.顺序表的插入和删除操作不需要付出很大的时间代价,因为每次操作平均只有近一半的元素需要移动。× 4.线性表中的元素可以是各种各样的,但同一线性表中的数据元素具有相同的特性,因此是属于同一数据对象。√ 5.在线性表的顺序存储结构中,逻辑上相邻的两个元素在物理位置上并不一定紧邻。× 6.在线性表的顺序存储结构中,插入和删除时,移动元素的个数与该元素的位置有关。√ 二 单选题 (请从下列A,B,C,D选项中选择一项) 1.线性表是( A ) 。 (A) 一个有限序列,可以为空; (B) 一个有限序列,不能为空; (C) 一个无限序列,可以为空; (D) 一个无序序列,不能为空。 2.对顺序存储的线性表,设其长度为n,在任何位置上插入或删除操作都是等概率的。插入一个元素时平均要移动表中的( A )个元素。 (A) n/2 (B) n+1/2 (C) n -1/2 (D) n 三 填空题 1.在顺序表中做插入操作时首先检查___表是否满了______________。 四 算法设计题 设线性表存放在向量A[arrsize]的前elenum个分量中,且递增有序。试写一算法,将x 插入到线性表的适当位置上,以保持线性表的有序性。并且分析算法的时间复杂度。 已知一顺序表A,其元素值非递减有序排列,编写一个函数删除顺序表中多余的值相同的元素。 编写一个函数,从一给定的顺序表A中删除值在x~y(x=y)之间的所有元素,要求以较高的效率来实现。 提示:可以先将顺序表中所有值在x~y之间的元素置成一个特殊的值,并不立即删除它们,然后从最后向前依次扫描,发现具有特殊值的元素后,移动其后面的元素将其删除掉。 线性表中有n个元素,每个元素是一个字符,现存于向量R[n]中,试写一算法,使R中的字符按字母字符、数字字符和其它字符的顺序排列。要求利用原来的存储空间,元素移动次数最小。(研54) 线性表用顺序存储,设计一个算法,用尽可能少的辅助存储空间将顺序表中前m个元素和后n个元素进行整体互换。即将线性表 (a1, a2, … , am, b1, b2, … , bn) 改变为: (b1, b2, … , bn , a1, a2, … , am)。 五 上机实习题目 约瑟夫环问题 约瑟夫环问题:设编号为1,2,3,……,n的n(n0)个人按顺时针方向围坐一圈,每个人持有一个正整数密码。开始时任选一个正整数做为报数上限m,从第一个人开始顺时针方向自1起顺序报数,报到m是停止报数,报m的人出列,将他的密码作为新的m值,从他的下一个人开始重新从1报数。如此下去,直到所有人全部出列为止。令n最大值取30。要求设计一个程序模拟此过程,求出出列编号序列。 package 算法设计; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class YueSeFu { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.print(请输入总人数:); int totalNum = scan.nextInt(); System.out.print(请输入报数的大小:); int cycleNum = scan.nextInt(); yuesefu(totalNum, cycleNum); scan.close(); } public static void yuesefu(int totalNum, int countNum) { // 初始化人数 ListInteger start = new ArrayListInteger(); for (int i = 1; i = totalNum; i++) { start.add(i); } //从第K个开始计数 int k = 0; while (start.s

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档