数据结构与算法(习题)
第一章 绪论
2021.11.16 -> 此时已学完 绪论、算法复杂度、线性表、树、图
-
从逻辑上可以把数据结构分为( )两大类。
A. 动态结构、静态结构
B. 顺序结构、链式结构
C. 线性结构、非线性结构
D. 初等结构、构造型结构 -
计算机算法必须具备( ) 这三个特性。
A. 可执行性、可移植性、可扩充性
B. 可执行性、确定性、有穷性
C. 确定性、有穷性、稳定性
D. 易读性、稳定性、安全性 -
数据结构的抽象操作的定义与具体实现有关。( )
-
数据元素是数据的最小单位。( )
-
数据的逻辑结构是指数据的各数据项之间的逻辑关系。( )
第二章 线性表
- 下述哪一条是顺序存储结构的优点?( )
A. 存储密度大
B. 插入运算方便
C. 删除运算方便
D. 可方便地用于各种逻辑结构的存储表示 - 链表不具有的特点是( )。
A. 插入、删除不需要移动元素
B. 可随机访问任一元素
C. 不必事先估计存储空间
D. 所需空间与线性长度成正比 - 在一个以 h 为头的单循环链中,p 指针指向链尾的条件是( )。
A. p->next=h
B. p->next=NULL
C. p->next->next=h
D. p->data=-1 - 在单链表指针为 p 的结点之后插入指针为 s 的结点,正确的操作是:( )。
A. p->next=s; s->next=p->next;
B. s->next=p->next; p->next=s;
C. p->next=s; p->next=s->next;
D. p->next=s->next; p->next=s; - 对于一个头指针为 head 的带头结点的单链表,判定该表为空表的条件是( )。
A. head == NULL
B. head→next == NULL
C. head→next == head
D. head! = NULL - (判断题)线性表的特点是每个元素都有一个前驱和一个后继。( )
- (判断题)为了很方便的插入和删除数据,可以使用双向链表存放数据。( )
- (判断题)所谓静态链表就是一直不发生变化的链表。( )
第三章 栈和队列
2021.10.3
-
有六个元素 6,5,4,3,2,1 的顺序进栈,下列( )不是合法的出栈序列?
A
5 4 3 6 1 2
B4 5 3 1 2 6
C3 4 6 5 2 1
D2 3 4 1 5 6
-
在作进栈运算时,应先判别栈是否为( )。
A 空
B 满
C 上溢
D 下溢 -
栈在( )中应用。
A 递归调用
B 子程序调用
C 表达式求值
D A,B,C -
表达式 a(b+c)-d 的后缀表达式是( )。
A
abcd*+-
Babc+*d-
Cabc*+d-
D+*abcd
-
若用一个大小为 6 的数组来实现循环队列,且当前 rear 和 front 的值分别为 0 和 3,当从队列中删除一个元素,再加入两个元素后,rear 和 front 的值分别为( )?
A 1 和 5
B 2 和 4
C 4 和 2
D 5 和 1 -
栈和队列的共同点是( )。
A 都是先进先出
B 都是先进后出
C 只允许在端点处插入和删除元素
D 没有共同点 -
循环队列 A[0…m-1]存放其元素值,用 front 和 rear 分别表示队头和队尾,则当前队列中的元素数是( )。
A
(rear-front+m)%m
Brear-front+1
Crear-front-1
Drear-front
-
(判断题) 循环队列通常用指针来实现队列的头尾相接。( )
-
(判断题)循环队列也存在空间溢出问题。( )
-
(判断题) 通常使用队列来处理函数或过程的调用。( )
-
(判断题)栈和队列的存储方式,既可以是顺序方式,又可以是链式方式。
-
(判断题)栈是实现过程和函数等子程序所必需的结构。( )
第四章 数组
2021.10.17
-
设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,a11为第一元素,其存储地址为1,每个元素占一个地址空间,则a85的地址为( )
A. 13
B. 33
C. 18
D. 40 -
设二维数组 A[1… m,1… n](即 m 行 n 列)按行存储在数组 B[1… m*n]中,则二维数组元素 A[i,j]在一维数组 B 中的下标为( )。
A. (i-1)n+j
B. (i-1)n+j-1
C. i(j-1)
D. jm+i-1 -
对稀疏矩阵进行压缩存储目的是( )。
A. 便于进行矩阵运算
B. 便于输入和输出
C. 节省存储空间
D. 降低运算的时间复杂度 -
A[N,N]是对称矩阵,将下三角(包括对角线)元素以行序为主序存储到一维数组 T[1…N(N+1)/2]中,则任一上三角元素 a[i][j](1<=i<=j)在T中的下标为:( )。
A. i(i-1)/2+j
B. j(j-1)/2+i
C. i(j-i)/2+1
D. j(i-1)/2+1 -
有一个 100*90 的稀疏矩阵,非 0 元素有 10 个,设每个整型数占 2 字节,则用三元组表示该矩阵时,所需的字节数是( )。
A. 60
B. 66
C. 18000
D. 33 -
(判断题)稀疏矩阵压缩存储后,必会失去随机存取功能。( )
-
数组可看成线性结构的一种推广,因此与线性表一样,可以对它进行插入、删除等操作。( )
-
一个稀疏矩阵采用三元组形式A(mn)表示,若把三元组中有关行下标与列下标的值互换,并把 m 和 n 的 值互换,则就完成了A(mn)的转置运算。( )
-
写出下面稀疏矩阵的三元组顺序表和十字链表表示。
第五章 树
-
在下述结论中,正确的是( )。
①只有一个结点的二叉树的度为0; ②二叉树的度为2; ③二叉树的左右子树可任意交换;
④深度为K的完全二叉树的结点个数小于或等于深度相同的满二叉树。A. ①、②、③
B. ②、③、④
C. ②、④
D. ①、④ -
若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是( )。
A. 9
B. 11
C. 15
D. 不确定 -
设给定权值总数有n 个,其哈夫曼树的结点总数为( )。
A. 不确定
B. 2n
C. 2n+1
D. 2n-1 -
一棵二叉树高度为h,所有结点的度或为0,或为2,则这棵二叉树最少有( )结点。
A. 2h
B. 2h-1
C. 2h+1
D. h+1 -
一棵树高为K的完全二叉树至少有( )个结点。
-
树的后根遍历序列等同于该树对应的二叉树的( )。
A. 先序序列
B. 中序序列
C. 后序序列 -
已知一棵二叉树的前序遍历结果为ABCDEF,中序遍历结果为CBAEDF,则后序遍历的结果为( )。
A. CBEFDA
B. FEDCBA
C. CBEDFA
D. 不定 -
下面的说法中正确的是( )。
①任何一棵二叉树的叶子结点在三种遍历中的相对次序不变;
②按二叉树定义,具有三个结点的二叉树共有6种。A. ①②
B. ①
C. ②
D. ①、②都错 -
一棵非空的二叉树的先序遍历序列与后序遍历序列正好相反,则该二叉树一定满足( )。
A. 所有的结点均无左孩子
B. 所有的结点均无右孩子
C. 只有一个叶子结点
D. 是任意一棵二叉树 -
二叉树的第i层上最多含有结点数为( )。
-
请按指定的方式画出下图中树的各种存储结构:
-
将下图所示的森林转换成二叉树
-
假定用于通信的电文由8个字符A、B、C、D、E、F、G、H组成,各字母在电文中出现的概率为5%、25%、4%、7%、9%、12%、30%、8%,试为这8个字母设计哈夫曼编码。
答案
第一章
- C
- B
- 错
- 错
数据项是有独立含义的数据最小单位。 - 错
数据的逻辑结构是指数据元素之间的逻辑关系。
第二章
- A
在数据结构中,存储密度:结点数据本身所占的存储量和整个结点结构所占的存储量之比。
存储密度 = (结点数据本身所占的存储量)/(结点结构所占的存储总量)
- B
- A
- B
- B
- 错
线性表中的第一个结点只有一个后继,最后一个结点只有一个前驱 - 对
在双向链表中,可以直接删除当前指针所指向的节点。而单向链表中,删除一个元素必须找到其前驱。
因此在插入数据时,单向链表和双向链表操作复杂度相同。而删除数据时,双向链表的性能优于单向链表 - 错
第三章
-
C
-
B
-
D
-
B
-
B
-
C
-
A
-
错
-
对
-
错
-
对
-
对
第四章
-
B
-
A (数组B从1开始)
-
C
-
B
-
B
将非零元素所在行、列、非零元素的值构成一个三元组(i,j,v) ;
对于该题:
每个非零元素占32=6个字节,共10个非零元素,需610 = 60 个字节;
此外,还一般要用三个整数来存储矩阵的行数、列数和总元素个数,又需要3*2 = 6个字节;
总共:60 + 6 = 66 个字节。 -
对
-
错
怎么说呢,本人认为这道题目,没有问题。
这道题错就错在,“因此与线性表一样,可以对它进行插入,删除等操作”,注意,数组的插入、删除操作,和线性表是不一样的,虽然数组可以表示线性表,但数组终究不是线性表。 -
错
三元组做到下面三条便可实现矩阵的转置:
(1)将矩阵的行列值交换。
(2)将每个三元组中的 i 和 j 相互调换。
(3)重排三元组之间的次序。
前两条是容易做到的,关键是如何实现第三条。即如何使 b.data 中的三元组是以 T 的行(M 的列)为主次序依次排列的。
第五章
-
D
-
B
《大话数据结构 p170》
-
D
-
B
-
C
-
B
-
A
-
B
-
C
-
C
12.
13.