数据结构练习附答案.docx
《数据结构练习附答案.docx》由会员分享,可在线阅读,更多相关《数据结构练习附答案.docx(12页珍藏版)》请在冰豆网上搜索。
数据结构练习附答案
一、单项选择题
1.逻辑关系是指数据元素间的()
A.类型B.存储方式C.结构D.数据项
2.对于只在表的首、尾两端进行插入操作的线性表,宜采用的存储结构为()
A.顺序表B.用头指针表示的单循环链表
C.用尾指针表示的单循环链表D.单链表
3.设数组data[m]作为循环队列SQ的存储空间,front为队头指针,rear为队尾指针,则执行出队操作后其头指针front值为( )
A.front=front+1 B.front=(front+1)%(m-1)
C.front=(front-1)%m D.front=(front+1)%m
4.在具有n个单元的顺序存储的循环队列中,假定front和rear分别为队头指针和队尾指针,则判断队满的条件为()。
A.rear%n==frontB.(front+l)%n==rear
C.rear%n-1==frontD.(rear+l)%n==front
5.在具有n个单元的顺序存储的循环队列中,假定front和rear分别为队头指针和队尾指针,则判断队空的条件为()。
A.rear%n==frontB.front+l=rear
C.rear==frontD.(rear+l)%n=front
6.已知一颗二叉树上有92个叶子结点,则它有____个度为2的结点。
()
A.90B.91C.92D.93
7.在一棵非空二叉树的中序遍历序列中,根结点的右边_____。
A.只有右子树上的所有结点B.只有右子树上的部分结点
C.只有左子树上的所有结点D.只有左子树上的部分结点
8.有n条边的无向图的邻接表存储法中,链表中结点的个数是()个。
A.nB.2nC.n/2D.n*n
9.判断有向图是否存在回路,除了可利用拓扑排序方法外,还可以利用()。
A.求关键路径的方法B.求最短路径的方法
C.深度优先遍历算法D.广度优先遍历算法
10.对线性表进行二分查找时,要求线性表必须()。
A.键值有序的顺序表B.键值有序的表
C.表但键值不一定有序D.顺序表但键值不一定有序
11.下列时间复杂度中最好的是()。
A.O
(1)B.O(n)C.O(log2n)D.O(n2)
12.若某线性表的常用操作是取第i个元素及其前趋元素,则采用()存储方式最节省时间?
A.顺序表 B.单链表 C.双链表 D.单向循环
13.在一个单链表HL中,若要向q所指结点之后插入一个由指针p指向的结点,则执行()
A.HL=p;p->next=HLB.p->next=HL;HL=p
C.p->next=q->next;q->next=pD.p->next=q->next;q=p>next
14.栈和队列是两种特殊的线性表,只能在它们的()处添加或删除结点。
A.中间点B.端点C.随机存取点D.结点
15.一个栈的输入序列为1,2,3,4,5,则下列序列中不可能是站的输出序列的是___
A.2,3,4,1,5B.5,4,1,3,2
C.2,3,1,4,5D.1,5,4,3,2
16.广义表((a),a)的表尾是。
()
A.aB.∧C.(a)D.((a))
17.将含100个结点的完全二叉树从根这一层开始,每层从左至右依次对结点编号,根结点的编号为1。
编号为47的结点X的双亲的编号为()
A.24 B.25 C.23 D.无法确定
18.有n个顶点的无向图的邻接矩阵是用______数组存储。
A.n行n列B.一维C.任意行n列D.n行任意列
19.如图所示有向图的一个拓扑序列是( )
A.ABCDEFB.FCBEADC.FEDCBAD.DAEBCF
20.有一个有序表{1,4,6,10,18,35,42,53,67,71,78,84,92,99},当用二分查找法查找键值为84的结点时,经_____比较后查找成功。
A.2B.3C.4D.12
21.在一个带有附加表头结点的单链表HL中,若要向表头插入一个由指针p指向的结点,则执行()
A.HL=p;p->next=HL;B.p->next=HL->next;HL->next=p;
C.p->next=HL;p=HL;D.p->next=HL;HL=p;
22.若采用单链表表示循环队列,则应该选用()
A.带尾指针的非循环链表B.带尾指针的循环链表
C.带头指针的非循环链表D.带头指针的循环链表
23.栈和队列是两种特殊的线性表,只能在它们的处添加或删除结点。
()
A.中间点B.端点C.随机存取点D.结点
24.首先访问结点的左子树,然后访问该结点,最后访问结点的右子树,这种遍历称为( )
A.前序遍历B.后序遍历C.中序遍历D.层次遍历
25.树最适合用来表示()
A.有序数据元素B.无序数据元素
C.元素之间具有分支层次关系的数据D.元素之间无联系的数据
26.已知一颗二叉树上有92个叶子结点,则它有____个度为2的结点。
()
A.90B.91C.92D.93
27.对一棵查找树根结点而言,左子树中所有结点与右子树中所有结点的关键字大小关系是( )
A、小于B、大于C、等于D、不小于
28.对关键字序列19,11,27,18,33进行快速排序,则要进行多少次关键字比较?
()
A.5次B.6次C.7次D.8次
1.设有一个二维数组A[m][n],假设A[0][0]存放位置在644(10),A[2][2]存放位置在676(10),每个元素占一个空间,问A[3][3](10)存放在什么位置?
脚注(10)表示用10进制表示。
(C)
A.688B.678C.692D.696
2.设有6个结点的无向图,该图至少应该有(A)条边才能确保是一个连通图。
A.5B.6C.7D.8
3.根据二叉树的定义可知二叉树共有(B)种不同的形态。
A.4B.5C.6D.7
4.假设在一棵二叉树中,双分支结点数为15,单分支结点数为30
个,则叶子结点数为(B)个。
A.15B.16C.17D.47
5.任何一棵二叉树的叶子结点在先序、中序和后序遍历序列中的相对次序(A)。
A.不发生改变B.发生改变
C.不能确定D.以上都不对
6.在一个具有n个顶点的无向完全图中,所含的边数为(C)。
A.nB.n(n-1)C.n(n-1)/2D.n(n+1)/2
7.若一个图的边集为{(A,B),(A,C),(B,D),(C,F),(D,E),(D,F)},则从顶点A开始对该图进行深度优先搜索,得到的顶点序列可能为(B)。
A.A,B,C,F,D,EB.A,C,F,D,E,B
C.A,B,D,C,F,ED.A,B,D,F,E,C
8.假定对元素序列(7,3,5,9,1,12)进行堆排序,采用小顶堆,则初始数据构成的初始堆为(B)。
A.1,3,5,7,9,12B.1,3,5,9,7,12
C.1,7,3,5,9,12D.1,3,5,7,9,12
二、填空题
1.根据值的不同特性,高级程序语言中的数据类型可分为两类:
_______和__________。
2.线性表有两种存储结构:
_________和___________。
3.在以HL为表头指针的循环单链表中,链表为空的条件为_______。
4.设栈S和队列Q的初始状态皆为空,元素a1,a2,a3,a4,a5和a6一次通过一个栈后即进入队列Q,若6个元素出对的顺序是a3,a5,a4,a6,a2,a1,则栈S至少可以容纳_____个元素。
5.对于一棵具有30个结点的二叉树,若一个结点的编号为5,则它的左孩子结点的编号为_______,右孩子结点的编号为______,双亲结点的编号为_________。
6.对于一个具有n个结点的二叉树,当它存储在二叉链表中时,其指针字段的总数为_________个,其中_________个用于孩子结点,_________个空闲。
7.设图中有n个顶点,e条边,则含有e=______条边的无向图称作完全图,含有e=_________条弧的有向图称作有向完全图。
8.对于线性表(78,4,56,30,65)进行哈希存储时,若选用H(K)=K%5作为哈希函数,则哈希地址为0的元素有______个。
9.在单链表上难以实现的排序方法有_______和________ 。
10.根据值的不同特性,高级程序语言中的数据类型可分为两类:
_______和__________。
11.在单链表中,删除指针P所指节点的后继结点的语句是________。
12.栈又称为____________的线性表,队列又称为___________的线性表。
13.N个结点的二叉树采用二叉链表存放,共有空链域个数为________________。
14.一棵深度为k的满二叉树的结点总数为___________,一棵深度为k的完全二叉树的结点总数的最小值为___________,最大值为___________。
15.具有80个结点的完全二叉树,若按层次从上到下、从左到右对其编号(根结点为1号),则编号最大的分支结点序号为___________,编号最小的分支结点序号为___________,编号最大的叶子结点序号为___________,编号最小的叶子结点序号为___________。
16.采用二分法进行查找的查找表,应选择_________的存储结构。
17.假设在有序表A[0…19]中进行二分查找,比较二次查找成功的结点数为______,比较三次查找成功的结点数为________。
18.一个有向图G中若有弧、和,则在图G的拓朴序列中,顶点Vi,Vj和Vk的相对位置为 ______ 。
19.对于一个长度为n的顺序存储的线性表,在表头插入元素的时间复杂度为_________,在表尾插入元素的时间复杂度为____________。
20.栈又称为____________的线性表,队列又称为___________的线性表。
21.对于一棵具有n个结点的二叉树,用二叉链表存储时,其指针总数为__________个,其中___________个指针是空闲的。
22.在稀疏矩阵所对应的三元组线性表中,每个三元组元素按_________为主序、_________为辅序的次序排列。
23.一颗深度为K且有____________个结点的二叉树称为满二叉树。
24.若对一棵完全二叉树从0开始进行结点的编号,并按此编号把它顺序存储到一维数组A中,即编号为0的结点存储到A[0]中。
其余类推,则A[i]元素的左孩子元素为________,双亲元素为____________。
25.对于线性表(78,4,56,30,65)进行哈希存储时,若选用H(K)=K%5作为哈希函数,则哈希地址为0的元素有________个,哈希地址为4的有_______个。
26.以折半查找方法从长度为8的有序表中查找一个元素时,平均查找长度为________。
27.假定一个有向图的顶点集为{a,b,c,d,e,f},边集{,,,,,},则出度为0的顶点个数为________,入度为1的顶点个数为_________。
28.设有向图G中有向边的集合E={<1,2>,<2,3>,<1,4>,<4,2>,<4,3>},则该图的一种拓扑序列为__________。
29.对于一棵具有n个结点的二叉树,当进行存储时,其二叉链表中的指针域的总数为2n个,其中_______个用于孩子结点,__________个空闲着。
30.设有向图中不存在有向边,则其对应的邻接矩阵A中的数组元素A[i][j]的值等于____________。
31.根据初始关键字序列(19,22,01,38,10)建立的二叉排序树的高度为______。
32.
三.应用题
1.顺序队的“假溢出”是怎样产生的?
如何知道循环队列是空还是满?
2.回文。
假设一字符序列已存入计算机,请分析用线性表、堆栈和队列等方式正确输出其回文的可能性?
假设正读和反读都相同的字符序列为“回文”,例如,‘abba’和‘abcba’是回文,‘abcde’和‘ababab’则不是。
3.设有编号为1,2,3,4的四辆列车,顺序进入一个栈式结构的车站,具体写出这四辆列车开出车站的所有可能的顺序。
至少有14种。
①全进之后再出情况,只有1种:
4,3,2,1
②进3个之后再出的情况,有3种,3,4,2,13,2,4,13,2,1,4
③进2个之后再出的情况,有5种,2,4,3,12,3,4,12,1,3,42,1,4,32,1,3,4
④进1个之后再出的情况,有5种,1,4,3,21,3,2,41,3,4,21,2,3,41,2,4,3
4.对给定的权值{2,3,4,7,8,9},构造出相应的赫夫曼树,并求出带权路径的长度WPL。
WPL=2*4+3*4+4*3+9*2+7*2+8*2=80
5.对于下图的无向图,绘出从a出发,用普利姆算法构造的最小生成树的过程。
(过程略)
6.请画出右图的邻接矩阵和邻接表。
7.试比较顺序存储结构和链式存储结构的优缺点。
在什么情况下用顺序表比链表好?
在什么情况下用链表比顺序表好?
①顺序存储时,相邻数据元素的存放地址也相邻(逻辑与物理统一);要求存中可用存储单元的地址必须是连续的。
优点:
存储密度大(=1?
),存储空间利用率高。
缺点:
插入或删除元素时不方便。
②链式存储时,相邻数据元素可随意存放,但所占存储空间分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针
优点:
插入或删除元素时很方便,使用灵活。
缺点:
存储密度小,存储空间利用率低。
顺序表适宜于做查找这样的静态操作;链表宜于做插入、删除这样的动态操作。
若线性表的长度变化不大,且其主要操作是查找,则采用顺序表;
若线性表的长度变化较大,且其主要操作是插入、删除操作,则采用链表。
8.按照下列给定二叉树的先序遍历序列、中序遍历序列和后序遍历序列,分别构造出二叉树。
①先序遍历序列:
EBADCFHGIKJ中序遍历序列:
ABCDEFGHIJK
②中序遍历序列:
ACBGEDF后序遍历序列:
ABCDEFG
(1)
(2)
9.如下列所示的连通图,请画出:
(1)以顶点a为根的深度优先生成树;
(2)如果有关节点,请找出所有的关节点。
顶点a和顶点c是关节点
10.给定表{19,14,22,01,66,21,83,27,56,13,10}
①试按元素在表中的顺序构造一棵二叉排序树;
②判断该二叉排序树是否平衡,若不平衡,调整其为平衡二叉树。
、请说明树型结构和线性结构的相同和不同之处。
二叉排序树为:
二叉平衡树:
四.算法设计题
1.假设某个单项循环链表的长度大于1,且表中既无头结点也无头指针。
已知S为指向链表中某个结点的指针,试编写算法在链表中删除指针S所指结点的前驱结点。
StatusDelPrior(LinkList&S,ElemType&e)
{//S指向链表中某个节点,前驱结点赋值给参数e
……}
2.编写递归算法,计算一棵以二叉链表表示的树的所有结点中度为1的结点个数。
voidCountn1(BiTreeT,int&count)
{……}
3.编写一算法,对单链表实现就地逆置,并分析其时间复杂度。
StatusListReverse(LinkList&L)
{……}
4.编写递归算法,将二叉树中所有结点的左右子树相互交换。
StatusExchaBiTree(BiTree&T)
{……}
5.假设行编辑程序功能要求如下:
设立一个缓冲区接收用户的输入,当用户输入$表示前一个字符无效,当用户输入&表示当前行字符无效,当用户输入回车符时表示将缓冲区的容送到数据区,写出利用栈实现行编辑程序的算法。
6.编写递归算法:
在二叉树中求位于先序序列中第k个位置的结点的值。