习题合集-数据结构导论

文章目录

对n个记录的文件进行快速排序,所需要的辅助存储空间的空间复杂度为:

O(log2n)

若待排序的序列中存在多个记录具有相同的键值,经过排序,这些记录的相对次序仍然保持不变,则称这种排序方法是▲的。

稳定

在最坏情况下,即对几乎已是排好序的输入序列,快速排序算法的效率较低,此时其时间复杂度近似为▲。

n2

有一个整数序列,其输入顺序为20,30,90,-10,45,78,试利用栈将其输出序列改变为30,-10,45,90,78,20,写出该整数序列进栈和出栈的操作步骤。

(用push(x)表示进栈,pop(x)表示x出栈)
push 20
push 30
pop 30
push 90
push -10
pop -10
push 45
pop 45
pop 90
push 78
pop 78
pop 20

分别写出题30图所示的二叉树的先序遍历、中序遍历和后序遍历三种访问方式的结点访问序列。

在这里插入图片描述
先:
ABDEGCF
中:
DBGEACF
后:
DGEBFCA

设有字符集{,A,B,C,D,E,F},各字符使用频率对应为{2,4,5,13,9,18},试画出哈夫曼树(要求任一结点的左孩子权值小于右孩子)。

网上解题思路:在这里插入图片描述
解题过程:
在这里插入图片描述
在这里插入图片描述
已知散列表的长度为11,散列函数H(key)=key%11,采用线性探测法解决冲突,试用关键字值的序列:75,25,80,35,60,46,50,55建立散列表。
在这里插入图片描述

试用冒泡法对数列(45,73,12,23,52,5,38)进行递增排序,写出第1、2、3、4趟排序结果,并给出冒泡排序算法的时间复杂度。

参考答案:
第1趟:45,12,23,52,5,38,73(1分)
第2趟:12,2345,5,38,52,73(1分)
第3题:12,23,5,38,45,52,73(1分)
第4趟:12,5,23,38,45,52,73(1分)
冒泡排序算法的时间复杂度为:O(n2)(2分)

以二叉链表作存储结构,试写出二叉链表的结构类型定义,并编写求二叉树叶子结点个数的算法。

typedef struct btnode
{
	DataType data;
	struct btnode *lchild, *rchild
}* BinTree
int leafnode_num(BinTree bt)
{
	if(bt == NULL) return 0;
	else if (bt->lchild == NULL) && (bt->rchild == NULL)
		return 1;
	else
		return leafnode_num(b->lchild) + leafnode_num(bt->rchild)
}

写出直接插入排序算法。

在这里插入图片描述

1976年瑞士计算机科学家 Niklaus Wirth曾提出一个著名公式:程序=数据结构+____

算法

简单地说,数据结构是计算机▲数据和存储数据的方式。

组织

线性表中结点个数n称为▲

表长

线性表上的插入和删除运算限定在表的某一端进行的数据结构是▲。

对稀疏矩阵进行压缩存储的目的是节省▲

存储空间

一个具有n个顶点的有向完全图的弧数为P=▲

n(n-1)

构造最小生成树的算法有两种:Prim算法和▲算法。

参考答案:
Prim算法
Kruskal或克鲁斯卡尔

一棵树的结点个数最少为▲

0

有K个叶子结点的哈夫曼树,其结点的总数为▲

2K-1
哈夫曼树是最优二叉树,但不一定是完全二叉树,也不一定是平衡二叉树

由二叉树的后序序列和▲序列,可以唯一确定一棵二叉树。

参考答案:
中序

二分查找算法的平均时间复杂度为▲

参考答案:
O(log2n)

在带头结点的单链表L中,第一个数据元素结点的指针为

题目详解:
在带头结点的单链表L中,头结点的指针为L,第一个数据元素结点的指针为L->next。

栈初始化时一般将栈顶下标值top设置为

题目详解:
当栈顶下标值top==0 时是栈空,栈初始化时一般将栈顶下标值top设置为0。

设有一循环队列CQ,队列的长度为maxsize,则该循环队列满的条件为:

题目详解:
循环队列 队满的条件:(CQ.rear+1)%maxsize == CQ.front;,队空的条件是:CQ. rear == CQ. front 。

执行进栈操作,在元素x进栈前需要进行的操作是:

题目详解:
执行进栈操作,在元素x进栈前需要判断栈是否满,若栈未满,top值加1 。执行出栈操作,出栈前判断栈是否空,若栈未空,top值减1。

森林有两种遍历方法,分别是:

题目详解:
森林的遍历有先序遍历和中序遍历两种方式。
先序遍历的定义为:
(1)访问森林中第一棵树的根结点;
(2)前序遍历第一棵树的根结点的子树;
(3)前序遍历去掉第一棵树后的子森林。
中序遍历的定义为:
(1)中序遍历第一棵树的根结点的子树;
(2)访问森林中第一棵树的根结点;
(3)中序遍历去掉第一棵树后的子森林。
树遍历有三种方法:先根遍历、后根遍历和层次遍历。

有向图中某顶点v的入度为2,出度为3,则该顶点的度为

5
题目详解:
有向图顶点的度等于其入度和出度之和。
和树不一样,树不会计算入度哦,也没有入度的概念

利用散列表进行査找的基本出发点是:

题目详解:
利用散列表进行査找的基本出发点是
减少査找过程中的比较次数。

链式存储的特点是利用指针来表示数据元素之间的__________关系。

逻辑

题目详解:
链式存储的特点是利用指针来表示数据元素之间的逻辑关系,顺序存储的特点是利用存储的位置来表示数据元素之间的逻辑关系

单链表的每个结点包括__________和指针域。

数据域
题目详解:
单链表的每个结点包括数据域和指针域,数据域存储数据,指针域存储下一个结点的地址。

设有一个单链表,若结点的指针域为next,则指针P所指的结点为最后一个结点的条件是__________.

参考答案:
p->next==NULL

由于链接实现需要__________,故链队列在一定范围内不会出现队列满的情况。

动态申请空间
题目详解:
链接实现是 动态申请空间,只要内存够用,链队列就不会出现队列满的情况

二叉树的__________存储结构可以用一维数组来实现。

顺序
题目详解:
二叉树的的顺序存储结构可以用一维数组来实现。

含有10个叶子结点的哈夫曼树,其结点的总数为__________。

2K-1=19
题目详解:
对于10个叶子结点的哈夫曼树,其10个权值分量,经过10-1次合并又产生10-1个新结点,从而组成的10+10-1=2*10-1=19个结点的哈夫曼树。

图的广度优先搜索遍历类似于树的按__________遍历的过程。

层次
是层次,不是层序哦
题目详解:
图的广度优先搜索遍历类似于树的按层次遍历的过程, 图的深度优先搜索遍历类似于树的先根遍历的过程。

如果以图中的顶点来表示活动,有向边表示活动之间的优先关系,这种用顶点表示活动的 有向图称为__________。

AOV网
题目详解:
本题考核AOV网的概念。

用数据元素的__________通过散列函数获取存储位置的存储方式构造的存储结构称为散列表。

键值
题目详解:
用数据元素的键值通过散列函数获取存储位置的存储方式构造的存储结构称为散列表。

静态查找表是以具有相同特性的数据元素集合为逻辑结构,包括建表、__________、读表中元素三种基本运算。

查找
题目详解:
静态查找表的概念和基本运算
建表,查找,读表

设循环队列的元素存放在一维数组Q[30]中,队列非空时,front指示队列首结点的前一个位置,rear指示队列尾结点。如果队列中元素的个数为10,front的值为25,则rear应指向的元素是:

5
题目详解:
循环队列的元素的个数:
当rear大于front时,元素的个数=rear-front;
当front大于rear时,元素的个数=M(数组长度)-(front-rear)。
本题元素的个数=30-(25-rear)=10,所以rear的值为5。

二叉树第i(i≥1)层上的结点数最多为:

2i-1

题目详解:
二叉树第i(i≥1)层上的结点数最多为2i-1。

假设初始森林中共有n棵二叉树,每棵树中都仅有一个孤立的结点。将该森林构造成哈夫曼树,则最终求得的哈夫曼树的结点数为:

2n-1

题目详解:
哈夫曼树的特点:
(1)在哈夫曼树中,权值越大的叶子离根结点越近。
(2)若有n0个权值,需要进行n0-1次合并,构造成为哈夫曼树。
(3)哈夫曼树没有度为1的结点。
(4)由n0个权值构成的哈夫曼树,叶结点数为n0,度为2的结点数为 n0-1,结点总数为n0+ n2= n0+ n0-1=2n0-1。
(5)给定一组权值,构造出的哈夫曼树的形态可能不唯一,但它们的带权路径长度都一样。

无向图中的极大连通子图是:

连通分量

题目详解:
连通分量:无向图中的极大连通子图。
生成树:对于具有n个顶点的连通图,包含了该图的全部n个顶点,仅包含它的n-1条边的一个极小连通子图被称为生成树。生成树本身也是连通的,而且不具有回路。一个连通图的生成树不一定是唯一的。有向图中任意两个顶点之间都有连通,就称该有向图是强连通图。一个有向图的极大强连通子图,称为该有向图的强连通分量。

在用邻接表表示图时,对图进行深度优先搜索遍历的算法的时间复杂度为:

题目详解:
在用邻接表表示图时,对图进行深度优先搜索遍历的算法的时间复杂度为O(n+e)。

静态查找表与动态查找表二者的根本差别在于:

施加在其上的操作不同

题目详解:
静态查找表与动态查找表二者的根本差别在于施加在其上的操作不同,静态查找表主要完成的操作是查询,动态查找表除了进行查询,也方便进行插入和删除操作。

在下述四种排序算法中,所需辅助存储量最多的是:

题目详解:
归并排序所需要的辅助存储量最多,为O(n);
快速排序所需辅助存储量最多的是O(log2n),
其他两种排序所需要的辅助存储量为O(1)。

单链表各个结点在内存中的存储位置并连续。

参考答案:
不一定
要回答“不一定”,不能回答“错误”

栈初始化运算的目的是。

构造一个空栈

二叉树的任一结点都有两棵子树,并且这两棵子树之间有___关系。

次序

一棵树中所有结点的最大值称为该树的高度。

层次数

高度为h(h≥2)的完全二叉树至少有个叶子结点。

参考答案:
2H-1

图的广度优先搜索遍历类似于树的按__遍历的过程。

层次

稀疏矩阵可以采用___法进行压缩存储。

参考答案:
三元组表示

完成拓扑排序的前提条件是AOV网中不允许出现。

回路

数据元素的键值和之间建立的___对应关系称为散列函数。

参考答案:
存储位置

静态查找表是以具有相同特性的数据元素集合为逻辑结构,但不包括插入和___运算。

删除

设表中元素的初始状态是按键值递增有序的,分别用堆排序、快速排序、冒泡排序和归并排序方法对其按递增顺序进行排序,___排序方法最省时间。

参考答案:
冒泡

假设某个电文由5个字母a,b,c,d,e组成,每个字母在电文中出现的次数为7,9,5,6,12,试为这5个字母设计哈夫曼树并写出对应的哈夫曼编码。(构建新二叉树时,要求新二叉树的左子树根的权值小于等于右子树根的权值。)

(1)所构造的哈夫曼树为:
在这里插入图片描述
(2)5个字母对应的哈夫曼编码:a:00  b:01  c:100  d:101  e:11

与数据元素本身的形式、内容、相对位置、个数无关的是数据的:

逻辑结构
题目详解:
数据元素之间的逻辑关系的整体就称为数据的逻辑结构,其与数据元素本身的形式、内容、相对位置、个数无关。

假设顺序表的长度为n,则在第i(l≤i小于等于n+l)个元素之前插入一个新元素x所需移动元素的个数为:

n-i+1
居然算错了,被插入位置上的移动没考虑

关于栈和队列,下面叙述正确的是:

栈和队列都是运算受限的线性表

题目详解:
函数的嵌套调用用栈来实现
操作系统中进程调用用队列来实现
程序递归的处理用栈来实现
栈和队列是运算受限的线性表。

设两个数据元素类型一致的栈共享一维数组空间data[max]成为双栈,两个栈的栈底分别设在数组两端,这两个栈的栈顶变量分别为top1和top2,且top2≥top1,则下列会发生“上溢”情况的是:

题目详解:
两个栈的栈顶变量分别为top1和top2,且top2≥top1;当top1+1== top2会发生“上溢”情况。

设有一循环队列SQ,现将数据x进行入队操作,语句为:

题目详解:
循环队列SQ,现将数据x进行入队操作:先移动队尾SQ.rear=(SQ.rear+1)% maxsize; 再插入元素SQ.data[SQ.rear]=x;

关于满二叉树和完全二叉树,下面叙述正确的是:

题目详解:
满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树,由n个结点构成的完全二叉树

二叉链表结构形式完全相同的是孩子兄弟链表。

假设顺序表为(b1,b2,b3),查找b1,b2,b3的概率分别为0.2 , 0.2, 0.6,则顺序查找法的平均查找长度为:

题目详解:
0.23+0.22+0.6*1=1.6

从后往前找,或者应该是从大到小找

在插入排序方法中,类似图书馆中整理图书的过程的是:

直接插入排序
题目详解:
图书馆中整理图书的过程的是1本书插到已经有序的一排书中间,使得整体有序,这个过程类似于直接插入排序。

在估算算法空间复杂度时,一般只需要分析_________所占用的空间。

辅助变量

对于按位置查找运算,顺序表是随机存取,其时间复杂度为_________。

O(1)

设顺序表A长度为100,若下标从1开始计数,则删除元素A[10]需要移动_________个元素。

90
删除是n-i
插入是n-i+1

循环队列的队头指针为front,队尾指针为rear,当_________时表明队列为空。

参考答案:
REAR==FRONT

对于一棵包含n个结点的二叉树,用二叉链表存储时,其指针总数为_________个。

2n

用于描述分类过程的二叉树称为_________

判定树

在树形结构中,每一层结点只能和上一层中的至多一个结点相关,而在_________中,任意两个结点之间都可能相关。

图结构

Dijkstra算法的思想是按照最短路径长度_________的方法产生从点到其他顶点的最短路径。

递增

遍历图的基本方法有深度优先搜索和_________优先搜索两种。

广度

作为一种数据结构,查找表的逻辑结构是_________。

集合

对于具有n个元素的数据序列,采用二叉排序树查找,平均查找长度介于_________之间。

参考答案:
O(N)和O(LOG2N)

直接插入排序的空间复杂度为_________。

O(1)

已知一个7×6的稀疏矩阵如题29图所示,试写出该稀疏矩阵的三元组表示。

在这里插入图片描述
参考答案:
该稀疏矩阵可表示为如下三元组表:((0,0,16), (0,5,-16), (1,2,3), (2,3,-8), (4,0,91), (6,2,15))

任意两个结点之间都没有邻接关系,组织形式松散,这种组织形式称为:

集合

题目详解:
数据的逻辑结构分为4种基本类型:

①集合。集合中任何两个数据元素之间都没有逻辑关系,组织形式松散。
②线性结构。线性结构中的结点按逻辑关系依次排列形成一个“锁链”。
③树形结构。树形结构具有分支、层次特性,其形态有点像自然界中的树。
④图状结构。图状结构中的结点按逻辑关系互相缠绕,任何两个结点都可以邻接。

线性表、栈和队列中的元素具有相同的逻辑结构,即_________。

线性结构

不能答顺序结构哦

为了便于运算的实现,在单链表的第一个结点之前增设一个类型相同的结点,称之为_________。

头节点

假设一个8阶的上三角矩阵A按照列优先顺序压缩存储在一维数组B中,则B数组的大小应为_________。

上三角矩阵,大小为:8 + 7 + 6 + 5 +4 +3 + 2 + 1 也就是等差数组公式 n(n+1)/2=72/2=36

在栈中,允许进行插入和删除操作的一端称为_________。

栈顶

这地方有栈顶和栈底

即使输入非法数据,算法也能适当地做出反应或进行处理,不会产生预料不到的运行结果,这种评价算法好坏的因素称为_________。

健壮性

树的双亲表示法由一个一维数组构成,数组的每个分量包含_________和双亲域两个域。

数据域

如果包含n个顶点的连通图G的一个子图G’的边数大于n-1,则G’中一定有_________。

在含有9个元素的有序表(2,4,12,18,23,37,49,51,68)中二分查找关键字(关键字即为数据元素的值)为37的元素时,所需进行的比较次数为_________次。

3
本题说明二分偶数时,选择floor

从未排序序列中依次取出一个元素与已排序序列中的元素依次进行比较,然后将其放在已排序序列的合适位置,该排序方法称为_________排序法。

直接插入
要答直接插入,不是插入哦

高度为h的满二叉树,如果按层次自上而下,同层从左到右的次序从1开始编号,

试问:
(1)该树上有多少个结点?
(2)编号为i的结点的左孩子和右孩子(若存在)的编号分别是多少?
(1)2h-1
(2)2i与2i+1

假设用于通讯的电文仅由6个字母A,B,C,D,E,F组成,各个字母在电文中出现的频率分别为6,3, 12, 10, 7, 5,试为这6个字母设计哈夫曼树。(构建新二叉树时,要求新 二叉树的左子树根的权值小于等于右子树根的权值。)

在这里插入图片描述

写出如题31图所示的有向图邻接矩阵表示和所有拓扑排序序列。

在这里插入图片描述
(1)有向图邻接矩阵表示
在这里插入图片描述
(2)所有拓扑排序序列:DAEBFC;DABEFC。

给定数据序列{ 46, 25, 78, 62, 12, 80 },试按元素在序列中的次序将它们依次插入一棵初始为空的二叉排序树,画出插入完成后的二叉排序树。

在这里插入图片描述
题目详解:
通常采用逐点插入结点的方法来构造二叉排序树,其方法表述如下:设K={kl,k2,k3,…,kn}为数据元素序列。从k1开始依次取序列中的元素,每取出一个数据元素ki按下列原则建立二叉排序树的一个结点:
① 若二叉排序树为空,则ki就是该二叉排序树的根结点。
② 若二叉排序树非空,则将ki与该二叉排序树的根结点的值进行比较。若ki小于根结点的值,则将ki插入到根结点的左子树中,否则将ki插入到根结点的右子树中。

对键值序列(61,87,12,3,8,70)以位于最左位置的键值为基准进行由小到大的快速排序,请写出第一趟排序后的结果,并给出快速排序算法在平均情况和最坏情况下的时间复杂度。

参考答案:
(1)第一趟排序后的结果:[8 3 12] 61 [87 70]
(2) 快速排序算法在平均情况下的时间复杂度为O(nlogn),在最坏情况下的时间复杂度为O(n)。

假设线性表的数据元素的类型为DataType,顺序表的结构定义如下:

在这里插入图片描述
设计算法实现顺序表的插入运算InsertSeqlist(SeqList L,DataType x,int i)。该算法是指在顺序表的第i(l≤i ≤ n+1)个元素之前,插入一个新元素x。使长度为n的线性表 (a1,a2,…,ai-1,ai,…,an)变为长度为n+1的线性表(a1,a2,…,ai一1,X,ai,…,an)。

参考答案:
void InsertSeqlist(SeqListL,DataTypex,int i)
{
if(L.length == Maxsize)
exit(“表已满”);
if(i< 1||i> L.length + 1)
exit(“位置错”);
for(j= L.length; j>=i; j–)
L.data[j]= L.data[j-1];
L.data[i-1]= x;
L.length++;
}

3.算法设计题:以二叉链表作存储结构,试写出二叉链表的结构类型定义,并编写求二叉树叶子节点个数的算法。

二叉链表的结构类型定义如下:

typedef struct btnode
{
	DataType data;
	struct btnode *lchild, *rchild
}* BinTree
int leafnode_num(BinTree bt)
{
	if(bt == NULL) return 0;
	else if (bt->lchild == NULL) && (bt->rchild == NULL)
		return 1;
	else
		return leafnode_num(b->lchild) + leafnode_num(bt->rchild)
}

将一组键值{83,69,41,22,15,33,8,76}应用二路归并排序算法从小到大排序,试写出各趟排序的结果。

参考答案:
初始键值:[83][69] [41][22][15][ 33][8][76]
第一题:[69 83][22 41][15 33][8 76]
第二楼:[22 41 69 83][8 15 33 76]
第三道:[8 15 22 33 41 69 76 83]

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值