数据结构C++模拟卷子3.docx

上传人:b****5 文档编号:7366784 上传时间:2023-01-23 格式:DOCX 页数:11 大小:45.39KB
下载 相关 举报
数据结构C++模拟卷子3.docx_第1页
第1页 / 共11页
数据结构C++模拟卷子3.docx_第2页
第2页 / 共11页
数据结构C++模拟卷子3.docx_第3页
第3页 / 共11页
数据结构C++模拟卷子3.docx_第4页
第4页 / 共11页
数据结构C++模拟卷子3.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

数据结构C++模拟卷子3.docx

《数据结构C++模拟卷子3.docx》由会员分享,可在线阅读,更多相关《数据结构C++模拟卷子3.docx(11页珍藏版)》请在冰豆网上搜索。

数据结构C++模拟卷子3.docx

数据结构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*next;

};

设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(*visit)(constElemType&e));

void_InorderTraverse(BTNode*,void(*visit)(constElemType&e));

void_PostorderTraverse(BTNode*,void(*visit)(constElemType&e));

参考答案

//先序递归遍历二叉树

template

voidBinaryTree:

:

_PreorderTraverse(BTNode*T,void(*visit)(constElemType&e))

{

if(T){

visit(T->data);

_PreorderTraverse(T->lchild,visit);

_PreorderTraverse(T->rchild,visit);

}

}

//中序递归遍历二叉树

template

voidBinaryTree:

:

_InorderTraverse(BTNode*T,void(*visit)(constElemType&e))

{

if(T){

_InorderTraverse(T->lchild,visit);

visit(T->data);

_InorderTraverse(T->rchild,visit);

}

}

//后序递归遍历二叉树

template

voidBinaryTree:

:

_PostorderTraverse(BTNode*T,void(*visit)(constElemType&e))

{

if(T){

_PostorderTraverse(T->lchild,visit);

_PostorderTraverse(T->rchild,visit);

visit(T->data);

}

}

第3.2题.(主观题5分)

二叉树定义如课本。

请写出基于后序遍历思路的算法,求出二叉树的深度。

int_Depth(BTNode*);

参考答案

//求二叉树的深度

template

intBinaryTree:

:

_Depth(BTNode*T)

{

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&La);

参考答案

第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*p=head->next;

intk=1;

while(k

p=p->next;

k++;

}

e=p->data;

returntrue;

}//时间复杂度为O(n)

第3.5题.(主观题5分)

二叉树定义如课本。

以下是二叉树的前序递归遍历算法。

请参考该算法,写出复制二叉树的算法。

前序递归遍历算法:

//先序递归遍历二叉树

template

voidBinaryTree:

:

_PreorderTraverse(BTNode*T,void(*visit)(constElemType&e))

{

if(T){

visit(T->data);

_PreorderTraverse(T->lchild,visit);

_PreorderTraverse(T->rchild,visit);

}

}

复制子树T的函数原型:

template

BTNode*BinaryTree:

:

_Copy(BTNode*T)

参考答案

//复制一棵子树

template

BTNode*BinaryTree:

:

_Copy(BTNode*T)

{

if(T==NULL)

returnNULL;

BTNode*p;

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*T,void(*visit)(constElemType&e))

{

if(T){

_PostorderTraverse(T->lchild,visit);

_PostorderTraverse(T->rchild,visit);

visit(T->data);

}

}

删除子树T的算法的函数原型:

template

voidBinaryTree:

:

_Destroy(BTNode*&T);

参考答案

//销毁二叉链表形式的二叉树T

template

voidBinaryTree:

:

_Destroy(BTNode*&T)

{

if(T){

_Destroy(T->lchild);

_Destroy(T->rchild);

deleteT;

}

T=NULL;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1