数据结构C++模拟卷子3.docx
- 文档编号:7366784
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:11
- 大小:45.39KB
数据结构C++模拟卷子3.docx
《数据结构C++模拟卷子3.docx》由会员分享,可在线阅读,更多相关《数据结构C++模拟卷子3.docx(11页珍藏版)》请在冰豆网上搜索。
数据结构C++模拟卷子3
第1题.(复合题共计10分)单选题
第1.1题.(客观单选题1分)若将某一数据结构形式化定义为二元组(K,R),其中K是所有数据元素的有限集合,则R是K上()
操作的有限集合
映象的有限集合
类型的有限集合
关系的有限集合
第1.2题.(客观单选题1分)
单链表的查找算法时间复杂度是
O(n)
O
(1)
O(n2)
O(log2n)
第1.3题.(客观单选题1分)
栈的逻辑结构是
二叉树
线性
单链表
顺序表
第1.4题.(客观单选题1分)与线性结构的链接存贮不相符合的特性是()
便于插入、删除操作
存贮空间动态分配
需要连续的存贮空间
只能顺序查找
第1.5题.(客观单选题1分)
链结点定义为:
template
structLinkNode
{
ElemTypedata;
LinkNode
};
设p指向单链表中的一个结点,s指向待插入的结点,则下述程序段的功能是( )
s->next=p->next;
p->next=s;
结点*p与结点*s的数据域互换
在p所指结点之前插入s
在p所指结点之后插入s
在s所指结点之后插入p
第1.6题.(客观单选题1分)若进栈序列为1,2,3,4,5,6,且进栈和出栈操作可以穿插进行,则不可能出现的出栈序列是()
2,4,3,1,5,6
3,2,4,1,6,5
4,3,2,1,5,6
2,3,5,1,6,4
第1.7题.(客观单选题1分)用长度为m的数组作为循环队列Q的存储空间,m_front指向队头元素,m_rear指向队尾元素的下一个位置,则判定Q为空队列的条件是()
(m_rear-m_front)%m==1
m_front==m_rear
(m_rear-m_front)%m==m-1
m_front==(m_rear+1)%m
第1.8题.(客观单选题1分)在下列各棵二叉树中,( )是二叉排序树。
选D
第1.9题.(客观单选题1分)
在二叉树中,指针m_root指向根结点,p指向二叉树中某结点,则下列表达式的作用是:
判断空二叉树:
p==m_root
判断非树叶结点
p->lchild!
=NULL||p->rchild!
=NULL
判断树叶p->lchild==NULL||p->rchild==NULL
判断结点度为2p->lchild!
=NULL||p->rchild!
=NULL
第1.10题.(客观单选题1分)下列陈述中正确的是()
队列是操作被限制在两端的线性结构
二叉树是最多只有两个分支的树
层次遍历二叉树要使用栈
二叉树中序遍历能够得到有序的序列
第2题.(复合题共计50分)简答题
第2.1题.(主观题5分)设n为正整数,分析下面程序段中加下划线的语句的程序步数
利用大“O”记号给出其复杂度。
x=0;
for(i=1;i
for(j=1;j<=n-i;j++)
x++;
参考答案
总执行步数:
(n-1)+(n-2)+…+2+1=n(n-1)/2,
利用大“O”记号给出其复杂度:
T(n)=O(n(n-1)/2)=O(n2/2)=O(n2)
第2.2题.(主观题5分)为了提高检索效率,可使用二分法对一个线性结构的元素进行检索。
对给定的数据{15,17,18,22,35,51,60,88,93},用二分法查找18,写出查找过程;并求出其成功的平均查找长度ASL。
参考答案
①low=0,high=9,mid=(low+high)/2=(0+9)/2=4
18因此high=mid=4;
②mid=(low+high)/2=(0+4)/2=2
18==data[mid]=18,因此查找成功。
查找判定树:
成功的平均查找长度ASL=(1*1+2*2+3*4+4*2)/9=25/9。
第2.3题.(主观题5分)已知某二叉数的中序遍历序列为bghicdefa,后序遍历序列为ihgdcfeba,请给出该二叉树的形态,并给出前序遍历该二叉树的序列。
参考答案
该二叉树的形态为图示:
前序遍历该二叉树的序列为:
abecghidf
第2.4题.(主观题5分)已知一个无向图的顶点集为{a,b,c,d,e},其邻接矩阵如下所示
01001
10010
00011
01101
10110
(1)画出该图;
(2)从顶点a出发对该图进行深度优先遍历和宽度优先遍历,写出相应的遍历序列。
参考答案
(1)图结构:
(2)
从顶点a出发进行深度优先遍历,相应的遍历序列为:
abdce
从顶点a出发进行宽度优先遍历,相应的遍历序列为:
abedc
第2.5题.(主观题5分)对于课本图5.52,写出从V3出发的深度与宽度优先遍历序列。
参考答案
深度优先:
v3v2v1v6v5v4
宽度优先:
v3v2v5v1v6v4
第2.6题.(主观题5分)把序列{24,15,38,27,76,130,121}依次插入到二叉排序树,请画出最后的图,并求出等概率情况下查找成功的平均查找长度。
参考答案
图:
略
20/7
第2.7题.(主观题5分)把序列{12,5,9,20,6,31,24}用二路归并算法进行排序,请问要进行多少趟排序?
每趟排序结果是什么?
参考答案
3趟
5,12,9,20,6,31,24
5,9,12,20,6,24,31
5,6,9,12,20,24,31
第2.8题.(主观题5分)请写出对序列{54,38,96,23,15,72,60,45,83}用直接插入排序算法进行排序过程的每趟结果。
参考答案
略。
第2.9题.(主观题5分)请写出对序列{54,38,96,23,15,72,60,45,83}用直接选择法排序算法进行排序的每趟过程。
参考答案
略
第2.10题.(主观题5分)
把序列{63,55,90,58,70,42,10,45,83,67}依次插入到二叉排序树中,画出最后的二叉排序树。
删除结点55后,二叉排序树的形态有何变化?
再把55插入,二叉排序树的形态又是怎样的?
请画图表示。
参考答案
略
第3题.(复合题共计30分)算法设计题
第3.1题.(主观题5分)
二叉树定义如课本。
请写出二叉树前序、中序、后序遍历的递归算法。
参考函数原型:
void_PreorderTraverse(BTNode
void_InorderTraverse(BTNode
void_PostorderTraverse(BTNode
参考答案
//先序递归遍历二叉树
template
voidBinaryTree
:
_PreorderTraverse(BTNode
{
if(T){
visit(T->data);
_PreorderTraverse(T->lchild,visit);
_PreorderTraverse(T->rchild,visit);
}
}
//中序递归遍历二叉树
template
voidBinaryTree
:
_InorderTraverse(BTNode
{
if(T){
_InorderTraverse(T->lchild,visit);
visit(T->data);
_InorderTraverse(T->rchild,visit);
}
}
//后序递归遍历二叉树
template
voidBinaryTree
:
_PostorderTraverse(BTNode
{
if(T){
_PostorderTraverse(T->lchild,visit);
_PostorderTraverse(T->rchild,visit);
visit(T->data);
}
}
第3.2题.(主观题5分)
二叉树定义如课本。
请写出基于后序遍历思路的算法,求出二叉树的深度。
int_Depth(BTNode
参考答案
//求二叉树的深度
template
intBinaryTree
:
_Depth(BTNode
{
if(!
T)
return0;
inth1,h2;
h1=_Depth(T->lchild);
h2=_Depth(T->rchild);
returnh1>h2?
h1+1:
h2+1;
}
第3.3题.(主观题5分)
带头结点的单链表定义如课本。
请运用单链表的基本操作函数,实现对一个单链表La的数据逆置操作。
template
voidreverse(LinkList
参考答案
第3.4题.(主观题5分)
带头结点的单链表定义如课本。
现需要取得第i个结点的值并存入变量e中,如果第i个结点不存在,返回flase,否则返回true。
请写出算法。
参考原型:
boolGetElem(ElemType&,int)const;
参考答案
//返回单链表中序号为i的数据元素(i的合法值为1≤i≤len)
template
boolLinkList
:
GetElem(ElemType&e,inti)const
{
if(i<1||i>len)
returnfalse;
LinkNode
intk=1;
while(k
p=p->next;
k++;
}
e=p->data;
returntrue;
}//时间复杂度为O(n)
第3.5题.(主观题5分)
二叉树定义如课本。
以下是二叉树的前序递归遍历算法。
请参考该算法,写出复制二叉树的算法。
前序递归遍历算法:
//先序递归遍历二叉树
template
voidBinaryTree
:
_PreorderTraverse(BTNode
{
if(T){
visit(T->data);
_PreorderTraverse(T->lchild,visit);
_PreorderTraverse(T->rchild,visit);
}
}
复制子树T的函数原型:
template
BTNode
:
_Copy(BTNode
参考答案
//复制一棵子树
template
BTNode
:
_Copy(BTNode
{
if(T==NULL)
returnNULL;
BTNode
p=newBTNode
p->data=T->data;
p->lchild=_Copy(T->lchild);
p->rchild=_Copy(T->rchild);
returnp;
}
第3.6题.(主观题5分)
二叉树定义如课本。
后序递归遍历算法如下。
请写出基于后遍历思路的删除子树T的算法。
//后序递归遍历二叉树
template
voidBinaryTree
:
_PostorderTraverse(BTNode
{
if(T){
_PostorderTraverse(T->lchild,visit);
_PostorderTraverse(T->rchild,visit);
visit(T->data);
}
}
删除子树T的算法的函数原型:
template
voidBinaryTree
:
_Destroy(BTNode
参考答案
//销毁二叉链表形式的二叉树T
template
voidBinaryTree
:
_Destroy(BTNode
{
if(T){
_Destroy(T->lchild);
_Destroy(T->rchild);
deleteT;
}
T=NULL;
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 C+ 模拟 卷子