《数据结构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版)_郑州大学中国大学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版)习题解答

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. 分别以行为主和以列为主的说明。

数据结构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)复习题及答案

数据结构(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数据结构测试题及答案解析

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版习题解答

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版》习题解答.

up=!up;//方向求反
}
for (int sum=n; sum<2*n-1; sum++)//右下三角
{
if (up)
for (int j=sum-n+1;j<n;j++)
mat[sum-j][j] = k++;
else
for (int j=n-1;j>sum-n;j--)
mat[sum-j][j] = k++;
{//复制单链表
this.head = null;
if (list!=null && list.head!=null)
{
this.head = new Node(list.head.data);
Node<E> p = list.head.next;
Node<E> rear = this.head;
while (p!=null)
Comparable cmp = (Comparable)element;
if (this.head==null || pareTo(this.head.data)<=0)
this.head = new Node<E>(element,this.head);//头插入
else
{
Node<E> front=null, p=this.head;
}
比较两条单链表是否相等的操作也可设计为以下的递归方法:
public boolean equals(Object obj)//比较两条单链表是否相等
{
if (obj == this)
return true;

《数据结构(Java版)(第2版)》习题解答

数据结构(Java版)(第2版)习题解答叶核亚编著目录第0章 Java程序设计基础 (1)【习0.1】实验哥德巴赫猜想。

(1)【习0.2】实验杨辉三角形。

(1)【习0.3】实验金额的中文大写形式。

(1)【习0.4】实验下标和相等的数字方阵。

(1)第6章树和二叉树 (3)【习6.1】画出3个结点的各种形态的树和二叉树。

(3)【习6.2】找出分别满足下面条件的所有二叉树。

(3)【习6.3】输出叶子结点。

(3)【习6.4】实验单链表的全部替换操作。

(4)【习6.5】实验单链表的全部删除操作。

(4)【习6.6】折半查找的递归算法。

(5)【习6.7】二叉排序树查找的递归算法。

(6)【习6.8】二叉排序树插入结点的非递归算法。

(7)【习6.9】判断一棵二叉树是否为二叉排序树。

(8)第7章排序 (10)【习7.1】判断一个数据序列是否为最小堆序列。

(10)【习7.2】归并两条排序的单链表。

(10)【习7.3】说明二叉排序树与堆的差别。

(12)图0.1 下标和相等的数字方阵算法描述 (1)图6.1 3个结点树和二叉树的形态 (3)图6.2 单支二叉树 (3)图7.2 归并两条排序的单链表 (11)表0.1 int n=4; ength; j++)pababbatarget a b a =≠=patternt 0t 1t 2(a) 第一次匹配,因p 0=p 2,可知t 2≠p 0p 0p 1p 2ababb atargeta b a ==patternt 0p 0=t 3t 1t 4t 5t 2t 3t 4t 5p 1p 2(b) 第二次匹配,从t 3开始比较 (2)第0章 Java程序设计基础【习0.1】实验哥德巴赫猜想。

【习0.2】实验杨辉三角形。

【习0.3】实验金额的中文大写形式。

【习0.4】实验下标和相等的数字方阵。

输出下列方阵(当n=4时)。

1 2 6 7 或 1 3 4 103 5 8 13 2 5 9 114 9 12 14 6 8 12 1510 11 15 16 7 13 14 16采用二维数组实现。

数据结构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 二分查找(折半查找)
章节目录
上述顺序查找表的查找算法简单 , 但平均查找长度较大,特别不适用于表 长较大的查找表。
作业布置
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
this.head = null;
if (element!=null)
this.head = create(element,0);
}
private Node<E> create(E[] element, int i)//由指定数组构造单链表,递归方法
{
Node<Biblioteka >p=null;if (i<element.length)
return p.data.equals(q.data) && equals(p.next, q.next);
return false;
}
【习3.7】建立按升序排序的单链表(不带头结点)。
采用直接插入排序算法将一个结点插入到已排序的单链表中。
import dataStructure.linearList.Node;
图1.2下标和相等的数字方阵算法描述
程序如下。
public class Upmat
{
public static void main(String args[])
{
int n=4;//阶数
int[][] mat = new int[n][n];
int k=1;//k是自然数,递增变化
boolean up = true;//方向向上
{
rear.next = new Node<E>(p.data);
rear = rear.next;
p = p.next;
}
}
}
【习3.6】实验2.2单链表构造、复制、比较等操作的递归方法。
由指定数组中的多个对象构造单链表的操作也可设计为以下的递归方法:
public SinglyLinkedList(E[] element)//由指定数组中的多个对象构造单链表
}
}
}
【习1.1】实验0.5找出一个二维数组的鞍点
【习1.2】实验0.6复数类。
【习1.3】实验0.8图形接口与实现图形接口的类
第2章
【习2.1】实验1.1判断数组元素是否已按升序排序。
程序见例1.4的SortedArray.java。
public static boolean isSorted(int[] table)//判断整数数组是否已按升序排序
for (int sum=0; sum<n; sum++)//左上三角,sum表示行列的下标和
{
if (up)
for (int i=sum;i>=0;i--)
mat[i][sum-i] = k++;//k先赋值后自加
else
for (int i=0;i<=sum;i++)
mat[i][sum-i] = k++;
}
}
第3章
【习3.1】习2-5图2.19的数据结构声明。
table数组元素为单链表,声明如下:
SinglyLinkedList<E> table[]
【习3.2】习2-6如果在遍历单链表时,将p=p.next语句写成p.next=p,结果会怎样?
使p.next指向p结点自己,改变了结点间的链接关系,丢失后继结点,如图2.1所示。
{//复制单链表
this.head = null;
if (list!=null && list.head!=null)
{
this.head = new Node(list.head.data);
Node<E> p = list.head.next;
Node<E> rear = this.head;
while (p!=null)
return equals(this.head, list.head);
}
return false;
}
private boolean equals(Node<E> p, Node<E> q)//比较两条单链表是否相等,递归方法
{
if (p==null && q==null)
return true;
if (p!=null && q!=null)
else
{
Node<E> p=this.head;
while (p.next!=null)
p = p.next;
p.next = list.head;
}
}
【习3.5】实验2.2复制单链表。
在SinglyLinkedList单链表类中,增加构造方法如下。
public SinglyLinkedList(SinglyLinkedList<E> list)//以单链表list构造新的单链表
}
比较两条单链表是否相等的操作也可设计为以下的递归方法:
public boolean equals(Object obj)//比较两条单链表是否相等
{
if (obj == this)
return true;
if (obj instanceof SinglyLinkedList)
{
SinglyLinkedList list = (SinglyLinkedList)obj;
{
super();
}
public boolean add(E element) //根据指定对象的大小插入在合适位置
{
if (element==null || !(element instanceof Comparable))
return false; //不能插入null或非Comparable对象
}
【习2.2】实验1.3用递归算法求两个整数的最大公因数。
public class Gcd
{
public static int gcd(int a, int b)//返回a,b的最大公因数,递归方法
{
if(b==0)
return a;
if(a<0)
return gcd(-a,b);
if(b<0)
return gcd(a,-b);
while(p!=null && pareTo(p.data)>0)
{
front = p;//front是p的前驱结点
{//若已排序返回true,否则返回false
if (table==null)
return false;
for (int i=0; i<table.length-1; i++)
if (table[i].compareTo(table[i+1])>0)
return false;
return true;
{
this.head = copy(list.head);
}
private Node<E> copy(Node<E> p)//复制单链表,递归方法
{
Node<E>q=null;
if (p!=null)
{
q = new Node(p.data);
q.next = copy(p.next);
}
return q;
if (obj==null || element==null)
return false;
Node<E> p=this.head;
while (p!=null)
{
if (obj.equals(p.data))
{
p.data = element;
return true;
}
p = p.next;
}
return false;
【习3.3】实验2.2单链表的替换操作。
在SinglyLinkedList单链表类中,增加替换操作方法如下。
public boolean replace(Object obj, E element)//将元素值为obj的结点值替换为element
{//若替换成功返回true,否则返回false,O(n)
return gcd(b,a%b);
}
public static void main(String args[])
{
int a=12,b=18,c=24;
System.out.println("gcd("+a+","+b+","+c+")="+gcd(gcd(a,b),c));//获得3个整数最大公因数
import dataStructure.linearList.SinglyLinkedList;//不带头结点的单链表类
public class SortedSinglyLinkedList<E> extends SinglyLinkedList<E>
{
public SortedSinglyLinkedList()
public Node<E> search(E element)//若查找到指定对象,则返回结点,否则返回null
public boolean contain(E element)//以查找结果判断单链表是否包含指定对象
public boolean remove(E element)//移去首次出现的指定对象
if (element!=null && element.length>0)
{
this.head = new Node(element[0]);
相关文档
最新文档