数据结构(Java版)习题解答

合集下载

数据结构JAVA语言描述习题答案(刘小晶等主编).pdf总复习

数据结构JAVA语言描述习题答案(刘小晶等主编).pdf总复习
设定哈希函数 H(key) = key MOD 11 ( 表长=11 ) 若采用二次探测再散列处理冲突
0 1 2 3 4 5 6 7 8 9 10
55 01 23 14 36 82 68
19
11
3
1 1 2 1 2 1 4 1 ASL(成功)= (1*5+2*1+3+4)/9=14/9
3 V4 4 V5 5 V6
1 5 5 4
4
广度优先搜索法遍历序列: V1,V2,V3,V4,V5,V6
2
3
例题: 设有如下的两个网络, 分别用普里姆(Prim)算法 和克鲁斯卡尔(Kruskal)算法具体构造相应的最小生 成树。 写出过程。 a 5 6 1
b
5 6
c
6
5 4
d
3
2
[例1]假设按低下标优先存储整数数组 A9×3×5×8时, 第一个元素的字节地址是100,每个整数占 四个字节,问元素a3125的地址是什么? LOC(a3125)= ? 100+(3×3×5×8+1×5×8+2×8+5)×4 =1784
[ 例 2] 设有数组 A[1..8,1..10] ,数组的每个元素占 3 字节,数组从内存首地址 BA开始以列序为主序顺 序存放,求数组元素 a[5,8]的存储首地址.
8 9 10
55 01 23 14 68 11 82 36 19
1 1 2 1 3 6 2 5 1 查找次数 ASL(成功)=(4*1+2*2+3+5+6)/9=22/9
ASL(不成功)=(10+9+…+1+1)/11=56/11
例如: 关键字集合 { 19, 01, 23, 14, 55, 68, 11, 82, 36 }

《数据结构Java版》习题解答.

《数据结构Java版》习题解答.

结合理科与文科的大学专业毕业生就业情况调查近年来,随着社会的发展和经济的变化,大学毕业生就业形势备受关注。

而在专业选择方面,理科和文科一直是备受学生们关注的两个大门。

本文将通过对结合理科与文科的大学专业毕业生就业情况的调查,探讨这两个领域的就业现状以及未来发展趋势。

一、调查方法和对象我们通过面对面的问卷调查的方式,选取了1000名2019年和2020年毕业的理科和文科专业的大学生作为调查对象。

调查内容主要包括就业率、就业行业、起薪水平以及职业发展前景等方面。

二、就业率比较在调查中,我们发现理科和文科专业的就业率存在一定的差异。

通过数据统计,发现理科专业的平均就业率略高于文科专业,分别为82%和78%。

这与理科专业相对于文科专业在市场需求上的优势有一定关系。

三、就业行业分布在就业行业方面,理科和文科专业的毕业生主要就业领域存在一定的差异。

理科专业毕业生更容易就业于科研机构、高新技术企业、金融机构、医疗保健等领域。

而文科专业毕业生则更多地选择投身于教育、媒体传媒、出版、艺术等行业。

四、起薪水平对比在起薪水平方面,理科专业相对于文科专业常常能够获得更高的起薪。

根据调查结果,我们发现理科专业的毕业生平均起薪在8000元至10000元之间,而文科专业的平均起薪则在6000元至8000元之间。

这主要源于理科专业在市场竞争中的稀缺性和对专业知识的需求程度。

五、职业发展前景尽管理科专业的就业率和起薪水平相对较高,但文科专业的职业发展前景同样值得关注。

在现代社会中,人文素养和综合能力的重要性越来越凸显,文科专业毕业生在各行各业中都能够找到其特长发挥的机会。

此外,随着社会的不断发展,文化创意产业以及教育领域的发展空间也在不断扩大,为文科专业毕业生提供了更多的职业发展机会。

六、未来发展趋势随着科技的快速进步和知识的爆炸式增长,理科与文科专业的边界在逐渐模糊。

未来的工作市场对掌握科技和掌握人文素养的综合型人才的需求将越来越高。

java数据结构期末考试题及答案

java数据结构期末考试题及答案

java数据结构期末考试题及答案一、选择题(每题2分,共20分)1. 在Java中,哪个类提供了栈的实现?A. ArrayListB. LinkedListC. StackD. Vector答案:C2. 下列哪个选项是二叉树的遍历方式?A. 先序遍历B. 中序遍历C. 后序遍历D. 所有以上答案:D3. Java中HashMap的默认初始容量是多少?A. 10B. 16C. 32D. 64答案:B4. 在Java中,哪个接口定义了集合?A. CollectionB. IterableC. ListD. Set答案:A5. 下列哪个不是Java集合框架中的接口?A. ListB. SetC. MapD. Array答案:D6. Java中ArrayList和LinkedList的主要区别是什么?A. ArrayList基于动态数组实现,LinkedList基于链表实现B. ArrayList基于链表实现,LinkedList基于动态数组实现C. ArrayList和LinkedList都是基于链表实现D. ArrayList和LinkedList都是基于动态数组实现答案:A7. 在Java中,哪个类实现了优先队列?A. PriorityQueueB. QueueC. StackD. Deque答案:A8. Java中,哪个方法用于将数组转换为ArrayList?A. Arrays.asList()B. Collections.addAll()C. Arrays.copyOf()D. Collections.copy()答案:A9. 下列哪个不是Java集合框架中的类?A. HashSetB. TreeSetC. LinkedHashMapD. Object答案:D10. 在Java中,哪个类提供了双向队列的实现?A. QueueB. StackC. DequeD. List答案:C二、填空题(每题2分,共20分)1. Java中的______类实现了双端队列接口。

数据结构(Java版)_郑州大学中国大学mooc课后章节答案期末考试题库2023年

数据结构(Java版)_郑州大学中国大学mooc课后章节答案期末考试题库2023年

数据结构(Java版)_郑州大学中国大学mooc课后章节答案期末考试题库2023年1.对不含相同元素的同一输入序列进行两组不同的、合法的入栈和出栈组合操作,所得的输出序列一定相同。

参考答案:错误2.在链队列中,即使不设置尾指针,也能进行入队操作。

参考答案:正确3.循环顺序队列和循环链队列都存在空间一处问题。

参考答案:错误4.直接选择排序的时间复杂度与关键字的初始排列无关。

参考答案:正确5.一个循环链表可以由给定的头指针或尾指针来唯一标识。

参考答案:正确6.所谓随机存取,就是通过首地址和元素的序号可以在O(1)的时间内找到指定的元素。

参考答案:正确7.快速排序在最坏情况下的时间复杂度是O(【图片】)。

参考答案:正确8.哈夫曼树是带权路径长度最短的树,路径上权值较大的结点离根较近()参考答案:正确9.在队列中存取数据元素的原则是()。

参考答案:先进先出10.将整数1、2、3、4依次进栈,则不可能得到的出栈序列是()。

参考答案:142311.完全二叉树的存储结构通常采用顺序存储结构()。

参考答案:正确12.在中序线索二叉树中,每一非空的线索均指向其祖先结点()参考答案:正确13.二叉树中序线索化后,不存在空指针域()参考答案:错误14.二叉树的层次遍历需要栈结构的支持。

参考答案:错误15.下列关于AOE网的叙述中,不正确的是()参考答案:任何一个关键活动提前完成,那么整个工程将会提前完成16.一棵非空的二叉树的先序遍历序列与后序遍历序列正好相反,则该二叉树一定满足()参考答案:只有一个叶子结点17.引入二叉线索树的目的是()参考答案:加快查找结点的前驱或后继的速度18.单源最短路径算法的时间复杂度为()参考答案:O()19.对6个不同的数据元素进行直接插入排序,最多需要进行()次关键字的比较。

参考答案:1520.完全二叉树中,若一个结点没有左孩子,则它必是树叶()。

参考答案:正确21.已知循环队列存储在一维数组A[0【图片】n]中,且队列非空时front和rear分别指向队首元素和队尾元素。

数据结构(java)复习题及答案

数据结构(java)复习题及答案

数据结构(java)复习题及答案⼀、选择题1、数据结构在计算机内存中的表⽰是指____A__A.数据的存储结构 B.数据结构C. 数据的逻辑结构D.数据元素之间的关系2、若⼀个算法的时间复杂度⽤T(n)表⽰,其中n的含义是( A )A.问题规模 B.语句条数C.循环层数 D.函数数量3、下列选项中与数据存储结构⽆关的术语是( D )A.顺序表B.链表C.链队列D.栈4、已知循环队列的存储空间⼤⼩为m,队头指针front指向队头元素,队尾指针rear指向队尾元素的下⼀个位置,则向队列中插⼊新元素时,修改指针的操作是( D )A.rear=(rear-1)%m;B.front=(front+1)%m;C.front=(front-1)%m;D.rear=(rear+1)%m;5、栈和队列的共同点是__C______A.都是先进后出B.都是先进先出C.只允许在端点处插⼊和删除元素D.没有共同点6、已知⼀堆栈的进栈序列为1234,则下列哪个序列为不可能的出栈序列______D__A.1234B.4321C.2143D.41237、具有线性结构的数据结构是( C )A.树 B.图C.栈和队列 D.⼴义表8、假设以数组A[60]存放循环队列的元素,其头指针是front=47,当前队列有50个元素,则队列的尾指针值为( B )A.3 B.37C.50 D.979、若栈采⽤链式存储结构,则下列说法中正确的是( B )A.需要判断栈满且需要判断栈空B.不需要判断栈满但需要判断栈空C.需要判断栈满但不需要判断栈空D.不需要判断栈满也不需要判断栈空10、若⼀棵具有n(n>0)个结点的⼆叉树的先序序列与后序序列正好相反,则该⼆叉树⼀定是( C )A.结点均⽆左孩⼦的⼆叉树B.结点均⽆右孩⼦的⼆叉树C.⾼度为n的⼆叉树D.存在度为2的结点的⼆叉树11、若⼀棵⼆叉树中度为l的结点个数是3,度为2的结点个数是4,则该⼆叉树叶⼦结点的个数是( B )A.4B.5C.7D.812、在n个结点的线索⼆叉树中,线索的数⽬为_C_______A.n-1 B. nC.n+1D.2n13、⼀棵完全⼆叉树有1001个结点,其中有____B_____叶⼦结点A.500B.501C.503D.50515、⼀个有n个顶点的⽆向图最多有___C____条边。

数据结构Java版习题解答

数据结构Java版习题解答
return binarySearch(table, value, low, mid-1);//查找范围缩小到前半段
else
return binarySearch(table, value, mid+1, high);//查找范围缩小到后半段
}
return -1;
}
【习2.5】二叉排序树查找的递归算法。
数据结构Java版习题解答
第1章
【习1.1】实验哥德巴赫猜想。
【习1.2】实验杨辉三角形。
【习1.3】实验金额的中文大写形式。
【习1.4】实验下标和相等的数字方阵。
输出下列方阵(当n=4时)。
1267或13410
3581325911
491214681215
101115167131416
采用二维数组实现。二维数组中,每一条斜线上各元素下标和相等,如图所示。
图1.2下标和相等的数字方阵算法描述
程序如下。
public class Upmat
{
public static void main(String args[])
{
表1.1int n=4;ength; j++)8.2.18.2.1
ength, ;
for (int j=0; j<[i].length; j++)
[j][i]=[i][j];
return trans;
}
第2章
【习2.1】画出3个结点的各种形态的树和二叉树。
3个结点的树有2种形态,3个结点的二叉树有5种形态,如图所示。
图2.23个结点树和二叉树的形态
【习2.1】找出分别满足下面条件的所有二叉树。
1先根遍历序列和中根遍历序列相同:右单支二叉树,如图(a)所示。

数据结构java语言描述课后答案

数据结构java语言描述课后答案

数据结构 java 语言描述课后答案【篇一:数据机构第一章—— java 语言描述第 1 章绪论习题参考答案】概念题1.试述下列各组概念:⑴数据、数据元素、数据项⑵ 数据结构、数据的逻辑结构、数据的存储结构⑶ 数据类型、数据操作⑷ 算法、算法的时间复杂度、算法的空间复杂度参考答案 : 略2 .试述数据结构研究的3 个方面的内容。

参考答案:数据结构研究的 3 个方面分别是数据的逻辑结构、数据的存储结构和数据的运算(操作)。

3.试述集合、线性结构、树型结构和图型结构四种常用数据结构的特性。

参考答案 :集合结构:集合中数据元素之间除了“同属于一个集合”的特性外,数据元素之间无其它关系,它们之间的关系是松散性的。

线性结构:线性结构中数据元素之间存在“一对一”的关系。

即若结构非空,则它有且仅有一个开始结点和终端结点,开始结点没有前趋但有一个后继,终端结点没有后继但有一个前趋,其余结点有且仅有一个前驱和一个后继。

树形结构:树形结构中数据元素之间存在“一对多”的关系。

即若结构非空,则它有一个称为根的结点,此结点无前驱结点,其余结点有且仅有一个前驱,所有结点都可以有多个后继。

图形结构:图形结构中数据元素之间存在“多对多”的关系。

即若结构非空,则在这种数据结构中任何结点都可能有多个前驱和后继。

4 .设有数据的逻辑结构的二元组定义形式为b=(d,r) ,其中d={a1,a2,?,an},r={ai,ai+1| i=1,2,?,n-1},请画出此逻辑结构对应的顺序存储结构和链式存储结构的示意图。

参考答案 :顺序存储结构示意图如下:0 1 2 ?n-2 n-1链式存储结构示意图如下:?5 .设一个数据结构的逻辑结构如图 1.9 所示,请写出它的二元组定义形式。

图 1.9 第 5 题的逻辑结构图参考答案 :它的二元组定义形式为 b= (d ,r ),其中d={k1,k2,k3,k4,k5,k6,k7,k8,k9},r=k1,k3,k1,k8,k2,k3k2,k4,k2,k5,k3,k9,k4,k6,k4,k7,k5,k6,k8,k9,k9,k7 } 。

数据结构JAVA语言描述习题答案(刘小晶等主编)第8章 查找(Java版)

数据结构JAVA语言描述习题答案(刘小晶等主编)第8章 查找(Java版)

给出“空记录”或“空指针”。
6/52
8.1排序的基本概念
8.1 查找的基本概念-查找表
章节目录
数据结构(Java语言描述)
对查找表经常进行的操作:
作业布置
1)建表; 2)查找; 3)读表元; 4)修改(如插入、删除等)。
结束放映
7/52
8.1排序的基本概念
8.1 查找的基本概念-查找表
章节目录
数据结构(Java语言描述)
28
8.2 静态表查找
数据结构(Java语言描述)
8.2.3 分块查找
章节目录
●索引顺序表的查找过程:
1)由索引确定记录所在块(区间); 2)在顺序表的某个块内进行查找。 可见,索引顺序查找的过程也是一个 “缩小区间”的查找过程。(分块查找)
作业布置
结束放映
注意:索引表可以根据查找表的特点来构造。
21
8.2 静态表查找
8.2.2 二分查找
章节目录
数据结构(Java语言描述)
作业布置
要求:查找表是按关键字从小到大排 序好的有序顺序表。 思想:取出表中的中间元素,若其关 键字值为key,则查找成功,算法结束; 否则以中间元素为分界点,将查找表分 成两个子表,并判断所查的key值所在的 子表是前部分,还是后部分,再重复上 述步骤直到找到关键字值为key的元素或 子表长度为0。
1 n n 1 ASLss (n i 1 ) n i 1 2
20
8.2 静态表查找
数据结构(Java语言描述)
8.2.2 二分查找(折半查找)
章节目录
上述顺序查找表的查找算法简单 , 但平均查找长度较大,特别不适用于表 长较大的查找表。
作业布置

java数据结构期末考试题及答案

java数据结构期末考试题及答案

java数据结构期末考试题及答案一、选择题(每题2分,共20分)1. 在Java中,以下哪个类是`java.util`包的一部分?A. ArrayListB. HashMapC. LinkedListD. All of the above答案:D2. 下列哪个方法用于将元素添加到ArrayList的末尾?A. add()B. append()C. push()D. insert()答案:A3. 在Java中,HashMap的键值对映射关系是什么?A. 一对一B. 一对多C. 多对一D. 多对多答案:A4. 下列哪个类是Java集合框架中的接口?A. LinkedListB. HashSetC. ArrayListD. Collection答案:D5. Java中,哪个方法用于删除ArrayList中的指定元素?A. remove()B. delete()C. erase()D. clear()答案:A6. 下列哪个类实现了Queue接口?A. PriorityQueueB. LinkedListC. HashSetD. TreeSet答案:B7. Java中,哪个方法用于判断HashMap是否包含指定的键?A. containsKey()B. containsValue()C. contains()D. hasKey()答案:A8. 下列哪个方法用于获取ArrayList的当前大小?A. size()B. length()C. count()D. lengthOf()答案:A9. 在Java中,哪个类实现了Set接口?A. ArrayListB. LinkedListC. HashSetD. HashMap答案:C10. 下列哪个方法用于将元素插入到ArrayList的指定位置?A. add()B. insert()C. put()D. set()答案:A二、填空题(每题2分,共20分)1. 在Java中,使用________方法可以创建一个ArrayList实例。

数据结构(Java语言描述)李春葆习题答案

数据结构(Java语言描述)李春葆习题答案

数据结构(Java语言描述)李春葆习题答案1. 栈和队列1.1 栈的基本操作栈(Stack)是一种后进先出(Last-In-First-Out,LIFO)的线性数据结构,它具有两个基本操作:压栈(Push)和弹栈(Pop)。

使用Java语言描述栈的基本操作。

我们可以使用数组或链表来实现栈的结构。

在这里,我们使用链表来实现栈。

class Node {int value;Node next;Node(int value) {this.value = value;this.next = null;}}class Stack {Node top;public void push(int value) {Node newNode = new Node(value);if (top == null) {top = newNode;} else {newNode.next = top;top = newNode;}}public int pop() {if (top == null) {throw new EmptyStackException();}int value = top.value;top = top.next;return value;}public boolean isEmpty() {return top == null;}}1.2 队列的基本操作队列(Queue)是一种先进先出(First-In-First-Out,FIFO)的线性数据结构,它具有两个基本操作:入队(Enqueue)和出队(Dequeue)。

使用Java语言描述队列的基本操作。

我们可以使用数组或链表来实现队列的结构。

在这里,我们使用链表来实现队列。

class Node {int value;Node next;Node(int value) {this.value = value;this.next = null;}}class Queue {Node front;Node rear;public void enqueue(int value) {Node newNode = new Node(value);if (rear == null) {front = rear = newNode;} else {rear.next = newNode;rear = newNode;}}public int dequeue() {if (front == null) {throw new EmptyQueueException();}int value = front.value;front = front.next;if (front == null) {rear = null;}return value;}public boolean isEmpty() {return front == null;}}2. 链表2.1 单链表的基本操作单链表(Singly Linked List)是一种常见的链表结构,它由一个头节点和一系列的节点构成,每个节点包含一个数据域和一个指向下一个节点的指针。

数据结构(Java版)-习题解答与实验指导

数据结构(Java版)-习题解答与实验指导

数据结构(Java版)习题解答与实验指导目录第1章绪论 (1)1.1 数据结构的基本概念 (1)1.2 算法 (2)第2章线性表 (3)2.1 线性表抽象数据类型 (3)2.2 线性表的顺序存储和实现 (4)2.2.1 线性表的顺序存储结构 (4)2.2.2 顺序表 (5)2.2.3 排序顺序表 (7)2.3 线性表的链式存储和实现 (9)2.3.1 单链表 (9)【习题2-8】单链表结点类问题讨论。

(9)【习2.1】使用单链表求解Josephus环问题。

(12)【习2.2】集合并运算,单链表深拷贝的应用。

(14)2.3.2 双链表 (16)【习2.3】循环双链表的迭代方法。

(19)【习2.4】循环双链表合并连接。

(19)第3章串 (21)3.1 串抽象数据类型 (21)3.2 串的存储和实现 (22)3.2.1 串的存储结构 (22)3.2.2 常量字符串类 (22)【习3.1】C/C++语言,string.h中的strcpy()和strcat()函数存在下标越界错误。

(22)【思考题3-1】逆转String串,分析算法效率。

(24)【实验题3-1】MyString类,比较串大小,忽略字母大小写。

25【例3.2思考题3-2】MyInteger整数类,返回value的radix进制原码字符串。

(26)【实验题3-9】浮点数类。

(27)3.2.3 变量字符串类 (30)【实验题3-11】删除变量串中的所有空格。

4-样卷 (30)3.3 串的模式匹配 (31)3.3.1 Brute-Force模式匹配算法 (31)3.3.2 模式匹配应用 (32)【思考题3-4,实验题3-13】MyString类,replaceAll(pattern,s)改错。

(32)3.3.3 KMP模式匹配算法 (33)第4章栈和队列 (36)4.1 栈 (36)4.2 队列 (38)4.3 递归 (41)【习4.1】打印数字塔。

java数据结构测试题及答案解析

java数据结构测试题及答案解析

java数据结构测试题及答案解析```markdownJava数据结构测试题及答案解析第一章:数组概述数组是一种线性数据结构,用于存储多个相同数据类型的元素。

本章将介绍数组的基本概念和操作。

1.定义数组在Java中,可以使用以下语法定义一个数组:```java<数据类型>[] <数组名> = new <数据类型>[<数组长度>];```2.访问数组元素可以使用索引值来访问数组中的元素,索引值从0开始。

例如,要访问数组中的第一个元素,可以使用以下语法:```java<数组名>[0];```3.数组的常见操作本节将详细介绍数组的常见操作,包括添加元素、删除元素、查找元素等。

3.1 添加元素可以使用以下语法向数组中添加元素:```java<数组名>[<索引值>] = <新元素>;```3.2 删除元素使用以下语法删除数组中的元素:```java<数组名>[<索引值>] = null;```3.3 查找元素可以使用循环语句遍历数组,并通过判断元素的值来查找指定元素。

第二章:链表概述链表是一种常见的数据结构,用于存储多个元素。

本章将介绍链表的基本概念和操作。

1.定义链表在Java中,可以使用以下代码定义一个链表节点:```javaclass ListNode {int val;ListNode next;ListNode(int x) { val = x; }}```2.链表的插入和删除本节将介绍链表的插入和删除操作,包括在链表头插入、在链表尾插入、在指定位置插入等。

2.1 在链表头插入使用以下代码在链表头部插入一个节点:```javaListNode newNode = new ListNode(val); newNode.next = head;head = newNode;```2.2 在链表尾插入使用以下代码在链表尾部插入一个节点:```javaListNode newNode = new ListNode(val); if (head == null) {head = newNode;} else {ListNode curr = head;while (curr.next != null) {curr = curr.next;}curr.next = newNode;}```2.3 删除节点使用以下代码删除链表中的一个节点:```javaListNode prev = null;ListNode curr = head;while (curr != null) {if (curr.val == val) {if (prev == null) {head = curr.next;} else {prev.next = curr.next; }break;}prev = curr;curr = curr.next;}```3.链表的常见操作本节将介绍链表的常见操作,包括查找节点、链表反转等。

数据结构(Java)复习题及答案 1绪论

数据结构(Java)复习题及答案 1绪论

一、单项选择题( B )1. 计算机算法必须具备输入、输出和 等5个特性。

A) 可行性、可移植性和可扩充性 B) 可行性、确定性和有穷性C) 确定性、有穷性和稳定性 D) 易读性、稳定性和安全性( C )2. 数据结构中,与所使用的计算机无关的是数据的 结构;A) 存储 B) 物理 C) 逻辑 D) 物理和存储( C )3. 算法分析的目的是:A) 找出数据结构的合理性 B) 研究算法中的输入和输出的关系C) 分析算法的效率以求改进 D) 分析算法的易懂性和文档性( A )4. 算法分析的两个主要方面是:A) 空间复杂性和时间复杂性 B) 正确性和简明性C) 可读性和文档性 D) 数据复杂性和程序复杂性( C )5. 计算机算法指的是:A) 计算方法 B) 排序方法 C) 解决问题的有限运算序列 D) 调度方法6.数据结构是研究数据的(A)和(B)以及它们之间的相互关系,并对这种结构定义相应的 (C),设计出相应的(D),从而确保经过这些运算后所得到的新结构是(E)结构类型。

供选择的答案A.B: 1.理想结构 2.抽象结构 3.物理结构 4逻辑结构C.D.E: 1.运算 2.算法 3.结构 4.规则 5.现在的 6.原来的解答:341267.(A)是描述客观事物的数、字符以及所有能输入到计算机中被计算机程序加工处理的符号的结合。

(B)是数据的基本单位,即数据结合中的个体。

有时一个(B)由若干个 (C)组成,在这种情况下,称(B)为记录。

(C)是数据的最小单位。

(D)是具有相同特性的数据元素的集合。

(E)是带有结构特性的数据元素的结合。

被计算机加工的数据元素不是孤立无关的,它们彼此之间一般存在着某种联系,通常将数据元素的这种联系关系称为 (G)。

算法的计算量和问题规模的联系用(H)表示。

供选择的答案:A-F: 1.数据元素 2.符号 3.记录 4.文件 5.数据 6.数据项 7.数据对象 8.关键字 9.数据结构G: 1.规则 2.集合 3.结构 4.运算H: 1.现实性 2.难度 3.复杂性 4.效率解答:5167933二、判断题1, 数据元素是数据的最小单位。

数据结构(java语言版)-王学军主编-课后习题参考答案

数据结构(java语言版)-王学军主编-课后习题参考答案

第一章习题参考答案一、简答题1.【参考答案】:数据结构是计算机类专业的一门专业基础的课程,是学习操作系统、数据库原理等专业课的基础,所涉及的有数学范围的诸多知识;计算机硬件范围的编码理论、存取装置和存取方法等知识;软件范围的文件系统、数据的动态存储管理和信息管理等知识。

所以说数据结构是介于数学、计算机硬件及软件三者之间的一门核心课程。

2.【参考答案】:(1)学生管理系统中的学生信息顺序表、图书查询系统中的图书信息表、电话查询系统中的电话号码表中都表现了前后元素之间的线性关系,课本中【例1.2】也是线性结构。

(2)计算机文件管理系统中目录的层次管理结构、家谱管理等都体现上一层次与下一层次元素之间的层次关系,即树形结构,课本中【例1.3】也是树形结构。

(3)地图中城市之间的关系、同一地区不同城市之间的交通关系等都反映了不同元素之间复杂的网状结构,课本中【例1.4】也是网状结构。

3.【参考答案】:数据元素(Data Element)是构成数据的基本单位。

这些数据可由单个元素构成的,例如{1,4,7,100,……}中每个数字就是一个数据。

另外有些数据是由一组元素构成的。

数据项(Data Item)是数据结构中的最小单位。

当数据元素由多个项构成时,其每个分项称为数据项,例如,{{1,100,’a’},{1,101,’b’,{3,102,’c’ },……}中的每个元素都是有三个数据元素构成的。

4.【参考答案】:不矛盾。

算法的时间复杂度是指在计算机上运行该算法(或程序)所需要的时间。

它与机器的性能、算法语言的选取、编译程序的效率、算法的选择等方面有关系。

算法的空间复杂度是指程序从开始运行到结束运行所需的最大存储空间,其影响因素包括:输入数据所占空间;程序本身所占空间;辅助变量所占空间等。

算法的时间复杂度和空间复杂度是反映算法优劣的两个方面,但是有时候会因为提高时间复杂度而降低空间复杂度,反之同理,但是这些并不说明它们之间是有矛盾的。

java数据结构测试题及答案解析

java数据结构测试题及答案解析

1 下列数据结构中,能用二分法进行查找的是__A____。

A、顺序存储的有序线性表B、线性链表C、二叉链表D、有序线性链表解析:二分法查找只合用于顺序存储的有序表。

在此所说的有序表是指线性表中的元素按值非递减罗列(即从小到大,但允许相邻元素值相等)。

2 在软件设计中,不属于过程设计工具的是__D____。

A、PDL(过程设计语言)B、PAD 图C、N-S 图D、DFD 图解析:软件设计工具包括:程序流程图、 N-S、PAD、HIPO,判定表, PDL(伪码)。

而 DFD(数据流图)属于结构化分析工具。

3 在 switch(expression)语句中, expression 的数据类型不能是__A____。

A、doubleB、charC、byteD、short解析:表达式expression 只能返回这个几种类型的值: int、byte、short 和 char。

多分支语句把表达式返回的值挨次与每一个 case 子句中的值相比较,如果遇到匹配的值,则执行该 case 子句后的语句序列。

4 下列叙述中,错误的是__D____。

A、父类不能替代子类B、子类能够替代父类C、子类继承父类D、父类包含子类5 通过继承实现代码复用:Java 中所有的类都是通过直接或者间接地继承 ng.Object 类得到的。

继承而得到的类称为子类,被继承的类称为父类。

子类不能继承父类中访问权限为 private 的成员变量和方法,子类可以重写父类的方法,及命名与父类同名的成员变量。

子类通过隐藏父类的成员变量和重写父类的方法,把父类的状态和行为改变为自身的状态和行为。

注意:子类中重写的方法和父类中被重写的方法要具有相同的名字,相同的参数表和相同的返回类型,只是函数体不同。

由于子类继承了父类所有的属性(私有的除外),所以子类对象可以作为父类对象使用。

程序中凡是使用父类对象的地方,都可以用子类对象来代替。

一个对象可以通过引用子类的实例来调用子类的方法。

数据结构(Java)复习题及答案2线性表

数据结构(Java)复习题及答案2线性表

第2章线性表一、填空1.在顺序表中插入或删除一个元素,需要平均移动一半的元素,具体移动的元素个数与插入位置有关。

2.向一个长度为n的向量的第i个元素(K i< n+1)之前插入一个元素时,需向后移动n-i+1 个元素。

3.向一个长度为n的向量中删除第i个元素(K i< n)时,需向前移动n-i 个元素。

4.在顺序表中访问任意一结点的时间复杂度均为0(1),因此,顺序表也称为随机读取的数据结构。

5.顺序表中逻辑上相邻的元素的物理位置也相邻。

单链表中逻辑上相邻的元素的物理位置不一定相邻。

6.在单链表中,除了首元结点外,任一结点的存储位置由前驱节点的引用域指示。

7.在n个结点的单链表中要删除已知结点*p,需找到它的存储位置,其时间复杂度为0 (n) ______ 。

8 .链表中逻辑上相邻的元素的物理位置环一定—相连。

⑵ 在单链表中除首结点外,任意结点的存储位置都由前驱结点中的引用指示。

(3)在单链表中,设置头结点的作用是在插入或删除首结点时不必对头指针―进行处理二、判断正误V X(V) 1.链表的每个结点中都包含一个引用域。

(X ) 2.链表的物理存储结构具有同链表一样的顺序。

(X ) 3.链表的删除算法很简单,因为当删除链中某个结点后,计算机会自动将后续各个单元向前移动。

(X ) 4.顺序表的每个结点只能是一个简单类型,而链表的每个结点可以是一个复杂类型。

X ) 5.顺序表结构适宜于进行顺序存取,而链表适宜于进行随机存取。

(X ) 6.顺序存储方式的优点是存储密度大,且插入、删除运算效率高。

X ) 7.线性表在物理存储空间中也一定是连续的。

(V ) 8.线性表在顺序存储时,逻辑上相邻的元素在存储的物理位置次序上相邻。

(X ) 9.顺序存储方式只能用于存储线性结构。

X ) 10.线性表的逻辑顺序与存储顺序总是一致的。

(V ) 11.顺序存储的线性表的插入和删除操作需要付出很大的代价,因为平均每次操作有近一半的元素需要移动。

java数据结构期末考试题及答案

java数据结构期末考试题及答案

java数据结构期末考试题及答案一、选择题(每题2分,共20分)1. 在Java中,以下哪个类是实现了List接口的?A. ArrayListB. LinkedListC. HashSetD. TreeMap答案:A、B2. 以下哪个方法用于在ArrayList中添加元素?A. add(E e)B. put(E key, V value)C. insert(int index, E element)D. append(E element)答案:A3. 在Java中,哪个类实现了Map接口?A. ArrayListB. HashMapC. HashSetD. LinkedList答案:B4. 以下哪个排序算法的时间复杂度为O(nlogn)?A. 冒泡排序B. 快速排序C. 选择排序D. 插入排序答案:B5. 在Java中,哪个类提供了优先队列的功能?A. PriorityQueueB. LinkedListC. StackD. TreeSet答案:A6. 在Java中,以下哪个方法用于删除LinkedList中的元素?A. remove(Object o)B. poll()C. pop()D. dequeue()答案:A、B7. 在Java中,以下哪个类实现了Set接口?A. ArrayListB. HashSetC. HashMapD. LinkedList答案:B8. 在Java中,哪个类提供了栈的功能?A. StackB. LinkedListC. PriorityQueueD. TreeSet答案:A9. 在Java中,以下哪个方法用于在HashMap中添加键值对?A. add(K key, V value)B. put(K key, V value)C. insert(K key, V value)D. append(K key, V value)答案:B10. 在Java中,以下哪个类实现了SortedSet接口?A. TreeSetB. HashSetC. LinkedHashSetD. ArrayList答案:A二、填空题(每题2分,共20分)1. 在Java中,______类实现了List接口,允许对元素进行索引访问。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

AI N D E X练习题答案第一章练习题答案(a) n+(n–1)+(n–2)+…+2+1=2)1(+ n n (b) n+(n–1)+(n–2)+…+2+1=2)1(+nnf(n)≦c.g(n) →f(n)=O(g(n))(a) f(n)=100n+9c=101, g(n)=n, n0=10得知f(n)=O(n)(b) f(n)=1000n2+100n–8c=2000, g(n)= n2, n0=1得知f(n)=O(n2)(c) f(n)=5*2n+9 n2+2c=10, n0=5得知f(n)=O(2n)f(n)≧c g(n) →f(n)=Ω(g(n)) (a) f(n)=3n+1c=2, n0=1, g(n)=n得知f(n)=Ω(n)(b) f(n)=100n2+4n+5c=10, n0=1, g(n)= n2得知f(n)=Ω(n2)(c) f(n)=8*2n+8n+16c=8, n0=1, g(n)= 2n得知f(n)=Ω(n2)c1.g(n)≦f(n)≦c2.g(n) →f(n)= Θ(g(n))(a) f(n)=3n+2c1=3, c2=6, n0=1得知f(n) = Θ (n)(b) f(n)=9n2+4n+2c1=9, c2=16, n0=1得知f(n) = Θ (n2)(c) f(n)=8n4+5n3+5c1=8, c2=20, n0=1得知f(n) = Θ (n4)A-2练习题解答第二章练习题答案1. 分别以行为主和以列为主说明之。

(a) 以行为主A(i, j)=l0+(i–1)*u2*d+(j–1)*d(b) 以列为主A(i, j)=l0+(j–1)*u1*d+(i–1)*d2. 以列为主A(i, j)=l0+(j–12)*md+(i–l1)dm=u1–l1+1=5–(–3)+1=9m=u2–l2+1=2–(–4)+1=7A(1, 1) =100+(1–(–4))*9+(1–(–3))=100+45+4=1493. 分别以行为主和以列为主的说明。

由于数组为A(1:u1, 1:u2, 1:u3),因此p = u1-l1+1, q = u2- l2+1, r = u3- l3+1 所以p = u1-1+1 = u1, q = u2-1+1 = u2, r = u3-1+1 = u3(a) 以行为主A(i, j, k)=l0 + (i–1)*u2*u3*d + (j–1)*u3*d +(k-1)(b) 以列为主A(i, j, k)=l0 + (k–1)*u1*u2*d + (j–1)*u1*d + (i-1)*d4. 以列为主:A(i, j, k)=l0 + (k–l3)*pqd + (j–l2)*pd + (i-l1)*dp = 5-(-3) + 1 = 9, q = 2-(-4)+1 = 7, r = 5-1+1 = 5A(2, 1, 2) = 100 + (2-1)*9*7*1 + (1-(-4))*9*1 + (2-(-3))*1= 100 + 63 + 45 + 5 = 253A-35. 以行为主:A(i1, i2, i3, …, i n) = l0 +(i1–1)u2u3…u n+(i2–1)u3u4…u n+(i3–1)u4u5…u n…+(i n–1)以列为主:A(i1, i2, i3, …, i n)=l0+(i n–1)u1u2…u n-1+(i n-1–1)u1u2…u n-2+(i3–1)u4u5…u n…+(i2–1)*n1+(i1–1)2.2节练习题答案1.(a) 由上图知ptr+2为a[2]元素的地址,所以*(ptr+2)和a[2]表示的结果是一样的,其值为2。

A-4练习题解答(b) a为指针常数,但ptr为指针变量,所以ptr可以用于递增或递减的运算符,如ptr++,或ptr––,但a就不能使用此运算符,因为常数不可以当做LVALUE。

2. // file name: binary_search.javaimport java.io.*;public class binary_search{static int[] A= {-9999,2,4,6,8,10,12,14,16,18,20};static int count=0;public static int binary_search(int key){int i=1;int j=10;int k;count=0;do{count++;k = (i+j)/2;if(A[k] == key)break;else if(A[k] < key)i = k+1;elsej = k-1;}while(i<=j);return count;}public static void main (String args[]) // 主函数{binary_search myApp = new binary_search();System.out.println("Search 1, " + myApp.binary_search(1) +" times");System.out.println("Search 3, "+ myApp.binary_search(3) + " times");System.out.println("Search 13, "+ myApp.binary_search(13) + " times");A-5System.out.println("Search 21, "+ myApp.binary_search(21) + " times");System.out.println("Total " + (myApp.binary_search(1)+ myApp.binary_search(3)+ myApp.binary_search(13)+ myApp.binary_search(21)) + " times");}}// file name: sparse_matrix.java */import java.io.*;public class sparse_matrix{//存储稀疏矩阵的数据结构预设10 - 1 = 9 个元素static int[][] sm = new int[10][3];static int sm_row=1;static final int width = 6;static final int height = 6;static int[][] source={ {0,15, 0, 0,-8, 0},{0, 0, 6, 0, 0, 0},{0, 0, 0,-6, 0, 0},{0, 0,18, 0, 0, 0},{0, 0, 0, 0, 0,16},{72, 0, 0, 0,20, 0}};static int row=0,col=0;static int non_zero=0;public static void scan_matrix(){System.out.println("Scan the matrix...");while (row < height && col < width) {if(source[row][col] !=0){non_zero++; //计算非零元素个数A-6练习题解答sm[sm_row][0] = row+1;sm[sm_row][1] = col+1;sm[sm_row][2] = source[row][col];sm_row++;}if(col == width-1){ //先扫单一列上所有元素row++;if(row <= height-1) //当扫到最后一列就不归零col=0;}elsecol++;}System.out.println("Total nonzero elements = " + non_zero);//稀疏矩阵数据结构信息sm[0][0] = row;//最后col停在数组编号最后一个元素,换成个//数要加1sm[0][1] = col+1;sm[0][2] = non_zero;}public static void output_sm(int non_zero_){int i,j;System.out.println(" 1\\) 2\\) 3\\)");System.out.println("----------------------");for(i=0 ; i <= non_zero_ ;i++){System.out.print("A\\(" + i + ",");for(j=0 ; j < 3; j++)System.out.print(" "+ sm[i][j]);System.out.println("");}}public static void main(String args[])A-7A-8{ sparse_matrix myApp = new sparse_matrix(); myApp.scan_matrix();myApp.output_sm(non_zero);} }1.(a) 使用n+2长度存储p=(7, 6, 0, 8, 5, 0, 3, 0, 7) (b) 只考虑非零项p=(5, 7, 6, 5, 8, 4, 5, 2, 3, 0, 7)2.⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡-0006300002000080000900035432103210x x x x x x y y y y 以下的算法以行为主 (a) 存储for(i=1;i<=n;i++) for(j=1;j<=n;j++){ k=n(i –1)-i(i-1)/2+j B[k]=A[i, j]; } (b) 提取练习题解答if(i>j)p=0;else {k=n(i-1)-i(i-1)/2+j;p=B[k];}第三章练习题答案由于堆栈和队列都属于顺序列表,因此可利用数组(array)的数据结构表示,而注标值表示最大的容量。

3.2节练习题答案若top的初值为0,则push和pop函数分别如下A-9pulbic static void push_f(){DataInputStream in = new DataInputStream(System.in);if(top > MAX)System.out.println(” Stack is full !”);else {top++;System.out.print("\n Please enter item to insert: ");System.out.flush();try {item[top] = in.readLine();} catch (IOException e) {}}System.out.println("");}public static void pop_f() { // 删除函数if(top < 0) // 当堆栈没有数据存在,则显示错误System.out.print("\nNo item, stack is empty !\n");else {System.out.print("\nItem " + item[top] + " deleted !\n");top--;}System.out.println("");}中序→后序(1) a > b && c > d && e < f(a > b) && (c > d) && (e < f)(((a > b) && (c > d)) && (e < f))a b > c d > && e f < &&(2) (a + b) * c / d + e – 8((a + b) * c ) / d + e – 8((((a + b) * c) / d) + e) – 8A-10a b + c * d / e + 8 –第四章 练习题答案1. 有一链表如下:this=head;while(this.next != null){// 寻找链表最后节点 p rev=this; // prev 紧跟随在this 之后 this=this.next;}prev.next=null; this = null; 2.(a) current (b) current 将指到链表节点的尾端(a) 先追踪A ,B 两个循环链表的尾端atail = A;while(atail.next != A) atail = atail.next;Aatailheadbtail = B;while(btail.next != B)btail = btail.next;(b) 将B 指针指到的节点指定给atail.next ,并将A 指针指到的节点指定给btail.next ,如下所示: atail.next = B;btail .next = A; 1.new.rlink = x.rlink; x.rlinkllink = new; new.llink = x;. x.rlink = new;2.head.rlink = x.rlink; x.rlink.llink = head; x = null;1.有一环状链表如下所示:由于堆栈的特点为先进先出,又由于循环链表以哪一节点为前端都可以,因此假设上图的head 所指向的为前端节点,即每次加入的节点为前端,删除则从前端删除。

相关文档
最新文档