《数据结构》习题集.docx
- 文档编号:10187862
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:16
- 大小:78.27KB
《数据结构》习题集.docx
《《数据结构》习题集.docx》由会员分享,可在线阅读,更多相关《《数据结构》习题集.docx(16页珍藏版)》请在冰豆网上搜索。
《数据结构》习题集
第1章绪论
一、填空题
1.一个算法具有下列五个重要特性:
、、
、、。
2.根据数据元素之间的相互关系的不同特性,通常有如下的四种基本结构:
、、、
。
3.数据结构是介于、和三者之间的一门核心课程。
4.通常设计一个“好”的算法应该考虑达到如下的目标、、、
。
5.算法效率的度量同时采用时间复杂度和来度量。
第2章线性表
一、填空题
1.一个双向的循环链表,设p->next指向其后继,p->prior指向其前驱。
若要删除指针p所指的结点,需要如下的指令实现:
。
2.一个单向链表,设q=p->next若要删除指针q所指的结点,需要如下的指令实现:
。
3.已知某单向链表中某结点的指针为p,p->next指向其下一个结点。
若希望在p之后插入一个结点q,则可采用如下的指令实现:
。
4.已知某双向循环链表中某结点的指针为p,p->next指向它的后继,p->prior指向它的前驱,p->data为该元素的值,其类型为字符型变量。
试采用C语言描述该双向链表的存储结构:
若希望删除该结点,可采用如下的C语言程序段实现:
5.在一个长度为n的顺序表中删除第i个元素(0≤i≤n)时,需向前移动个元素。
6.在一个具有n个结点的有序单链表中插入一个新的结点使得该链表仍然有序,其算法的时间复杂度为。
二、选择题
1.设单链表中指针p指向结点m,若要删除m之后的结点(若存在),则需修改指针的操作为:
。
(A)p->next=p->next->next;(B)p=p->next;
(C)p=p->next->next;(D)p->next=p;
2.在长度为n的顺序表的第i(0≤i≤n)个位置上插入一个元素,元素的移动次数为()。
A、n-i+1B、n-iC、iD、i-1
三、简答题
1.已知双向链表中某结点的指针为p,现希望在该结点之后插入结点q,请用图示和语言的形式描述插入该结点的过程。
答:
第3章栈和队列
一、填空题
1、队列的特点是:
。
2、堆栈的特点是:
。
二、选择题
1.设一数列的顺序为1,2,3,4,5,6,通过栈操作可以得到()的输出序列。
(A)3,2,5,6,4,1(B)1,5,4,6,2,3
(C)6,4,3,2,5,1(D)3,5,6,2,4,1
2.若进栈序列为a,b,c,则通过入出栈操作可能得到的a,b,c的不同排列个数为()。
A、4B、5C、6D、7
三、简答题
1.设某堆栈栈名为Stack,希望将若干实数压入堆栈。
请完成如下操作:
(1)用C语言表示该堆栈的顺序存储结构。
(2)写出其出栈操作的函数intPush(Stack&s,floate)。
解答:
2.设某循环队列的名称为SqQueue,请完成如下操作:
(1)用C语言表示该循环队列的顺序存储结构。
(2)写出实现其入队列函数intEnQueue(SqQueue&Q,floate)和出队列函数intDeQueue(SqStack&Q,float&e)。
解答:
第4章串
一、填空题
1.某模式串为abcaacbacaab,根据KMP算法得到的next函数对应的值为:
。
二、程序设计
1.用KMP算法实现在某个文件中查找某个字符串,要求待查找文件和待查找字符串均从通过命令行输入。
解答:
第5章数组和广义表
一、填空题
1.已知某广义表A=(a,(a,B,C),(b,c,d)),则该广义表的长度为。
2.广义表A=(a,b,(c,d),(e,(f,g))),则Head(Tail(Head(Tail(Tail(A)))))的值为:
,其长度为。
3.数组A[M][N][P][Q]以行优先的顺序存储,设第一个元素的首地址为r,每个元素占L个存储单元,则元素A[i][j][k][s](其中:
0≤i≤M-1,0≤j≤N-1,0≤k≤P-1,0≤s≤Q-1)的存储地址为
。
二、选择题
1.稀疏矩阵是指这种类型的矩阵:
(1)矩阵的元素很少
(2)矩阵中有一部分0元素,但有规律
(3)矩阵中有大量的0元,且分布没有规律(4)对称矩阵或三角矩阵
2.设A[10][10]是一个对称矩阵,若采用压缩存储,以行序为主,a11为第一个元素,其存储地址为1,每个元素占用1个地址空间,则a85的地址为()
(1)13
(2)33(3)18(4)40
第6章树和二叉树
一、填空题
1.已知某二叉树的结点为A,B,C,D,E,F,G,H,I,J,中序遍历的结果为DBFGEAHICJ,先序遍历的结果为ABDEFGCHIJ,则其后序遍历的结果为:
。
2.设一棵二叉树中只有度为2的结点和叶子结点,已知度为2的结点数为n,则该二叉树的结点总数为。
3.某完全二叉树有15个结点,则该树度为1的结点有个,度为2的结点有个,度为0的结点有个。
该树编号为8的结点(是,不是)叶子结点。
4.已知某二叉树度为0的结点有8个,度为1的结点有13个,则该二叉树总共有
个结点,度为2的结点有个。
5.设F是一个森林,B是由F转换得到的二叉树,F中有n个非终端结点,则B中右指针为空的结点有个。
6.在一棵二叉树中,度为0的结点个数为n,度为1的结点个数为m,则该二叉树采用二叉链表的存储结构时有个指针用于链接孩子结点。
7.若某二叉树的深度为K,则该二叉树至少有个结点。
二、选择题
1、深度为5的二叉树,其叶子结点的个数最多为()个。
(1)15
(2)20(3)16(4)8
2.在二叉树的第4层上至多有多少个结点:
()
(1)10个
(2)8个(3)16个(4)以上都不是。
3.若某二叉树度为1的结点个数为9个,度为2的结点个数为8个,则该二叉树有
个结点。
(1)25
(2)18(3)26(4)以上都不是
4.下面的二叉树中,图()是完全二叉树。
5.二叉树第i(i≥1)层上至多有()各结点。
(1)2i
(2)2i(3)2i-1(4)2i-1
6.线索化二叉树中某结点D,没有左孩子的主要条件是()
(1)D->lchild=NULL(3)D->ltag=1
(2)D->rchild=NULL(4)D->ltag=0
7.如果结点A有3个兄弟,而且B为A的双亲,则B的度为()
(1)3
(2)4(3)5(4)1
8.具有2000个结点的二叉树其高度至少为()
(1)9
(2)10(3)11(4)12
9.下列陈述中正确的是()。
(1)二叉树是度为2的有序树
(2)二叉树中结点只有一个孩子时无左右之分
(3)二叉树中必有度为2的结点(4)二叉树中最多只有两棵子树,并且有左右之分
10.假定一棵三叉树的结点数为50,则它的最小高度为。
(1)3
(2)4(3)5(4)6
11.若某完全二叉树的结点个数为10,则第8个结点的度为。
(1)0
(2)1(3)2(4)不确定
12.给定权的集合{15,3,14,2,6,9,16,17},所构造的哈夫曼树的带权路径长度为。
(1)129
(2)219(3)189(4)229
三、简答题
1.对于下图的树,请按要求完成如下的操作:
(1)请用C/C++语言表示树的孩子表示法。
(2)将该树转换成相应的二叉树,将转换后的二叉树后序线索化。
要求用文字描述其后序线索化算法,并画出后序线索化后的二叉树。
2.已知某二叉树的定义如下:
typedefstructBiTree{
charNode;
structBiTree*lchild,*rchild;
}BiTree,*BiTNode;
请按要求完成如下操作:
(1)用C语言表示其线索化后的二叉树的存储结构。
结构名为ThreadBiTree。
(2)若已知先序线索化后的二叉树某结点的指针为p,请用文字描述其后继结点的求解方法。
四、程序填空
1、下面的程序采用非递归算法实现二叉树的后序遍历,请在空格处填上适当的语句实现该算法。
设二叉树的结点个数不超过255个,其中二叉树的定义如下:
typedefstruct{
chardata;
structBiTNode*lchild,*rchild;
}BiTNode,*BiTree;
voidPostOrderTraverse(BiTreeT)
{
BiTreeNode[255],p;
intvisit[255];
inti=0;
p=T;
do{
while(⑥){
i=i+1;
Node[i]=p;
visit[i]=0;
⑦;
}
while((i!
=0)&&(visit[i]==⑧)){
p=Node[i];
printf("%c",p->data);
⑨;
}
if(i!
=0){
visit[i]=1;
p=Node[i];
⑩;
}
}while(i!
=0);
return;
}
五、程序设计
1、用非递归算法实现二叉树的中序遍历。
第7章图
一、选择题
1、对于下面的有向网,A为源点,F为汇点,其关键路径为()。
(1)A->B->C->F
(2)A->C->F(3)A->D->E->F(4)A->D->E->C->F
2.对下面的无向网,若采用Prim(普里姆)算法求其最小生成树,则该最小生成树上各边代价之和为。
(1)53
(2)41(3)35(4)以上都不是
3.已知一个有向图如右所示,则从顶点a出发进行深度优先偏历,不可能得到的DFS序列为()。
(1)adbefc
(2)adcefb(3)adcbfe(4)adefcb
二、简答题
1.对于下图所示的AOE网,请按要求完成如下的操作:
(1)试采用邻接表(包括出表和入表)的存储结构表示上面的AOE网,并求其深度优先搜索和广度优先搜索结果。
(2)用C/C++语言表示其邻接表的存储结构,并说明每个变量的含义。
(3)用文字和图形描述从A出发到其它各个顶点的最短路径的过程。
(4)用图形和文字描述其拓扑排序的过程及结果。
2.用图的形式表示下图的邻接表的存储结构,并完成如下操作:
(1)写出其深度优先搜索结果,并画出其深度优先生成树。
(2)用图的形式描述采用克鲁斯卡尔(Kruskal)算法求解最小生成树的过程。
第8章查找
一、填空题
1.已知某序列为{50,23,48,65,58,76,43,21,49,9,22},请绘出动态查找过程中所构造成的二叉排序树(图A)。
并绘出删除该序列中值为{23}的结点后所得到的二叉排序树(图B)。
(图A)(图B)
2.已知某序列元素的关键字为{234,23,456,46,75,46,45},若采用顺序查找算法查找该序列的元素,则查找成功时的平均查找长度为。
3.已知一个待散列存储的线性表为{18,34,58,26,75,67,48,93,81},散列函数为H(Key)=Key%11,若采用线性探测再散列方法处理冲突,若对该散列表进行关键字查找其平均查找长度为。
二、选择题
1.对于序列{13,22,46,73,88,98,153,178}而言,若序列中的每个元素出现的概率相同,若采用折半查找算法,则其平均查找长度为()
(1).
(2)2(3)
(4)2.5
2.某序列关键字为{20,15,30,46,53,26,78,50}。
若哈希函数为f(key)=keyMod8,(其中key为关键字的值,Mod表示求余运算),处理冲突的方法为线性探测再散列方法。
则所构造的哈希表中的元素依次为:
。
(1)46,78,20,26,50,53,30,15
(2)78,46,20,26,50,53,30,15
(3)30,78,26,20,50,53,46,15(4)以上都不是
3.设有100个元素,采用折半查找法进行查找时,最大比较次数是()
(1)25
(2)7(3)10(4)1
4.已知8个元素(34,76,45,18,26,54,92,65),按照依次插入结点的方法生成二叉排序树,该树的深度为()。
(1)4
(2)5(3)6(4)7
三、简答题
1.如果对一棵二叉排序树执行下面的操作:
(1)删除二叉排序树上的叶子结点,并在一行中按从小到大的顺序列出这些叶子结点。
(2)重复执行步骤1,直到该树为空。
比如对下面的二叉排序树执行上述操作的输出结果为:
BDHPYCMGQK
现已知某二叉树排序树根据上述操作得到了每行输出的结果如下:
CEHJBKDIF
请按要求完成如下任务:
(1)画出该二叉排序树。
(2)写出删除该二叉排序树上的结点D之后的二叉排序树。
(3)用C(类C语言)写出对任意按上述输入顺序输入结点时建立该二叉排序树的算法(结点总数不超过26个,输入*表示输入结束)。
2.已知某序列的关键字为{20,45,38,92,18,33,45,64,73},试用图示形式表示出构造二叉排序树的过程,并用语言描述查找关键字19的过程。
四、程序设计
1、已知某二叉排序树的存储结构定义如下:
typedefstruct{
floatkey;//关键字域
}ElemType;
typedefstructBiTNode{
ElemTypee;//元素的值
structBiTNode*lchild;//指向二叉树的左孩子
structBiTNode*rchild;//指向二叉树的右孩子
structBiTNode*parent;//指向其双亲的指针
}BiTNode,*BiTree;
请按要求完成如下任务:
(1)编写程序实现建立二叉排序树的过程(结点的关键字值由键盘输入)。
(2)编写程序实现删除该二叉排序树上关键字值为x的结点。
第9章绪论
一、填空题
1.已知某序列为{50,23,48,65,58,76,43,21,49,9,22},若选取该序列的第一个元素为枢轴,则经过一趟快速排序之后的序列为
。
2.已知序列的关键字为{49,38,65,97,76,13,27,49},若采用直接插入排序将该序列按关键字从小到大的顺序排列,则该排序过程中关键字移动的次数总共为。
3.已知某序列元素的关键字为{20,30,40,15,18,35,14,56},则该序列经过一趟2-路归并排序之后的序列为
。
4.对一组记录{50,40,95,20,15,70,60,45,80}进行直接插入排序是,当把第7个记录60插入到有序表中时,为寻找插入位置需比较次。
二、选择题
1.在下面的排序算法中,最稳定的排序算法是()
(1)基数排序
(2)快速排序(3)堆排序(4)希尔排序
2.在内部排序算法中,排序不稳定的有()
(1)插入排序(2)冒泡排序(3)快速排序(4)归并排序
3.AVL树是一种平衡的二叉排序树,树中任一结点的()。
(1)左、右子树的高度均相同
(2)左、右子树高度差的绝对值不超过1
(3)左子树的高度均大于右子树的高度(4)左子树的高度均小于右子树的高度
4、若某序列的元素为{50,23,48,65,58,76,43},如果采用链式基数排序,则一趟分配和收集之后的序列为()。
(1)23,48,50,43,65,58,76(2)50,23,43,65,76,48,58
(3)50,23,43,65,76,58,48(4)以上结果都不是
5.若某序列的初始状态为{11,13,58,45,38,5,33,12},若对该序列进行希尔排序,且设第一趟希尔排序时其“增量”dk为3,则一趟希尔排序之后的序列为。
(1)11,5,12,13,45,58,33,38
(2)11,13,45,58,5,12,33,38
(3)11,12,5,33,13,58,45,38(4)以上都不是
三、简答题
1.已知某序列为{49,38,65,97,76,13,27,53},请按要求完成下列任务:
(1)画出将该序列进行调整后得到的大顶堆。
(2)对
(1)中结果进行先序和后序遍历,写出先序和后序遍历的结果。
(3)对
(1)中结果进行先序线索化,画出其后序线索化后的结果。
(4)用C(或类C)语言实现有n个元素的大顶堆的排序算法。
四、程序设计
1.设某班学生人数为200人,描述每个学生的信息至少包括姓名,学号及总成绩。
试编写一个程序,采用直接插入排序,将某班学生的总成绩按从大到小的顺序排序,并统计出该班学生中得优学生的人数(85~100分为优,包括85分和100分在内)。
2.请编写程序,采用折半插入排序算法对某序列进行快速排序。
(1)以序列{45,23,56,78,15,45,67,53}为例说明折半插入排序算法的求解过程。
(2)用C语言表示该序列排序时须用到的数据结构。
(3)写出折半插入排序算法的源程序代码。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 习题集