数据结构复习资料.docx
《数据结构复习资料.docx》由会员分享,可在线阅读,更多相关《数据结构复习资料.docx(21页珍藏版)》请在冰豆网上搜索。
数据结构复习资料
数据结构复习资料
一.单项选择题
1.算法指的是()。
A.计算方法B.排序方法C.特定问题求解步骤的描述D.调度方法
2.下列数据结构中,()是非线性结构。
A.栈B.队列C.完全二叉树D.堆
3.若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用()存储方式最节省时间。
A.顺序表B.双向链表C.单循环链表D.带头结点的双循环链表
4.队列的操作原则是()
A.先进先出B.后进先出C.先进后出D.不分顺序
5.栈和队列的共同特点是()。
A.都是先进先出B.都是先进后出C.都是只允许在端点处插入和删除D.没有共同点
6.在一棵高度为k的满二叉树中,结点总数为()。
A.2k-1B.2kC.2k-1D.
7.在下列存储形式中,哪一个不是树的存储形式?
()
A.双亲链表表示法B.孩子链表表示法C.孩子兄弟链表表示法D.顺序存储表示法
8.n个结点的完全有向图含有边的数目为()。
A.n*nB.n*(n+1)C.n/2D.n*(n-1)
9.n个顶点的强连通图至少有()条边。
A.nB.n-1C.n+1D.n(n-1)
10、高度为k的二叉树的最大结点数为()。
A、2kB、2k-1C、2k–1D、2k-1–1
11、下列哪一种图的邻接矩阵是对称矩阵?
()
A、有向图B、无向图C、AOV网D、AOE网
12、在下列存储形式中,哪一个不是树的存储形式?
()
A、双亲表示法B、孩子表示法
C、孩子兄弟表示法D、顺序存储表示法
13、下面哪一方法可以判断出一个有向图是否有环。
()
A、深度优先遍历B、拓扑排序
C、求最短路径D、广度优先遍历
14.适用于折半查找的表的存储方式及元素排列要求为()。
A.链接方式存储,元素无序B.链接方式存储,元素有序
C.顺序方式存储,元素无序D.顺序方式存储,元素有序
15、一个算法应该是()。
A、程序B、特定问题求解步骤的描述
C、要满足五个基本特性D、A和C
16、算法分析的两个主要方面是()。
A、空间复杂度和时间复杂度B、正确性和简明性
C、可读性和文档性D、数据复杂性和程序复杂性
17、以下数据结构中,()是非线性数据结构。
A、树B、字符串C、队D、栈
18.下列算法中()不能保证每趟排序至少能将一个元素放到其最终的位置上。
A.快速排序B.希尔排序C.堆排序D.冒泡排序
19.采用顺序查找法查找长度为n的线性表,查找成功的平均查找长度为()
A.nB.n/2C.(n-1)/2D.(n+1)/2
20.设广义表L=((a,b,(x,y)),(a,b,(x,y))),则head(head(tail(L)))为()
A.aB.(x,y)C.(a,b,(x,y))D.L
21、最小生成树指的是()
A、由连通网所得到的边数最少的生成树
B、由连通网所得到的顶点相对较少的生成树
C、连通网中所有生成树中权值之和为最小的树
D、连通网的极小连通子图
22、对线性表进行折半查找时,要求线性表必须()。
A、以顺序方式存储B、以顺序方式存储,且数据元素有序
C、以链接方式存储D、以链接方式存储,且数据元素有序
23.下面关于串的叙述中,正确的是()
A.一个串的字符个数即为该串的长度B.一个串的长度至少为1
C.空串是一个由空格字符组成的串D.两个串s1和s2若长度相同,则这两个串相等
24.排序的算法很多,若按排序的稳定性和不稳定性分类,则()是不稳定排序。
A、冒泡排序B、归并排序
C、直接插入排序D、希尔排序
25.线性表是具有n个()的有限序列。
A.表元素B.字符C.数据元素D.数据项
26.栈的操作原则是()
A.先进先出B.后进先出C.后进后出D.不分顺序
27.下列排序算法中,在待排数据已有序时,花费时间反而最多的是()排序。
A.冒泡排序B.希尔排序C.快速排序D.堆排序
28.设无向图的顶点个数为n,则该图最多有()条边
A.n-1B.n(n-1)/2C.n(n+1)/2D.n2
29.队列的操作原则是()
A.先进先出B.后进先出C.先进后出D.不分顺序
30.以下()不是队列的基本运算。
A.从队尾插入一个新元素B.读取队头元素的值
C.判断一个队列是否为空D.从队列中删除第i个元素
31、()是数据不可分割的最小单位。
A、数据结构B、数据对象
C、数据元素D、数据项
32、线性表采用链式存储时,其地址()。
A、必须是连续的B、一定是不连续的
C、部分地址必须是连续的D、连续与否均可以
33、带头结点的单链表(头指针为head)为空的判定条件是()。
A、head==NULLB、head->next==NULL
C、head->next==headD、head!
=NULL
34.对线性表,在下列()情况下应当采用链表表示。
A.经常需要随机地存取元素B.经常需要插入和删除操作
C.表中元素需要占据一片连续的存储空间D.表中元素的个数不变
35.将含有100个结点的完全二叉树从根这一层开始,每层从左到右依次对结点编号,根结点的编号为1,编号为71的结点的双亲的编号为()。
A.34B.35C.36D.无法确定
36.按照二叉树的定义,具有3个结点的二叉树有()种。
A.3B.4C.5D.6
37.在数据结构中,从逻辑上可以把数据结构分成()
A.动态结构和静态结构B.紧凑结构和非紧凑结构
C.线性结构和非线性结构D.内部结构和外部结构
38.下面关于串的叙述中,正确的是()
A.一个串的字符个数即为该串的长度B.一个串的长度至少为1
C.空串是一个由空格字符组成的串D.两个串s1和s2若长度相同,则这两个串相等
39.下列广义表是线性表的是()
A.L=(x,(x,y),x)B.L=(a,(a,b))
C.L=(x,y,z)D.L=(x,L,y)
40.n个顶点的强连通图至少有()条边。
A.nB.n-1C.n+1D.n(n-1)
41.当初始序列已经按键值有序,用直接插入算法对其进行排序,需要比较的次数为()
A.n-1B.nC.log2nD.nlog2n
42、某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用()存储方式最节省运算时间。
A、单链表B、仅有头指针的单循环链表
C、双向链表D、仅有尾指针的单循环链表
43、常对数组进行的两种基本的操作是()。
A、建立与删除B、索引和修改
C、查找和修改D、查找和索引
44.下列广义表是线性表的是()
A、L=(x,(x,y),x)B、L=(a,(a,b))
C、L=(x,y,z)D、L=(x,L,y)
45.采用顺序查找法查找长度为n的线性表,查找成功的平均查找长度为()
A.nB.n/2C.(n-1)/2D.(n+1)/2
二.判断题
1.在具有头结点的链式存储结构中,头指针指向链表中的第一个数据结点。
()
2.在单链表中要访问某个结点,只要知道该结点的指针即可,因此,单链表是一种随机存取结构。
()
3.栈和队列都是线性表,只是在插入和删除时受到了一些限制。
()
4.串是一种数据对象和操作都特殊的线性表。
()
5.广义表是线性表的推广,是一类线性数据结构。
()
6.二叉树中不存在度大于2的结点,当某个结点只有一棵子树时,没有左右子树之分。
()
7.将一棵树转化为二叉树后,根结点没有左子树。
()
8.有回路的图不能进行拓扑排序。
()
9.装填因子是散列表的一个重要参数,它反映散列表的装满程度。
()
10.内部排序中的快速排序方法,在任何情况下均可得到最快的排序效果。
()
三.填空题
1.顺序存储结构是通过表示元素之间的关系的。
2.对于一个头指针为head的带头结点的单链表,判定该表为空表的条件是。
3.一个字符串中称为该串的子串。
4.求图的最小生成树有两种算法,算法适合于求边稀疏的网的最小生成树,算法适合于求边稠密的网的最小生成树。
5.栈的特点是,队列的特点是,栈和队列都是操作受限的线性表。
6.对矩阵采用压缩存储的目的是为了。
7.深度为8的完全二叉树至少有个结点。
8.一个无序序列可以通过构造一棵树而变成一个有序序列,构造树的过程即为对无序序列进行排序的过程。
9.按照所涉及的存储设备的不同,排序分为和两大类。
10.一个算法的效率可分为效率和效率。
11.在有向图G中,若任意两个顶点Vi和Vj都连通,即从Vi到Vj和从Vj到Vi都存在路径,则称该图为。
12.在各种查找方法中,其平均查找长度与结点个数n无关的查找方法是
13.在单链表p结点之后插入s结点的操作是和。
14.顺序存储结构是通过表示元素之间的关系的。
15.链式存储结构是通过表示元素之间的关系的。
16.若不考虑基数排序,则在排序过程中,主要进行的两种基本操作是关键字的和记录的。
17.分别采用堆排序、快速排序、冒泡排序和归并排序,对初始状态为有序的表,则最省时间的是算法。
18.空格串是指,其长度等于。
19.有n个叶子结点的哈夫曼树的结点总数为。
20.在哈希表中,装填因子的值越大,则发生的可能性越大。
21.仅允许在表的同一端进行插入和删除运算的线性表被称为。
四.解答题
1.已知一棵二叉树如图所示,分别写出它的先序遍历序列、中序遍历序列和后序遍历序列。
2.已知二叉树的后序序列为:
HGAEBFC,中序序列为:
HBGEACF,要求画出该二叉树。
3、已知完全二叉树的第七层有10个叶子结点,则整棵二叉树的结点数最多是多少?
4.列出下图中从顶点1开始的所有拓扑排序序列。
5、已知无向带权图,
(1)写出它的邻接矩阵。
(2)从顶点A出发,求它的深度优先搜索遍历的顶点序列。
(3)从顶点A出发,求它的广度优先搜索遍历的顶点序列。
6.下面的邻接表表示一个给定的无向图,请根据邻接表:
(1)画出该无向图的图形。
(2)给出以顶点V1为起点的深度优先遍历的顶点序列及对应的生成树。
7.下面的邻接表表示一个给定的无向图,请根据邻接表:
(1)画出该无向图的图形。
(2)列出从顶点1出发的深度优先搜索遍历该图所得的顶点序列。
(3)列出从顶点1出发的广度优先搜索遍历该图所得的顶点序列。
8、根据下面所示的无向图,要求
(1)画出无向图对应的邻接表;
(2)根据无向图,列出从顶点1出发的深度优先和广度优先搜索遍历该图所得的顶点序列。
9.设无向网如下图所示,按克鲁斯卡尔算法求网的最小生成树,要求画出执行过程。
10.假定对长度为11的有序表进行折半查找:
(1)画出描述折半查找过程的判定树。
(2)假定每个元素的查找概率相等,求查找成功时的平均查找长度。
11、假定对有序表(3,4,5,7,24,30,42,54,63,72,87,95)进行折半查找。
(1)画出描述折半查找过程的判定树
(2)假定每个元素的查找概率相等,求查找成功时的平均查找长度
12.判断下列序列是否为堆,若不是堆,则把它调整为堆。
(1)(100,86,48,73,35,39,42,57,66,21)
(2)(5,56,20,23,40,38,29,61,35,76,28,100)
13.使用哈希函数H(key)=keymod11,把一个整数值转换成哈希表下标,现要把数据{1,13,12,34,38,33,27,22}插入到哈希表中,表的长度为11,用线性探查法解决冲突,要求构造哈希表,并求出在等概率情况下,查找成功时的平均查找长度。
14.待排序的数据元素序列为{49,38,65,97,76,13,27,
,55,4},设希尔增量分别为5,3,1,画出用希尔排序法进行排序的过程。
15.判断序列(12,70,33,65,24,56,48,92,86,
)是否为堆,若不是堆,则把它调整为堆。
16、待排序的数据元素序列为{49,38,65,97,76,13,27,
,55,4},设希尔增量分别为5,3,1,画出用希尔排序法进行排序的过程。
五、阅读题
1.简述算法的功能(栈和队列的元素类型均为整型)。
voidalgo(Queue&Q)
{
StackS;intd;
InitStack(S);
while(!
QueueEmpty(Q))
{
DeQueue(Q,d);Push(S,d);
}
while(!
StackEmpty(S))
{
Pop(S,d);EnQueue(Q,d);
}
}
2.算法f6的功能是什么?
Voidf6(Statck&S1,Statck&S2)
{
Statcktemp;
DataTypex;
InitStack(&temp);
while(!
StackEmpty(S1))
{
x=Pop(&S1);
Push(&temp,x);
}
while(!
StackEmpty(S2))
{
x=Pop(&S2);
Push(&S1,x);
}
while(!
StackEmpty(temp))
{
x=Pop(&temp);
Push(&S2,x);
}
}
3.以下算法的功能是实现冒泡排序,请在下面画线处填入适当的内容,以使该算法在发现有序时能及时停止。
#defineMAXSIZE100
typedefstructpnode{
intkey;
intoth;/*其它域,根据需要设定*/
}pnode;
voidbubblesort(pnoder[MAXSIZE],intn)
{
i=1;
do{
tag=0;
for(j=n;j>i;j--)
if(r[j].key{
x=r[j];r[j]=r[j-1];
r[j-1]=x;
(1);
}
(2);
}while(tag==1&&(3))
4.已知链串的存储结构描述如下:
#defineNodeSize4
typedefstructNode{
chardata[NodeSize];
structNode*next;
}*LinkStr;
阅读算法f7,并回答问题:
(1)s1和s2的串值分别为″Student″和″Studying″时,写出f7(t1,t2)的返回值;
(2)简述函数f7的功能。
intf7(LinkStrs1,LinkStrs2)
{//串值以′′为结束符
while
(1)
{
for(i=0;i{
if(s1->data[i]=="&&s2->data[i]==")
return0;
if(s1->data[i]=="))
return–1;
if(s2->data[i]=="))
return1;
if(s1->data[i]>s2->data[i])
return1;
if(s1->data[i]data[i])
return–1;
}
s1=s1->next;
s2=s2->next;
}
}
5、已知链串的存储结构描述如下:
#defineNodeSize4
typedefstructNode{
chardata[NodeSize];
structNode*next;
}*LinkStr;
阅读算法f3,简述f3的功能。
intf3(LinkStrs1,LinkStrs2)
{//串值以′\0′为结束符
while
(1)
{
for(i=0;i{
if(s1->data[i]==′\0′&&s2->data[i]==′\0′)
return0;
if(s1->data[i]==′\0′)
return–1;
if(s2->data[i]==′\0′)
return1;
if(s1->data[i]>s2->data[i])
return1;
if(s1->data[i]data[i])
return–1;
}
}
6.算法f1是中序遍历二叉树,完整算法中的空缺。
voidf1BiTreeT)
{
InitStack(&S);
P=T;
while(p||!
StackEmpty(s))
{
if(P)
{
Push(&S,P);
①
}
else
{
Pop(&S,P);
visit(P->data);//visit为访问结点P的数据
②
}
}
}
①
②
7、已知二叉排序树以二叉链表做存储结构,其根结点指针为t,p为二叉排序树中的指定结点。
阅读算法,并简述算法的功能
typedefstructBiTNode{
TElemTypedata;
StructBiTNode*lchild,*rchild;
}BiTNode,*BiTree;
intcount(BiTreep,BiTreet){
h=0;t1=t;
if(t1==NULL)return0;
else{h=h+1;
while(t1—>data!
=p—>data)
{if(t1—>data
data)t1=t1—>rchild;
elset1=t1—>lchild;
h=h+1;
}
}
returnh;
}
8、简述算法f2的功能(栈和队列的元素类型均为整型)
voidf2(Queue&Q){
StackS;intd;
InitStack(S);
while(!
QueueEmpty(Q)){
DeQueue(Q,d);Push(S,d);
}
while(!
StackEmpty(S)){
Pop(S,d);EnQueue(Q,d);
}
}
9.说明算法f6的功能。
voidf6(Queue*Q)
{
DataTypex;
StackS;
InitSatck(&S);
while(!
QueueEmpty(Q))
{
x=DeQueue(Q);
Push(&S,x);
}
While(!
StackEmpty(&S))
{
x=Pop(&S);
EnQueue(Q,x);
}
}
10、简述算法f1的功能(栈的元素类型SElemType为int)
voidf1(StackS,inte)
{
StackT;
intd;
InitStack(T);
while(!
StackEmpty(S)){
Pop(S,d);
if(d!
=e)Push(T,d);
}
while(!
StackEmpty(T)){
Pop(T,d);
Push(S,d);
}
}
11.指出下面函数f7的功能及返回值的含义。
intf7(chars1[],chars2[])
{
inti=0,j=0;
while(s1[i]&&s2[j])
{
if(s1[i]>s2[j])
return1;
elseif(s1[i]return-1;
else
{
i++;j++;
}
}
if(s1[i])
return1;
elseif(s2[j])
return-1;
else
return0;
}
六.算法设计题
1、假设带头结点的单链表表示线性表,单链表的类型定义如下:
typedefstructnode{
intdata;
structnode*next;
}LinkNode,*LinkList;
逆位序输入线性表的n个数据元素,编写建立带头结点的单链表的算法
2、假设以带头结点的单链表表示有序表,单链表的类型定义如下:
typedefstructnode{
intdata;
structnode*next;
}LinkNode,*LinkList;
已知线性表L中的元素以值非递减有序排列,并以上述结构作为存储结构(带头结点),设计算法删除表中所有值相同的多余元素(使操作后的线性表中的所有元素的值均不相同),同时释放被删结点空间。
3、带头结点的单链表(head为头指针)中的数据元素非递减有序,单链表的类型定义如下:
typedefstructnode{
intdata;
structnode*next;
}LNode,*LinkList;
要求编写算法将数据元素x插入到单链表中的适当位置,插入后仍保持单链表非递减有序。
4、设以带头结点的单链表表示有序表,单链表的类型定义如下:
typedefstructnode{
intdata;
structnode*next;
}LinkNode,*LinkList;
已知线性表L的数据元素是无序的,以上述结构(带头结点)作为存储结构。
编写算法,删除表中所有值大于min且小于max的元素(若表中存在这样的元素),同时释放被删结点空间。