数据结构错题整理
一、选择题
-
用链接方式存储的队列,在进行插入运算时 ( )
A. 仅修改头指针
B. 头、尾指针都要修改
C. 仅修改尾指针
D. 头、尾指针可能都要修改 -
对 n 个记录的文件进行快速排序,所需要的辅助存储空间大致为( )
A. \(O(1)\)
B. \(O(n)\)
C. \(O(log_2n)\)
D. \(O(n^2)\) -
设有 n 个待排序的记录关键字,则在堆排序中需要( )个辅助记录单元
A. \(1\)
B. \(n\)
C. \(nlog_2n\)
D. \(n^2\) -
在二叉排序树中插入一个结点的时间复杂度为( )
A. \(O(1)\)
B. \(O(n)\)
C. \(O(log_2n)\)
D. \(O(n^2)\) -
设一组初始记录关键字序列为 (50,40,95,20,15,70,60,45) ,则以增量 d=4 的一趟希尔排序结束后前 4 条记录关键字为( )
A. \(40,50,20,95\)
B. \(15,40,60,20\)
C. \(15,20,40,45\)
D. \(45,40,15,20\) -
设连通图 G 中的边集 E={(a,b),(a,e),(a,c),(b,e),(e,d),(d,f),(f,c)},则从顶点 a 出发不能得到一种深度优先遍历的顶点序列为( )
A. \(abedfc\)
B. \(acfebd\)
C. \(aebdfc\)
D. \(aedfcb\) -
设某无向图中有 n 个顶点 e 条边,则建立该图邻接表的时间复杂度为( )
A. \(O(n+e)\)
B. \(O(n^2)\)
C. \(O(ne)\)
D. \(O(n^3)\) -
设顺序线性表中有 n 个数据元素,则删除表中第 i 个元素需要移动( )个元素
A. \(n-i\)
B. \(n+l-i\)
C. \(n-1-i\)
D. \(i\) -
设顺序线性表的长度为 30 ,分成 5 块,每块 6 个元素,如果采用分块查找,则其平均查找长度为( )
A. \(6\)
B. \(11\)
C. \(5\)
D. \(6.5\) -
设某散列表的长度为 100 ,散列函数
H(k)=k % P
,则 P 通常情况下最好选择( )
A. \(99\)
B. \(97\)
C. \(91\)
D. \(93\) -
设有 n 个关键字具有相同的 Hash 函数值,则用线性探测法把这 n 个关键字映射到 HASH 表中需要做( )次线性探测
A. \(n^2\)
B. \(n(n+1)\)
C. \(n(n+1)\over2\)
D. \(n(n-1)\over2\) -
数据结构作为一门独立的课程是在( )
A. \(1968\)
B. \(1953\)
C. \(1964\)
D. \(1946\) -
计算机内部数据处理的基本元素是( )
A. 数据
B. 数据元素
C. 数据库
D. 数据项 -
若长度为 n 的非空线性表采用顺序存储结构,在表的第 i 个位置插入一个数据元素,则 i 的合法值应该是( )
A. \(1 \leq i \leq n\)
B. \(1 \leq i \leq n+1\)
C. \(0 \leq i \leq n-1\)
D. \(0 \leq i \leq n\) -
给定有 n 个元素的一维数组,建立一个有序单链表的最低时间复杂度为( )
A. \(O(1)\)
B. \(O(n)\)
C. \(O(n^2)\)
D. \(O(nlog_2n)\) -
一个链表最常用的操作是在末尾插入结点和删除结点,则选用( )最省时间
A. 带头结点的双向循环链表
B. 单循环链表
C. 带尾指针的单循环链表
D. 单链表 -
最适合用作链表的链队是( )
A. 带队首指针和队尾指针的循环单链表
B. 带队首指针和队尾指针的非循环单链表
C. 只带队首指针的非循环单链表
D. 只带队首指针的循环单链表 -
树的路径长度是指从树根到每个结点的路径长度的( )
A. 总和
B. 最小值
C. 最大值
D. 平均值 -
在二叉树中有两个结点 m 和 n,若 m 是 n 的祖先,则使用( )可以找到从 m 到 n 的路径
A. 先序遍历
B. 中序遍历
C. 后序遍历
D. 层序遍历 -
利用二叉链表存储森林时,根节点的右指针是( )
A. 指向最左兄弟
B. 指向最右兄弟
C. 一定为空
D. 不一定为空 -
设森林 F 对应的二叉树为 B,它有 m 个结点,B 的根为 p,p 的右子树结点个数为 n,森林 F 中的第一棵树结点个数为( )
A. \(m-n\)
B. \(m-n-1\)
C. \(n+1\)
D. \(未可知也\) -
若度为 m 的哈夫曼树中,叶子结点个数为 n ,则非叶子结点个数为
A. \(n-1\)
B. $\lfloor n/m \rfloor -1 $
C. \(\lceil (n-1)/(m-1) \rceil\)
D. $\lceil n/(m-1) \rceil -1 $
[参考答案]
1-5 | 6-10 | 11-15 | 16-20 | 21-25 |
---|---|---|---|---|
DCABB | BAADB | DABBD | ABACD | AC |
二、填空题
- 后缀算式
9 2 3 + - 10 2 / -
的值为__________。中缀算式(3+4X)-2Y/3
对应的后缀算式为________________。 - 向一棵
B-树
插入元素的过程中,若最终引起树根结点的分裂,则新树比原树的高度___________。 - 在堆排序的过程中,对任一分支结点进行筛运算的时间复杂度为________,整个堆排序过程的时间复杂度为________。
- 设某无向图中顶点数和边数分别为 n 和 e,所有顶点的度数之和为d,则 e=_______。
- 设一组初始记录关键字序列为
(55,63,44,38,75,80,31,56)
,则利用筛选法建立的初始堆为___________________________。 - 设输入序列为
1、2、3
,则经过栈的作用后可以得到___________种不同的输出序列。 - 设哈夫曼树中共有
n
个结点,则该哈夫曼树中有________个度数为1
的结点。 - 设查找表中有
100
个元素,如果用二分法查找方法查找数据元素X
,则最多需要比较________次就可以断定数据元素X是否在查找表中。 - 设一组初始记录关键字序列
(k1,k2,……,kn)
是堆,则对i=1,2,…,n/2
而言满足的条件为_______________________________。 - 散列表中解决冲突的两种方法是_____________和_____________。
- 完全二叉树中第
5
层上最少有__________个结点,最多有_________个结点。 - 设连通图
G
中有n
个顶点e
条边,则对应的最小生成树上有___________条边。 - 设某顺序循环队列中有
m
个元素,且规定队头指针F
指向队头元素的前一个位置,队尾指针R
指向队尾元素的当前位置,则该循环队列中最多存储_______队列元素。 - 设需要对
5
个不同的记录关键字进行排序,则至少需要比较_____________次,至多需要比较_____________次。 - 设二叉排序树的高度为
h
,则在该树中查找关键字key
最多需要比较_________次。 - 设一棵
m叉树
的结点数为n
,用多重链表表示其存储结构,则该树中有_________个空指针域。 - 在一个长度为n的顺序表中删除第i个元素(0<=i<=n)时,需向前移动_________个元素
- 下面程序段的功能是实现二分查找算法,请在下划线处填上正确的语句。
struct record{int key; int others;};
int bisearch(struct record r[ ], int k)
{
int low=0,mid,high=n-1;
while(low<=high)
{
________________________________;
if(r[mid].key==k) return(mid+1); else if(____________) high=mid-1;else low=mid+1;
}
return(0);
}
- 设散列函数
H(k)=k mod p
,解决冲突的方法为链地址法。要求在下列算法划线处填上正确的语句完成在散列表hashtalbe
中查找关键字值等于k
的结点,成功时返回指向关键字的指针,不成功时返回标志0
。
typedef struct node {int key; struct node *next;} lklist;
void createlkhash(lklist *hashtable[ ])
{
int i,k; lklist *s;
for(i=0;i<m;i++)_____________________;
for(i=0;i<n;i++)
{
s=(lklist *)malloc(sizeof(lklist)); s->key=a[i];
k=a[i] % p; s->next=hashtable[k];_______________________;
}
}
- 下面程序段的功能是实现在二叉排序树中插入一个新结点,请在下划线处填上正确的内容。
typedef struct node{int data;struct node *lchild;struct node *rchild;}bitree;
void bstinsert(bitree *&t,int k)
{
if (t==0 ) {____________________________;t->data=k;t->lchild=t->rchild=0;}
else if (t->data>k) bstinsert(t->lchild,k);else__________________________;
}
- 下面程序段的功能是建立二叉树的算法,请在下划线处填上正确的内容。
typedef struct node{int data;struct node *lchild;________________;}bitree;
void createbitree(bitree *&bt)
{
scanf(“%c”,&ch);
if(ch=='#') ___________;else
{ bt=(bitree*)malloc(sizeof(bitree)); bt->data=ch; ________;createbitree(bt->rchild);}
}
三、应用题
-
画出向小根堆中加入数据
4, 2, 5, 8, 3
时,每加入一个数据后堆的变化。 -
设一组有序的记录关键字序列为
(13,18,24,35,47,50,62,83,90)
,查找方法用二分查找,要求计算出查找关键字62时的比较次数并计算出查找成功时的平均查找长度。 -
已知待散列的线性表为
(36,15,40,63,22)
,散列用的一维地址空间为[0..6]
,假定选用的散列函数是H(K)= K mod 7
,若发生冲突采用线性探查法处理,试:
①计算出每一个元素的散列地址并在下图中填写出散列表:
②求出在查找每一个元素概率相等情况下的平均查找长度。hash
0 1 2 3 4 5 6 key
-
画出广义表
LS=(( ) , (e) , (a , (b , c , d )))
的头尾链表存储结构。 -
设散列表的地址范围是
[ 0..9 ]
,散列函数为H(key)= (key 2 +2)MOD 9
,并采用链表处理冲突,请画出元素7、4、5、3、6、2、8、9
依次插入散列表的存储结构。 -
设散列表的长度为
8
,散列函数H(k)=k mod 7
,初始记录关键字序列为(25,31,8,27,13,68)
,要求分别计算出用线性探测法和链地址法作为解决冲突方法的平均查找长度。