数据结构模拟题目
- 格式:doc
- 大小:764.00 KB
- 文档页数:6
模拟题1
一、填空题
1. 数据结构的基本单位是 。
2. 从存储结构上讲,线性表的表示可分为 和链接两类。
3. 设顺序表长度为n,则删除第i(i = 1, 2, …, n)个元素需要移动 个元素。
4. 后缀表达式20 10 5 * + 49 7 / - 的值为 。
5. 一棵二叉树中,若叶结点的个数为2005,则度为2的结点个数为 。
6. 遍历一棵二叉搜索树,将得到一个以关键字值递增排列的有序序列。
7. 5阶B树的高度为2时,树中元素个数最少为 。
8. 若有向图的拓扑排序不能输出所有的顶点,则该有向图存在 。
二、单项选择题
1. 若用单链表来表示队列,则选用 最好。 ( )
A. 只带尾指针的非循环链表 B. 只带尾指针的循环链表
C. 只带头指针的非循环链表 D. 只带头指针的循环链表
2. 设有一个二维数组A[m][n]按行优先顺序存储,假设A[0][0]的地址是644,A[2][2]的地址是676,每个元素占1个单元,则A[4][5]的地址是 。
( )
A. 672 B. 626 C. 709 D. 724
3. 森林的后序遍历等价于其对应二叉树的 遍历。 ( )
A. 先序 B. 中序 C. 后序 D. 按层
4. 具有10个顶点的连通图的深度优先搜索生成树,其边的数目为 。 ( )
A. 9 B. 10 C. 11 D. 8
5. 下列说法错误的是 。 ( )
A. 已知先序和中序遍历序列能唯一确定一棵二叉树
B. 已知后序和中序遍历序列能唯一确定一棵二叉树
C. 已知先序和后序遍历序列能唯一确定一棵二叉树
D. 已知先序遍历序列能唯一确定一棵二叉搜索树
6. 下列排序算法中,第一趟排序后能确定某个元素最终位置的算法是 。 ( )
A. 直接插入排序 B. 快速排序 C. 两路合并排序 D. 以上均不对
7. 散列表采用线性探查法解决冲突会出现 现象。 ( )
A. 二次聚集 B. 探查失败 C. 假溢出 D. 线性聚集
三、简答题
1. 给定稀疏矩阵(如下图所示),请写出该矩阵执行快速转置时用到的num[]和k[]的值。 012940300008030020100240600180007
2. 表长为11的散列表采用双散列法解决冲突,散列函数 h1(key)=key % 11,h2(key)=key %
9 +1。已知散列表目前如下:
下标 0 1 2 3 4 5 6 7 8 9
10
关键字 12 25 70
请问在该散列表中再依次插入关键字80、19、41后,散列表的情况如何?
3. 写出下图所有可能的拓扑序列。
12345
4. 使用普里姆(Prim)算法以A为源点,构造下图的最小代价生成树,要求画出构造过程中各步的结果。
CBFEAD101510685781212
5. 以37,45,25,14,91,43,27,26为输入序列构建二叉搜索树,
⑴ 画出该二叉搜索树;
⑵ 画出该二叉搜索树对应的森林。
6. 元素序列(60,21,19,7,15,28,4)按两路合并算法进行排序。
⑴ 写出各趟排序结果。
⑵ 两路合并排序平均情况下的渐近时间复杂度为多少?
7. 下图是一个三阶B-树,请画出依次删除50、10之后B-树。
5020 3560 7065 675575251036
8. 设字符集合S={A,E,I,O,U},各字符的使用频率为W={20,10,17,5,25}。
⑴ 画出哈夫曼树;(构建新树时,新树根的左子树根的权值小于等于右子树根的权值,新树根的值是左、右子树根结点权值之和)
⑵ 求该哈夫曼树的带权路径长度。
四、程序填空题
下面的程序是顺序表的对半搜索的迭代算法,请补充完整。
template
int SeqList::BiSearch1(const T& x) const
{
int i, low=1,high=length;
while (low<=high)
{
i= ⑴ ;
if (x
else if (x>elements[i-1]) low=i+1;
else ⑶ ;
}
return 0;
}
五、程序阅读题
下面的程序是二叉树类的某个成员函数
template
void BTree::A(BTNode *p)
{ BTNode *q;
if (p)
{
q = p->lchild;
p->lchild = p->rchild;
p->rchild = q;
A(p->lchild);
A(p->rchild);
}
}
⑴ 请说明该成员函数的作用是什么?
⑵ 若指针p的指向如右上图所示,请画出执行该函数后的二叉树?
六、程序设计题(10分)
在单链表类SingleList中增加一个成员函数Print,输出单链表上所有大于x的元素。
(提示:单链表上的元素不是有序的;只要写出成员函数即可,注意成员函数的书写格式。)
1254367p模拟题2
一、填空题
1. 数据的逻辑结构是指 。
2. AOV网中的领先关系是一种拟序关系,它具有传递性和 。
3. 队列中,允许插入元素的一端称为 。
4. 后缀表达式5 3 2 * 3 + 3 / + 的值为 。
5. 一棵有1927个结点的二叉树,所有结点的度之和为 。
6. 具有100个结点的完全二叉树的高度是 。
7. 5阶B树中非失败结点的元素个数最多为 。
8. 10个顶点的无向图中有4条边,若采用邻接矩阵表示,则矩阵中的非0元素个数
是 个。
二、单项选择题
1. 线性表采用链表存储结构的特点是 。 ( )
A. 结点的地址必须连续 B. 可以随机存取
C. 插入、删除操作不必移动元素 D. 需要事先估计所需存储空间
2. 设1、2、3三个元素依次进栈,则 不可能是其出栈序列。 ( )
A. 1,2,3 B. 2,3,1 C. 3,2,1 D. 3,1,2
3. 对半搜索算法的条件是 。 ( )
A. 顺序存储,元素有序 B. 顺序存储,元素无序
C. 链接存储,元素有序 D. 链接存储,元素无序
4. 高度为5的二叉树上,最多有 个结点。 ( )
A. 5 B. 16 C. 31 D. 32
5. 二叉搜索树中, 是关键字值最大的结点。 ( )
A. 先序遍历序列中的最后一个结点 B. 中序遍历序列中的最后一个结点
C. 后序遍历序列中的最后一个结点 D. 按层遍历序列中的最后一个结点
6. 有n个顶点的有向图中最多有 条边。 ( )
A. n B. n(n-1) C. n(n+1) D. n2
7. 下列算法中, 在最坏情况下的渐近时间复杂度不高于O(nlog2n)。( )
A. 简单选择排序 B. 直接插入排序 C. 快速排序 D. 两路合并排序
三、简答题
1. 画出对长度为9的有序表进行对半搜索的二叉判定树,并求等概率搜索时成功搜索情况下的平均搜索长度。
2. 设有向图的邻接表如下所示,请写出该图的邻接矩阵,并且求出各个顶点的出度。 0^0^132434550^11^42^0^
3. 设有向图如下图所示,请画出该图所有的强连通分量。
246531
4. 使用普里姆(Prim)算法以A为源点,构造下图的最小代价生成树,要求画出构造过程中各步的结果。
ACBEFD75216319
5. 设一棵二叉树的先序遍历序列是ABDCEF,中序遍历序列是BDAECF,请画出该二叉树。
6. 已知二叉树如下图所示,请画出该二叉树对应的森林。
ABCDFGIEH
7. 下图是一个3阶B-树,请画出插入37之后的B-树,再画出在此基础上插入38后的B树。
20 35251936
8. 设字符集合S={A,B,C,D,E},各字符的使用频率为W={5,7,8,9,10}。
⑴ 画出哈夫曼树;(构建新树时,新树根的左子树根的权值小于等于右子树根的权值)
⑵ 求该哈夫曼树的带权路径长度。
四、程序填空题
下面是快速排序的程序,请补充完整。
template void QSort(T A[], int left, int right)
{
int i,j;
if ( left
{
i=left; j=right+1;
do
{
do {i++;} while ( );
do {j--;} while (A[j]>A[left]);
if (i
}while (i
Swap (A[left], );
QSort (A, left, j-1);
QSort (A, j+1, );
}
}
五、程序阅读题
下面的程序是单链表类的某个成员函数
template
void SingleList::A()
{
Node *p=first,*q;
first=NULL;
while (p)
{
q=p->link;
p->link=first;
first=p;
p=q;
}
}
⑴ 请说明该成员函数的作用是什么?
⑵ 若有单链表结构如右上图所示,请画出执行该函数后的单链表结构。
六、程序设计题
在带表头结点的单链表类HeaderList中增加一个成员函数
bool HeaderList::Min(T &result) const