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

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

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

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

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

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

202

001

211

算法策略:

动态规划

第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

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时,该函数调用后又能够得到哪些信息(数据)?

boolLinkList:

GetElem(ElemType&

e,inti)const

1||i>

len)

returnfalse;

next;

intk=1;

while(k<

i){

p=p->

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<

high){

high&

v[high]>

=pivot)

high--;

v[low]=v[high];

pivot>

=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分)

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

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

rchild)

rchild);

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

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

第4.1题.(主观题10分)

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

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

template<

classElemType>

//声明一个类模板

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个结点的顺序空间,构造一个空的顺序栈

SqStack<

ElemType>

SqStack(intm)

m_top=0;

m_base=newElemType[m];

m_size=m;

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

~SqStack()

if(m_base!

=NULL)delete[]m_base;

//清空栈

voidSqStack<

Clear()

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

boolSqStack<

Empty()const

returnm_top==0;

//求栈中元素的个数

intSqStack<

Length()const

returnm_top;

//取栈顶元素的值。

先决条件是栈不空

ElemType&

SqStack<

Top()const

returnm_base[m_top-1];

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

插入e到栈顶

Push(constElemType&

e)

if(m_top>

=m_size){//若栈满,则扩展空间

ElemType*newbase;

newbase=newElemType[m_size+10];

//扩大10个元素空间

for(intj=0;

j<

m_top;

j++)//复制元素到新空间

newbase[j]=m_base[j];

delete[]m_base;

//释放原空间

m_base=newbase;

//重置基地址

m_size+=10;

m_base[m_top++]=e;

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

Pop()

m_top--;

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

函数原型:

voidboolLinkList<

Append(constElemType&

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

template<

boolLinkList<

LinkNode<

*q;

q=newLinkNode<

;

q->

data=e;

tail->

next=q;

//尾部插入q结点

tail=q;

++len;

//表长增1

第4.3题.(主观题10分)

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

请在横线上完成算法。

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

//否则返回false。

classElemType,classKeyType>

boolBST<

ElemType,KeyType>

Insert(constElemType&

e,constKeyType&

key)

BSTNode<

ElemType,KeyType>

*p,*s,*f;

if(!

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

s=newBSTNode<

;

s->

lchild=s->

rchild=NULL;

f)

(1);

//被插结点s为新的根结点

elseif(e<

f->

data)

(2);

//被插结点s为左孩子

else

(3);

//被插结点s为右孩子

return(4);

//树中已有关键字相同的结点,不再插入

(1)newnode(val)

(2)f->

lchild=s

(3)f->

rchild=s

(4)false

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

当前位置:首页 > 考试认证 > 从业资格考试

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

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