数据结构C模拟卷子1讲解.docx

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

数据结构C模拟卷子1讲解.docx

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

数据结构C模拟卷子1讲解.docx

数据结构C模拟卷子1讲解

第1题.(复合题共计20分)选择题

第1.1题.(主观题5分)

数据的逻辑结构用二元组表示为:

B=(K,R);

K={K1,K2,K3,K4,K5,K6};R={,,,,}

这组数据的逻辑结构是(A),开始结点是(B),终端结点是(C)。

顺序方式存储这批数据时称为(D),链式存储时称为(E)。

如果对其操作加以限制,只能在一端插入和删除元素,则此时可称该结构为(F);规定只能在一端插入元素和在另一端删除元素,则该结构又称为(G)。

A、线性结构非线性结构图树

B、K1K2K5K4

C、K2K3K4K6

D、散列表链表顺序表有序表

E、散列表链表顺序表有序表

F、队列栈双端栈堆

G、队列栈双端栈堆

参考答案

A、线性结构B、K2C、K6D、顺序表E、链表F、栈G、队列

第1.2题.(客观单选题5分)执行下列程序段时,S语句执行的次数为:

for(intk=1;k<=n;k++)

for(intj=1;j<=k;j++)

S;

(n2)

(n2/2)

n(n+1)

n(n+1)/2

第1.3题.(客观单选题5分)在一个长度为N的顺序表中删除第m个元素(1<=m<=N)时,需向前移动的元素个数是:

N

m

N-m

N-m-1

第1.4题.(客观单选题5分)

存储密度是指存储空间的利用率,即用于存储数据信息的存储量与整个结构所占总存储量之比。

在下列结构中,存储密度为1的结构是:

顺序表(向量)

单链表

散列表

二叉链表

第2题.(复合题共计20分)简答题

第2.1题.(主观题5分)对规模为N的数据进行排序,各种算法的时间复杂度均是N的函数。

在已经学习的排序算法中,列举出时间复杂度分别为N2和Nlog2N的排序算法各两种,并对时间复杂度为Nlog2N的两种排序算法的空间复杂度进行比较。

参考答案

插入、选择、起泡:

O(N2)

快速、二路归并排序:

O(Nlog2N)

快速排序的空间复杂度O(Nlog2N)

二路归并排序的空间复杂度O(N)

第2.2题.(主观题5分)对规模为N的数据使用二分法检索,请说明检索的时间复杂度及该算法对数据结构的要求。

参考答案

二分法检索的时间复杂度O(log2N),要求数据结构是有序的顺序表。

第2.3题.(主观题5分)已知二叉树的前序遍历序列是abdgcefh,中序遍历序列是dgbaechf,请画图表示该二叉树,并写出它的后序遍历序列。

参考答案

gdbehfca

第2.4题.(主观题5分)

一个有向带权图的邻接矩阵如下,用Floyd算法求解各顶点间最短路径,请写出能表示各顶点间最短路径的最终邻接矩阵。

并写出初始路径矩阵及求解过程的路径记录矩阵,并请说明Floyd算法的求解算法策略属于哪一类方法。

0411

602

3∞0

参考答案

最终结果相阾矩阵:

046

502

370

路径矩阵:

000

111

2-12

000

111

202

001

111

202

001

211

202

算法策略:

动态规划

第3题.(复合题共计30分)算法理解

第3.1题.(主观题6分)

已知带头结点的单链表类模板定义如课本。

请说明下列算法的功能。

对于数据序列{93,100,5,102,19,21,86,27},经过下列算法处理后,得到的数据集合是什么?

template

voidLinkList:

:

process()

{

LinkNode*p=head->next,*q;

while(p){

q=p->next;

deletep;

p=q;

}

tail=head;

head->next=NULL;

len=0;

}

参考答案

清除带头结点的单链表中的数据结点。

处理结果的数据集合是空集{}

第3.2题.(主观题6分)已知顺序表类模板定义如课本。

请说明下列算法的功能是什么?

对于数据序列{93,100,5,102,19,21,86,27},分别用不同实参调用下列算法时,返回值分别是什么?

(1)实参是19

(2)实参是80

template

intSqList:

:

LocateElem(constElemType&e)const{

ElemType*p=elem;

inti=1;

while(i<=len&&*p!

=e){

p++;i++;

}

if(i<=len)returni;

return0;

}

参考答案

在顺序表中查找实参e是否存在,如果存在,返回e所在位置,如果不存在,返回0。

(1)返回5

(2)返回0

第3.3题.(主观题6分)

已知带头结点的单链表类模板定义如课本,下列算法是其成员函数之一。

请问:

(1)调用该函数时,需要实参数据几个?

e有什么作用?

i又有什么作用?

(2)该函数的返回值有哪几种?

每种返回值都代表什么意义?

(3)对于数据序列{93,100,5,102,19,21,86,27},当实参i是6时,该函数调用后能够得到哪些信息(数据)?

分别表示什么?

当实参i是10时,该函数调用后又能够得到哪些信息(数据)?

分别表示什么?

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;

}

参考答案

(1)调用该函数时,需要实参数据2个。

查找成功时,e用于存储数据序列中第i个数据的值。

i表示要查找的数据所在的位置。

(2)该函数的返回值有两种:

true和false,true表示查找成功,false表示查找失败。

(3)对于数据序列{93,100,5,102,19,21,86,27},当实参i是6时,该函数调用后能够得到两个信息,一个是查找成功的标志——返回值true,另一个是在数据序列的第6个位置里面的数据21。

当实参i是10时,该函数调用后只能够得到返回值false,表示查找不成功。

第3.4题.(主观题6分)

请说明一个顺序表v经过下列函数处理后,其数据排列上有何特点,并写出该结果序列。

设v={16,12,30,28,2,10,20,6,18}

template

intprocess(ElemTypev[],intlow,inthigh)

{

ElemTypepivot=v[low];

while(low

while(low=pivot)

high--;

v[low]=v[high];

while(low=v[low])

low++;

v[high]=v[low];

}

v[low]=pivot;

returnlow;

}

参考答案

处理后v的排列为:

6,12,10,2,16,28,20,30,18。

以16为标准把数据进行一次划分,16前的元素都比16小,16后的元素比16大。

第3.5题.(主观题6分)

二叉树及队列定义如课本,请说明下列函数的功能。

template

voidBinaryTree:

:

process(void(*visit)(constElemType&e)){

queue*>Q;

if(m_root)

Q.push(m_root);

while(!

Q.empty()){

BTNode*p;

p=Q.front();

Q.pop();

visit(p->data);

if(p->lchild)

Q.push(p->lchild);

if(p->rchild)

Q.push(p->rchild);

}

}

参考答案

按层次遍历并输出二叉树的结点

第4题.(复合题共计30分)算法设计-2001

第4.1题.(主观题10分)

栈是一种常用的数据结构,以下是顺序栈SqStack的定义。

请写出这个栈的成员函数的实现。

template//声明一个类模板

classSqStack//顺序栈类

{

public:

SqStack(intm);//构造函数

~SqStack();//析构函数

voidClear();//清空栈

boolEmpty()const;//判栈空

intLength()const;//求长度

ElemType&Top()const;//取栈顶元素

voidPush(constElemType&e);//入栈

voidPop();//出栈

private:

ElemType*m_base;//基地址指针

intm_top;//栈顶指针

intm_size;//向量空间大小

};

参考答案

//构造函数,分配m个结点的顺序空间,构造一个空的顺序栈

template

SqStack:

:

SqStack(intm)

{

m_top=0;

m_base=newElemType[m];

m_size=m;

}

//析构函数,将栈结构销毁

template

SqStack:

:

~SqStack()

{

if(m_base!

=NULL)delete[]m_base;

}

//清空栈

template

voidSqStack:

:

Clear()

{

m_top=0;

}

//若栈为空,则返回true,否则返回false

template

boolSqStack:

:

Empty()const

{

returnm_top==0;

}

//求栈中元素的个数

template

intSqStack:

:

Length()const

{

returnm_top;

}

//取栈顶元素的值。

先决条件是栈不空

template

ElemType&SqStack:

:

Top()const

{

returnm_base[m_top-1];

}

//入栈,若栈满,则先扩展空间。

插入e到栈顶

template

voidSqStack:

:

Push(constElemType&e)

{

if(m_top>=m_size){//若栈满,则扩展空间

ElemType*newbase;

newbase=newElemType[m_size+10];//扩大10个元素空间

for(intj=0;j

newbase[j]=m_base[j];

delete[]m_base;//释放原空间

m_base=newbase;//重置基地址

m_size+=10;

}

m_base[m_top++]=e;

}

//出栈,弹出栈顶元素。

先决条件是栈不空

template

voidSqStack:

:

Pop()

{

m_top--;

}

第4.2题.(主观题10分)已知有一带头结点的单链表,请写出操作Append的实现,该操作是在单链表的最后插入一个值为e的结点。

函数原型:

voidboolLinkList:

:

Append(constElemType&e);

参考答案

//在链表linkList的末尾插入新的元素e

template

boolLinkList:

:

Append(constElemType&e)

{

LinkNode*q;

q=newLinkNode;

q->data=e;

tail->next=q;//尾部插入q结点

tail=q;

tail->next=NULL;

++len;//表长增1

returntrue;

}

第4.3题.(主观题10分)

已知二叉排序树类定义如课本,下列函数向二叉排序树插入一个新结点,当结点已经存在时,不插入。

请在横线上完成算法。

//当二叉排序树m_root中不存在关键字等于key的数据元素时,插入e并返回true,

//否则返回false。

template

boolBST:

:

Insert(constElemType&e,constKeyType&key)

{

BSTNode*p,*s,*f;

if(!

_Search(key,f,p)){//查找不成功,f是查找路径上的最后结点

s=newBSTNode;

s->data=e;

s->lchild=s->rchild=NULL;

if(!

f)

(1);//被插结点s为新的根结点

elseif(edata)

(2);//被插结点s为左孩子

else

(3);//被插结点s为右孩子

returntrue;

}

return(4);//树中已有关键字相同的结点,不再插入

}

参考答案

(1)newnode(val)

(2)f->lchild=s

(3)f->rchild=s

(4)false

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

当前位置:首页 > 高等教育 > 军事

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

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