数据结构C模拟卷子1讲解.docx
- 文档编号:5033016
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:9
- 大小:18.95KB
数据结构C模拟卷子1讲解.docx
《数据结构C模拟卷子1讲解.docx》由会员分享,可在线阅读,更多相关《数据结构C模拟卷子1讲解.docx(9页珍藏版)》请在冰豆网上搜索。
数据结构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 high--; v[low]=v[high]; while(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=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 if(! _Search(key,f,p)){//查找不成功,f是查找路径上的最后结点 s=newBSTNode s->data=e; s->lchild=s->rchild=NULL; if(! f) (1);//被插结点s为新的根结点 elseif(e (2);//被插结点s为左孩子 else (3);//被插结点s为右孩子 returntrue; } return(4);//树中已有关键字相同的结点,不再插入 } 参考答案 (1)newnode(val) (2)f->lchild=s (3)f->rchild=s (4)false
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构C 模拟卷子1讲解 数据结构 模拟 卷子 讲解