数据结构课程本科期末针对性训练份含标准答案g.docx
- 文档编号:26166977
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:36
- 大小:35.72KB
数据结构课程本科期末针对性训练份含标准答案g.docx
《数据结构课程本科期末针对性训练份含标准答案g.docx》由会员分享,可在线阅读,更多相关《数据结构课程本科期末针对性训练份含标准答案g.docx(36页珍藏版)》请在冰豆网上搜索。
数据结构课程本科期末针对性训练份含标准答案g
数据结构课程(本科)期末针对性训练(份含标准答案)(g)
————————————————————————————————作者:
————————————————————————————————日期:
数据结构课程(本科)期末针对性训练
训练第一套
一、单项选择题,在括号内填写所选择的标号(每小题2分,共18分)
1.若需要利用形参直接访问实参,则应把形参变量说明为()参数。
A.指针B.引用C.传值D.常值
2.在二维数组中,每个数组元素同时处于()个向量中。
A.0B.1C.2D.n
3.已知单链表A长度为m,单链表B长度为n,它们分别由表头指针所指向,若将B整体连接到A的末尾,其时间复杂度应为()。
A.O
(1)B.O(m)C.O(n)D.O(m+n)
4.假定一个链式队列的队头和队尾指针分别为front和rear,则判断队空的条件为()。
A.front==rearB.front!
=NULL
C.rear!
=NULLD.front==NULL
4.若让元素1,2,3依次进栈,则出栈次序不可能出现()种情况。
A.3,2,1B.2,1,3C.3,1,2D.1,3,2
6.在一棵高度为5(假定树根结点的高度为0)的完全二叉树中,所含结点个数至少等于()。
A.16B.64C.31D.32
7.向具有n个结点的二叉搜索树中插入一个结点的时间复杂度大致为()。
A.O
(1)B.O(log2n)C.O(n)D.O(nlog2n)
8.具有n个顶点的有向图最多可包含有()条有向边。
A.n-1B.nC.n(n-1)/2D.n(n-1)
9.图的广度优先搜索类似于树的()遍历。
A.先根B.中根C.后根D.层次
二、填空题,在横线处填写合适的内容(每小题2分,共14分)
1.链表只适用于____________查找。
2.设双向循环链表中每个结点的结构为(data,llink,rlink),则结点*p的前驱结点的地址为__________。
3.在一个链式队列中,若队头指针与队尾指针的值相同,则表示该队列至多有________个结点。
4.假定一棵树的广义表表示为a(b,c,d(e,f),g(h)),则结点f的层数为_________。
假定树根结点的层数为0。
5.从一棵二叉搜索树中搜索一个元素时,若给定值大于根结点的值,则需要向根的________继续搜索。
6.每次从第i至第n个元素中顺序挑选出一个最小元素,把它交换到第i个位置,此种排序方法叫做_____________排序。
7.快速排序在最坏情况下的时间复杂度为____________。
三、判断题,在每小题前面打对号表示正确或打叉号表示错误(每小题2分,共14分)
1.数据的逻辑结构与数据元素本身的内容和形式无关。
2.使用三元组表示稀疏矩阵中的非零元素能节省存储空间。
3.在一棵二叉树中,假定每个结点只有左子女,没有右子女,则对它分别进行前序遍历和按层遍历时具有相同的结果。
4.能够在链接存储的有序表上进行折半搜索,其时间复杂度与在顺序存储的有序表上相同。
5.邻接表表示只能用于有向图的存储,邻接矩阵对于有向图和无向图的存储都适用。
6.在索引顺序结构上实施分块搜索,在等概率情况下,其平均搜索长度不仅与子表个数有关,而且与每一个子表中的对象个数有关。
7.向一棵B树插入关键码的过程中,若最终引起树根结点的分裂,则新树比原树的高度减少1。
四、运算题(每小题6分,共30分)
1.假定一棵二叉树广义表表示为a(b(c(,g)),d(e,f)),分别写出对它进行先序、中序和后序遍历的结果。
先序:
中序:
后序:
2.有7个带权结点,其权值分别为3,7,8,2,6,10,14,试以它们为叶子结点生成一棵霍夫曼树,求出该树的带权路径长度。
带权路径长度:
3.已知图G=(V,E),其中
V={a,b,c,d,e},
E={,,
在该图的邻接表表示中,每个顶点单链表各有多少个边结点。
顶点:
abcde
边结点数:
4.已知一个AOV网的顶点集V和边集G分别为:
V={0,1,2,3,4,5,6,7};
E={<0,2>,<1,3>,<1,4>,<2,4>,<2,5>,<3,6>,<3,7>,<4,7>,<5,7>,<6,7>};
若存储它采用邻接表,并且每个顶点邻接表中的边结点都是按照终点序号从小到大的次序链接的,则按主教材中介绍的进行拓扑排序的算法,写出得到的拓扑序列。
拓扑序列:
5.已知有一个数据表为{30,16,20,15,38,12,44,53,46,18,26,86},给出进行归并排序的过程中每一趟排序后的数据表变化。
(0)[301620153812445346182686]
(1)
(2)
(3)
(4)
五、算法分析题(每小题6分,共12分)
1.该算法功能为:
从表头指针为la的、按值从小到大排列的有序链表中删除所有值相同的多余元素,并释放被删结点的动态存储空间。
阅读算法,在划有横线的上面填写合适的内容。
voidpurge_linkst(ListNode*&la)
{
ListNode*p,*q;
if(la==NULL)return;
q=la;p=la->link;
while(p){
if(p->data>q->data){q=p;p=p->link;}
else{
q->link=____________;
delete(p);
p=____________;
}
}
}
2.已知二叉树中的结点类型BinTreeNode定义为:
structBinTreeNode{ElemTypedata;BinTreeNode*left,*right;};
其中data为结点值域,left和right分别为指向左、右子女结点的指针域。
下面函数的功能是从二叉树BT中查找值为X的结点,若查找成功则返回结点地址,否则返回空。
阅读算法,在划有横线的上面填写合适的内容。
BinTreeNode*BTF(BinTreeNode*BT,ElemTypex)
{
if(BT==NULL)NULL;
else{
if(BT->data==x)____________;
else{
BinTreeNode*t;
if(t=BTF(BT->left,x))returnt;
if(t=____________________)returnt;
returnNULL;
}
}
}
六、算法设计题(每小题6分,共12分)
1.Q是一个由其队尾指针和队列长度标识的循环队列,请写出插入一个元素的算法。
structCyclicQueue//循环队列定义
{
ElemTypeelem[M];//M为已定义过的整型常量
intrear;//rear指向队尾元素的后一个位置
intlength;//length指示队列中元素个数
};
boolEnCQueue(CyclicQueue&Q,ElemTypex);
//Q是一个循环队列,若队列不满,则将x插入并返回true;否则返回false。
//在下面写出该函数的函数体
2.已知二叉搜索树中的结点类型BinTreeNode定义为:
structBinTreeNode{ElemTypedata;BinTreeNode*left,*right;};
其中data为结点值域,left和right分别为指向左、右子女结点的指针域。
参数BST指向一棵二叉搜索树的根结点。
试根据下面的函数声明编写一个递归算法,向BST树中插入值为item的结点,要求若树中不存在item结点则进行插入并返回1表示插入成功,若树中已存在item结点则不插入并返回0表示插入失败。
intInsert(BinTreeNode*&BST,constElemType&item);
答案供参考
一、单项选择题,在括号内填写所选择的标号(每小题2分,共18分)
1.B2.C3.B4.D5.C
6.D7.B8.D9.D
二、填空题,在横线处填写合适内容(每小题2分,共14分)
1.顺序2.p->llink3.14.2
5.右子树6.直接选择7.O(n2)
三、判断题,在每小题前面打对号表示正确或打叉号表示错误(每小题2分,共14分)
1.对2.对3.对4.错5.错6.对7.错
四、运算题(每小题6分,共30分)
1.先序:
a,b,c,g,d,e,f//2分
中序:
c,g,b,a,e,d,f//2分
后序:
g,c,b,e,f,d,a//2分
2.带权路径长度:
131
3.评分标准:
每个数据对给1分,全对给6分。
顶点:
abcde
边结点数:
11212
4.评分标准:
若与答案完全相同得6分,若仍为一种拓扑序列则得3分,其他则酌情处理。
拓扑序列:
1,3,6,0,2,5,4,7
5.分步给分
(0)[301620153812445346182686]
(1)[1630][1520][1238][4453][1846][2686]//1分
(2)[15162030][12384453][18264686]//1分
(3)[1215162030384453][18264686]//2分
(4)[121516182026303844465386]//2分
五、算法分析题(每小题6分,共12分)
1.p->link、q->link//每空3分
2.returnBT、BTF(BT->right,x)//每空3分
六、算法设计题(每小题6分,共12分)
评分标准:
根据编程完整程度酌情给分。
1.boolEnCQueue(CyclicQueue&Q,ElemTypex);
{
if(Q.length==M)returnfalse;//1分
Q.elem[Q.rear]=x;//2分
Q.rear=(Q.rear+1)%M;//4分
Q.length++;//5分
returntrue;//6分
}
2.intInsert(BinTreeNode*&BST,constElemType&item)
{
if(BST==NULL){
BinTreeNode*p=newBinTreeNode;
p->data=item;
p->left=p->right=NULL;
BST=p;
return1;
}//3分
elseif(item==BST->data)return0;//4分
elseif(item
returnInsert(BST->left,item);//5分
else
returnInsert(BST->right,item);//6分
}
说明:
函数体中的三个else保留字均可以被省略。
训练第二套
一、单项选择题,在括号内填写所选择的标号(每小题2分,共18分)
1.下面程序段的时间复杂度为()。
for(inti=0;i for(intj=0;j A.O(m2)B.O(n2)C.O(m*n)D.O(m+n) 2.在二维数组中,每个数组元素同时处于()个向量中。 A.0B.1C.2D.n 3.设有两个串t和p,求p在t中首次出现的位置的运算叫做()。 A.求子串B.模式匹配C.串替换D.串连接 4.利用双向链表作线性表的存储结构的优点是()。 A.便于单向进行插入和删除的操作B.便于双向进行插入和删除的操作 C.节省空间D.便于销毁结构释放空间 5.设链式栈中结点的结构为(data,link),且top是指向栈顶的指针。 若想在链式栈的栈顶插入一个由指针s所指的结点,则应执行()操作。 A.top->link=s;B.s->link=top->link;top->link=s; C.s->link=top;top=s;D.s->link=top;top=top->link; 6.一棵具有35个结点的完全二叉树的高度为()。 假定空树的高度为-1。 A.5B.6C.7D.8 7.向具有n个结点的堆中插入一个新元素的时间复杂度为()。 A.O (1)B.O(n)C.O(log2n)D.O(nlog2n) 8.在一棵AVL树中,每个结点的平衡因子的取值范围是()。 A.-1~1B.-2~2C.1~2D.0~1 9.一个有n个顶点和n条边的无向图一定是()的。 A.连通B.不连通C.无回路D.有回路 二、填空题,在横线处填写合适的内容(每小题2分,共14分) 1.数据结构包括__________、存储结构和对数据的运算这三个方面。 2.一维数组所占用的空间是连续的。 但数组元素不一定顺序存取,通常是按元素的_________存取的。 3.将一个n阶对称矩阵的上三角部分或下三角部分压缩存放于一个一维数组中,则该一维数组需要至少具有_________个元素。 4.对于一棵具有n个结点的树,该树中所有结点的度数之和为__________。 5.在一棵高度为3的理想平衡二叉树中,最少含有________个结点,假定树根结点的高度为0。 6.假定对长度n=50的有序表进行折半搜索,则对应的判定树中最底层的结点数为______个。 7.用邻接矩阵存储图,占用的存储空间与图中的________数有关。 三、判断题,在每小题前面打对号表示正确或打叉号表示错误(每小题2分,共14分) 1.算法和程序都应具有下面一些特征: 有输入,有输出,确定性,有穷性,有效性。 2.用字符数组存储长度为n的字符串,数组长度至少为n+1。 3.在用循环单链表表示的链式队列中,可以不设队头指针,仅在链尾设置队尾指针。 4.邻接矩阵适用于稀疏图的表示,邻接表适用于稠密图的表示。 5.对一个无向连通图进行一次深度优先搜索遍历时可以访问到图中的所有顶点。 6.在索引顺序结构的搜索中,对索引表只可以采取顺序搜索,不可以采用折半搜索。 7.图中各个顶点的编号是人为的,不是它本身固有的,因此可以根据需要进行改变。 四、运算题(每小题6分,共30分) 1.假定一棵二叉树广义表表示为a(b(c),d(e,f)),分别写出对它进行中序、后序、按层遍历的结果。 中序: 后序: 按层: 2.一个一维数组a[12]中存储着有序表(15,26,34,39,45,56,58,63,74,76,80,86),根据折半搜索所对应的判定树,写出该判定树中度为1的结点个数,并求出在等概率情况下进行成功搜索时的平均搜索长度。 度为1的结点个数: 平均搜索长度: 3.假定一个线性序列为(38,42,55,15,23,44,30,74,48,26),根据此线性序列中元素的排列次序生成一棵二叉搜索树,求出该二叉搜索树中左子树为空的所有单支结点、右子树为空的所有单支结点和所有叶子结点,请按照结点值从小到大的次序写出。 左子树为空的所有单支结点: 右子树为空的所有单支结点: 所有叶子结点: 4.已知一个图的顶点集V和边集G分别为: V={1,2,3,4,5,6}; E={<1,2>,<1,3>,<2,4>,<2,5>,<3,4>,<4,5>,<4,6>,<5,1>,<5,3>,<6,5>}; 假定该图采用邻接表表示,每个顶点邻接表中的边结点都是按照终点序号从小到大的次序链接的,试写出: (1)从顶点1出发进行深度优先搜索所得到的顶点序列; (2)从顶点1出发进行广度优先搜索所得到的顶点序列。 (1): (2): 5.已知一个数据序列为{16,45,27,23,41,15,56,64},请把它调整为一个最大堆。 最大堆: 五、算法分析题(每小题6分,共12分) 1.下面算法的功能为: 将两个有序单链表合并成一个有序单链表并返回其表头指针。 阅读算法,在划有横线的上面填写合适的内容。 ListNode*Merge1(ListNode*&p1,ListNode*&p2) { ListNode*p=newListNode,*f=p; while(p1! =NULL&&p2! =NULL) { if(p1->data<=p2->data){ p->link=p1;______________; } else{p->link=p2;p2=p2->link;} ______________; } if(p1! =NULL)p->link=p1;elsep->link=p2; p1=p2=NULL; returnf->link; } 2.已知二叉树中的结点类型BinTreeNode定义为: structBinTreeNode{ElemTypedata;BinTreeNode*left,*right;}; 其中data为结点值域,left和right分别为指向左、右子女结点的指针域。 根据下面算法的定义指出其功能。 算法中参数BT指向一棵二叉树。 BinTreeNode*BTreeSwopX(BinTreeNode*BT) { if(BT==NULL)returnNULL; else{ BinTreeNode*pt=newBinTreeNode; pt->data=BT->data; pt->right=BTreeSwopX(BT->left); pt->left=BTreeSwopX(BT->right); returnpt; } } 算法功能: 六、算法设计题(每小题6分,共12分) 1.已知f为单链表的表头指针,单链表中的结点结构为(data,link),并假定每个结点的值均为大于0的整数。 根据下面函数声明写出递归算法,返回单链表中所有结点的最大值,若单链表为空则返回数值0。 intMax(LinkNode*f); 2.设Q是一个由其队尾指针和队列长度标识的循环队列,按照下面队列定义和函数声明写出从此队列中删除一个元素的算法。 //循环队列定义 structCyclicQueue { ElemTypeelem[M];//M为已定义过的整型常量 intrear;//rear指向队尾元素的后一个位置 intlength;//length指示队列中元素个数 }; //若队列非空则删除队头元素并由引用参数x带回,同时返回true;否则若队列为空则返回false。 boolDelCQueue(CyclicQueue&Q,ElemType&x); 答案供参考 一、单项选择题,在括号内填写所选择的标号(每小题2分,共18分) 1.C2.C3.B4.B5.C 6.A7.C8.A9.D 二、填空题,在横线处填写合适的内容(每小题2分,共14分) 1.逻辑结构2.下标(或顺序号)3.n(n+1)/24.n-1 5.86.197.顶点 三、判断题,在每小题前面打对号表示正确或打叉号表示错误(每小题2分,共14分) 1.错2.对3.对4.错5.对6.错7.对 四、运算题(每小题6分,共30分) 1.中序: c,b,a,e,d,f//2分 后序: c,b,e,f,d,a//2分 按层: a,b,d,c,e,f//2分 2.度为1的结点个数: 5//3分 平均搜索长度: 37/12//3分 3.左子树为空的所有单支结点: 15,23,42,44//2分 右子树为空的所有单支结点: 30//2分 所有叶子结点: 26,48,74//2分 4. (1)1,2,4,5,3,6//3分 (2)1,2,3,4,5,6//3分 5.最大堆: {64,45,56,23,41,15,27,16} 五、算法分析题(每小题6分,共12分) 1.p1=p1->link、p=p->link//每空3分 2.生成一棵新二叉树并返回树根指针,该二叉树是已知二叉树BT中所有结点的左、右子树(或左、右孩子的值)交换的结果。 六、算法设计题(每小题6分,共12分) 1.评分标准: 按注释酌情给分。 intMax(LinkNode*f) { if(f==NULL)return0;//1分 if(f->link==NULL)returnf->data;//2分 inttemp=Max(f->link);//4分 if(f->data>temp)returnf->data;//5分 elsereturntemp;//6分 } 2.评分标准: 按注释酌情给分。 boolDelCQueue(CyclicQueue&Q,ElemType&x) { if(Q.length==0)returnfalse;//1分 x=Q.elem[(Q.rear-Q.length+M)%M];//4分 Q.length--;//5分 returntrue;//6分 } 训练第三套 一、单项选择题,在括号内填写所选择的标号(9小题,每小题2分,共18分) 1.当一个作为实际参数传递的对象占用的存储空间较大并且需要修改时,则对应的形参应说明为()。 A.基本类型B.引用型C.指针型D.常值引用型 2.在一个长度为n的顺序表的任一位置插入一个新
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程 本科 期末 针对性 训练 标准答案