数据结构复习题Word文档下载推荐.docx
《数据结构复习题Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构复习题Word文档下载推荐.docx(17页珍藏版)》请在冰豆网上搜索。
A、根结点的权B、所有叶子结点带权路径权值之和
C、所有结点权值之和D、除根之外所有结点权值之和
15、有向图中,所有顶点的入度之和是图中有向边数的倍。
16、若有序表有80个元素,则采用二分查找,查找成功时的最大查找长度是。
(C)
A、4B、5C、7D、8
17、下述四种排序方法中,关键字平均比较次数最少的是。
(A)
A、快速排序B、插入排序
C、选择排序D、归并排序
18、一个顺序存储的循环队列中,队首指针指向队首元素的。
19、设有两个串p和q,求q在p中首次出现的位置的操作称为。
A、求串长B、求子串C、联接D、模式匹配
20、深度为6的完全二叉树(顺序二叉树),其树结点数的范围是。
A、31~63B、31~64C、32~63D、32~64
21、以三叉链表作为二叉树的存储结构,在具有n(n>
0)个结点的三叉链表中,空链域的个数是。
A.n-1B.n
C.n+1D.n+2
22、关键路径是事件结点网络中。
A.从源点到汇点的最长路径B.从源点到汇点的最短路径
C.最长的回路D.最短的回路
23、链表不具有的特点是。
A.随机访问B.不必事先估计存储空间
C.插入和删除不需要移动元素D.所需空间与线性表表长成正比
24、哈希函数不是一对一的关系,因此选用好的_____是哈希技术的关键。
A.哈希函数B.除留余数法中的素数
C.冲突处理方法D.哈希函数和冲突处理方法
25、最小生成树指的是。
A.由连通图所得到的边数最少的生成树
B.由连通图所得到的顶点相对较少的生成树
C.连通图中所有生成树中权值之和最小的树
D.连通图的极小连通子图
26、一循环队列Q(元素最多为m个)为满的条件是。
A.Q.front==Q.rearB.Q.front!
=Q.rear
C.Q.front==(Q.rear+1)%mD.Q.front!
=(Q.rear+1)%m
27、对于一个具有n个顶点的无向图,若采用邻接矩阵表示,则该矩阵的大小是。
A.nB.(n-1)²
C.n-1D.n²
28、在一非空二叉树的中序遍历序列中,根结点的左边序列包括。
A.其右子树上的所有结点B.其右子树上的部分结点
C.其左子树上的部分结点D.其左子树上的所有结点
29、无向图的邻接矩阵是一个。
A.对称矩阵B.对角线矩阵
C.稀疏矩阵D.一般矩阵
30、一棵完全二叉树上有1001个结点,其中叶子结点的个数是。
A.250B.501C.254D.505E.以上答案都不对
31、设数组A[-2..3,0..4,-5..5]含有元素的数目是。
A.200个B.250个C.300个D.330个
32、以下属于逻辑结构的是C。
A.顺序表B.哈希表C.有序表D.单链表
33、关键路径是事件结点网络中A。
A.从源点到汇点的最长路径B.从源点到汇点的最短路径
C.最长的回路D.最短的回路
34、
二、填空题
1、稀疏矩阵常用的两种存储方法是十字链表和三元组。
2、二维数组是数据元素为线性表的线性表。
3、在哈希造表中,哈希函数为H(K),若ki≠kj,但H(ki)=H(kj),则称发生了冲突,且称ki与kj是同义词。
4、一个以head为头指针的带头结点的单链表,其仅有两个结点元素的条件是head->
next==NULL。
5、一个具有10个顶点的无向图至多有45条边。
6、一棵深度为6的满二叉树有63个结点。
7、一棵具有35个结点的完全二叉树的深度为6。
8、有n个顶点的连通图的生成树有n-1条边。
9、在无向图G的邻接矩阵A中,若A[i][j]等于1,则A[j][i]等于1。
10、栈的结构特点是先进后出。
11、在一个长度为n的向量中的第i个位置上插入一个元素(1≤i≤n+1)时,需向后移动n-i+1个元素。
12、一个线性表第一个元素的存储地址是180,每个元素的长度为3,则第7个元素的地址是198。
13、线性结构中,第一个结点无前驱结点,其余每个结点有且只有一个前驱结点;
最后一个结点无后继结点,其余每个结点有且只有一个后继结点。
14、设计一个判别表达式中左、右括号是否匹配的算法,采用栈数据结构最佳。
15、对于一个具有n个顶点和e条边的无向图,若采用邻接表表示,则表头向量的大小为n,所有顶点邻接表中的结点总数为2e。
16、二叉树的链式存储结构二叉链表中,空指针域的数目是n+1,设该树中有n个结点。
17、N个顶点的连通图至少有n-1条边。
18、设无向图G中顶点数为n,则图G最多有n(n-1)/2条边。
19、由二叉树的___前___序和__中___序遍历序列可以唯一的确定一棵树。
20、具有m个顶点的有向强连通图,至少有___m___条弧,它们构成了一个__环____。
21、一head为头指针的带头结点的单链环,其仅有两个元素结点的条件是____head->
next==head___;
若p指向其尾元结点,则应满足的条件是______p->
next==head____。
22、在线性表的顺序存储中,元素间的逻辑关系是用连续的存储地址表示的;
在线性表的链式存储结构中,元素间的逻辑关系是用____指针___表示的。
23、深度为7的完全二叉树,至少有__64__个结点,至多有__127__个结点。
24、函数自己调用自己,称为____递归____。
25、有向图的邻接表中第i个单链表的长度等于顶点i的出度,而有向图的逆邻接表中第i个单链表的长度等于顶点i的入度。
26、在内排序方法中,平均比较次数最少的是快速排序排序,要求附加内存容量最大的是基数排序排序。
27、图的两种遍历方式是深度遍历和广度遍历。
28、以{lchild,parent,data,rchild}作为结点结构的具有n个结点的二叉树的三叉链表存储结构中,有2n-2个链域是表示父子关系的,有n+2个空链域。
29、串的特殊性体现在由零个或多个字符组成的有序序列。
30、在分块查找方法中,首先查找索引表,然后再查找相应的块。
三、判断题
(×
)1、若两个串的长度相同,则称这两个串相同。
)2、可以对有序单链表进行二分查找。
)3、在一棵二叉树中,叶子结点数刚好比度数为2的结点数少1个。
(√)4、连通图的连通分量是它自己本身。
)5、一棵完全二叉树也是一棵满二叉树。
(√)6、一个无向完全图也是一个连通图。
)7、哈夫曼树中无度为1的结点,因此它是一棵满二叉树。
)8、栈是一种运算受限的线性表,它规定在表的两端分别进行插入和删除操作,其中
进行插入的一端称为栈底,删除的一端称为栈顶。
)9、二叉树是一种特殊的树。
(√)10、任意二个顶点之间都存在互达的弧的有向图称为强连通图。
)11、数据的对象中的数据元素以及它们之间关系的机内表示称为数据的存储结构。
)12、线性表的长度是指该线性表所占用的存储单元数。
(√)13、栈和队列都是只允许在表的端点处进行插入、删除操作的线性表。
(√)14、一个具有n个顶点的连通图,至少有n-1条边。
)15、哈夫曼编码树中,两个频率相同的字符具有相同的哈夫曼编码。
)16、好的哈希函数可以避免发生冲突。
)17、算法可以没有输出。
(√)18、二叉树的中序遍历序列和后序遍历序列可以唯一地确定一棵二叉树。
(√)19、二叉树的中序遍历序列和前序遍历序列可以唯一地确定一棵二叉树。
)20、二叉树的后序遍历序列和前序遍历序列可以唯一地确定一棵二叉树。
(√)21、无向图与无向网的邻接矩阵一定是对称矩阵。
)22、堆排序是稳定排序方法。
(√)23、线性表的顺序存储结构中,元素的逻辑顺序与物理顺序是相同的。
)24、队列是一种后进先出的结构。
)25、一个具有n个顶点的强连通图,有n(n-1)/2条弧。
(√)26、对一棵二叉排序树进行中序遍历时,结点的输出序列是一个有序的序列。
(√)27、有向图的邻接矩阵中,第i行上1元素数等于顶点i的出度。
)28、数据的基本单位是数据项。
(√)29、装填因子是哈希表的一个重要参数,它反映了哈希表的装满程度。
)30、空串是由空格构成的字符串。
(√)31、二维数组是其元素为线性表的线性表。
)32、哈夫曼树中无度为1的结点,因此它是一棵满二叉树。
(√)33、任意二个顶点之间都存在互达的弧的有向图称为强连通图。
四、画图并回答问题
1、若有如下图的邻接表存储结构的说明定义
#definemaxsize20
typedefstructlistnode{
intadjno;
structlistnode*next;
}listnode;
typedefstructheadnode{
chardata;
listnode*first;
}headnode;
typedefstructadjlist{
headnodevex[maxsize+1];
intvexnum,edgenum;
}adjlist;
(1)画出例图N的邻接表存储结构图
(2)若编号为i(1≤i≤N.vexnum)的顶点的邻接点不小于2个,则它的第二个邻接顶点的编号是vex[i]->
first->
adjno;
其顶点的值是vex[i]->
data。
(3)写出从顶点A(编号为1)出发深度优先搜索遍历的序列。
ABDFCGE
(4)写出从顶点C(编号为3)出发广度优先搜索遍历的序列。
CAFBDGE
2、若有如下图的邻接表存储结构的说明定义
typedefstruct{
structadjlist{
intvexnum,arcnum;
(1)画出例图G的邻接表存储结构图
(2)写出从顶点C出发深度优先搜索和广度优先搜索遍历的序列。
深度:
CABEDGF广度:
(3)若编号为i(1≤i≤N.vexnum)的顶点至少邻接两个顶点,则它表示的第一条弧是vex[i]->
first;
表示的第二条弧是vex[i]->
next。
3、若图的邻接表存储的表结点和头结点结构如下:
对于如下图N的邻接表存储结构图:
(1)图N是无向图还是有向图?
有向图
(2)图N有多少个顶点?
有多少条边?
8个顶点,12条边
(3)图N中若编号为i的顶点的单链表中有两个表结点,则它的第2个邻接顶点的编号是什么?
其相应的顶点值是什么?
是vex[i]->
adjno,顶点值:
vex[i]->
data
(4)画出图N的逻辑结构图。
4、若二叉树结点结构是:
(1)画出所示二叉树的二叉链表存储结构图
(2)写出它的前序、中序、后序和层次遍历的结点值输出序列
前序:
ABDCEGHF
中序:
DBAGEHCF
后序:
DBGHEFCA
层次:
ABCDEFGH
5、请给出下图所示的有向图的邻接矩阵和邻接表两种存储形式。
五、应用题(参考平时作业)
1、若一个有序表表长为19
(1)画出对其进行二分查找的二叉判定树。
(2)在等概率假定条件下,计算对该表进行二分查找时查找成功的平均查找长度和查找不成功的平均查找长度。
解:
2、已知二叉树T的前序(先根)遍历序列和中序(中根)遍历序列分别为EDCHABFGI和DHCEFBGIA。
1试求出(画出)二叉树T;
2画出与二叉树T对应的中序线索二叉树。
(8分)
3、一段电文中所出现的字符集为{C1,C2,C2,C4,C5,C6,C7,C8},它们在电文中出现的频率集为{7,13,20,4,5,18,25,8}
(1)画出相应的哈夫曼树。
(2)写出每个字符的哈夫曼编码。
(3)计算哈夫曼树的带权路径长WPL。
4、设哈希表地址范围为0~12,哈希函数为H(k)=kmod13,若采用线性探测再散列方法处理冲突,若输入的关键字序列为{18,26,25,24,37,14}
(1)画出由此生成的哈希表。
(2)计算在等概率假定条件下,对其进行哈希查找时查找成功的平均查找长度和查找不成功的平均查找长度。
5、已知一个图的顶点集V和边集H分别为:
V={0,1,2,3,4,5,6,7}
E={(0,1)8,(0,2)5,(0,3)2,(1,5)6,(2,3)25,(2,4)13,(3,5)9,(3,6)10,(4,6)4,(5,7)20};
按照克鲁斯卡尔算法求出最小生成树。
6、二叉树结点数值采用顺序存储结构,如图3所示。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
e
a
f
d
g
c
j
h
i
b
图3
(1)画出此二叉树的树型表示;
(2)写出其先序遍历、中序遍历和后序遍历结果;
(3)写出结点值c的父结点,其左、右孩子。
7、画出对长度为10的有序表进行二分查找的一棵判定树,并求其等概率时查找成功和查找不成功的平均查找长度。
8、依次输入表(30,15,28,20,24,10,12,68,35,50,46,55)中的元素,生成一棵二叉排树。
1试画出生成之后的二叉排序树;
2对该二叉排序树作中序遍历,试写出遍历序列;
3假定每个元素的查找概率相等,试计算该二叉排序树的平均查找长度。
六、算法填充题
1、已知L无头结点的单链表,且P结点既不是首元结点也不是尾元结点。
按要求从下列语句中选择合适的语句序列。
a)在P结点后插入S结点的语句序列是:
(4)
(1)。
b)在P结点前插入S结点的语句序列是:
(7)(11)(8)(4)
(1)。
c)在表首插入S结点的语句序列是:
(5)(12)。
d)在表尾插入S结点的语句序列是:
(9)
(1)(6)。
供选择的语句有:
(1)P->
next=S;
(2)P->
next=P->
next;
(3)P->
next=S->
(4)S->
(5)S->
next=L;
(6)S->
next=NULL;
(7)Q=P;
(8)while(P->
next!
=Q)P=P->
(9)while(P->
=NULL)P=P->
(10)P=Q;
(11)P=L;
(12)L=S;
(13)L=P。
2、设单链表的结点结构为,请在每个横线上填上恰当的语句。
下面的算法实现在带头结点的单链表L的第i个结点前插入元素值为x的结点的操作。
Insert(linklistL,inti,elemtypex)
{
linklistp,q;
intj;
p=L;
j=0;
while(j!
=i-1&
&
p!
=NULL)
{
p=p->
next;
j=j+1;
}
if(p!
q=(linklist*)malloc(sizeof(linklist));
q->
data=x;
next=p->
p->
next=q;
else
printf(〝i值越界!
〞);
}
3、
一个带头结点的单链表如下所示,头指针为head,结点按data值递增有序
下面给出的是将r指针所指的新结点(其data域值已存储)插入链表而仍保持按data值递增有序的算法。
请在算法的空白处填入适当的内容。
Structnode{
Intdata;
Structnode*next;
};
structnode*insert_node(structnode*head,structnode*r){
structnode*p,*pred;
pred=__head____;
p=head->
next;
while(__p!
=NULL_&
p->
data<
=r->
data){
pred=p;
_p=p->
next__;
r->
next=__p______;
_pre->
next=r_____;
return(head);
4.下面给出的是一个在二叉树中查找值为x的结点,并打印该结点所有祖先结点的算法。
在此算法中,假设值为X的结点不多于一个。
此算法排序的非递归遍历形式。
因退栈时需要区分其左、右子树是否已经遍历,故在结点进栈时附带有一个标志=0,进入左子树,=1,进入右子树栈ST保存结点指针ptr以及标志tag,top是栈顶指针。
voidprint(BinTreeNode*t;
Type&
x){
stackST;
inti,top;
top=0;
//置空栈
while(t!
=NULL&
t→data!
=x||top!
=0){//寻找值为X的结点
while(t!
=x){
①_____t=t->
lchild___;
ST[top].ptr=t;
//进栈
ST[top].tag=0;
②___top=top+1______;
}
if(t!
t→data==x)//找到值为X的结点
for(i=1;
③____i<
top__;
i++)
cout<
<
ST[i].ptr→data<
endl;
else{
while(top>
0&
ST[top].tag==1)//未找到值为X的结点
top--;
if(top>
0){
ST[top].tag=1;
//转向右子树
④___print(t->
rchild,x)______;
}
}
}
七、算法设计题
1、若一个具有n(n>
0)个整数的数列,采用以head为头指针的带头结点的单链表作存储结构。
请编写求单链表长度并输出首元结点和尾元结点值的算法。
假定有如下说明定义:
typedefstructnode{
intdata;
structnode*next;
}node;
StatusLocateLength(node*head)
inti=0;
node*p;
{cout<
”首元结点为:
”<
i=1;
{cout<
”对不起,该单链表无元素!
长度为0!
returnOK;
while(p!
{p=p->
i=i+1;
cout<
”尾元结点为:
”单链表长度为:
i<
returnOK;
2、编写一个递归算法,统计并返回以BT为树根指针的二叉树中的叶子结点的个数。
IntCount(BtreeNode*BT)
staticintcount=0;
if(T){
if((!
T->
lchild)&
(!
rchild))
count++;
//对叶子结点计数
else{
C