数据结构期末练习题.docx
《数据结构期末练习题.docx》由会员分享,可在线阅读,更多相关《数据结构期末练习题.docx(20页珍藏版)》请在冰豆网上搜索。
数据结构期末练习题
1.数据的不可分割的基本单位是(A )。
A.元素 B.结点 C.数据类型 D.数据项
2.计算机处理数据的最小单位是( D)。
A.元素 B.结点 C.数据类型 D.数据项
3.算法是指(C )。
A.计算方法 B.排序方法
C.解决问题的有限运算步骤 D.查找方法
4.顺序存储结构中数据元素之间的逻辑关系是由(C)表示的
A线性结构B非线性结构C存储位置 D指针
5.单循环链表的主要优点是(B)。
A 不再需要头指针了 B 从表中任一结点出发都能扫描到整个链表;
C已知某个结点的位置后,能够容易找到它的直接前趋;
D在进行插入、删除操作时,能更好地保证链表不断开。
6.
此题的解决步骤是如果出现一个三元素顺序是a、b、c,且a>c>b,则为不可能序列
一个栈的入栈序列是1,2,3,4,5,则栈的不可能的输出序列是(C)。
A54321B45321 C43512D12345
7.常对数组进行的两种基本操作是( B )
A.建立和删除ﻩﻩB.索引和修改ﻩﻩC.插入和修改ﻩD.插入和索引
8.算法分析的两个主要方面是(A)。
A空间性能和时间性能B正确性和简明性C可读性和文档性D数据复杂性和程序复杂性
9.在解决计算机主机与打印机之间速度不匹配问题时通常设置一个打印缓冲区,该缓冲区应该是一个( B)结构。
//需满足先进先出原则
A栈B队列C数组D线性表
10.二维数组A的每个元素是由6个字符组成的串,行下标的范围从0~8,列下标的范围是从0~9,则存放A至少需要( D)个字节。
A90B 180C240 D540
11.讨论树、森林和二叉树的关系,目的是为了( B)。
A借助二叉树上的运算方法去实现对树的一些运算
B 将树、森林按二叉树的存储方式进行存储并利用二叉树的算法解决树的有关问题
C将树、森林转换成二叉树
D 体现一种技巧,没有什么实际意义
12.算法在发生非法操作时可以作出处理的特性称为( A )。
A健壮性 B确定性C可行性D正确性
13.二叉排序树中,最小值结点的(A)。
A左指针一定为空 B右指针一定为空C左、右指针均为空 D左、右指针均不为空
14.算法指的是(A)。
A对特定问题求解步骤的一种描述,是指令的有限序列。
B计算机程序
C解决问题的计算方法 D数据处理
15.算法分析的目的是( C)。
A.找出数据结构的合理性 B.研究算法中输入和输出的关系
C.分析算法的效率以求改进 D.分析算法的易读性和文档性
16.若某线性表中最常用的操作是取第i 个元素和找第i个元素的前趋,则采用(A)存储方法最节省时间。
A顺序表B单链表C双链表 D单循环链表
17.在一个单链表中,已知q所指结点是p所指结点的直接前驱,若在q和p之间插入s所指结点,则执行(B)操作。
As->next=p->next;p->next=s; B q->next=s; s->next=p;
Cp->next=s->next;s->next=p;Dp->next=s;s->next=q;
(1)s->next=p->next;
(2)p->next=s;
(3)s=p->next;
分别代表什么含义?
1)把p的下一个节点接到s的下一个节点上
2)把s接到p的下一个节点上
3)把p的一下个节点赋值给s
18.若一个栈的输入序列是1,2,3,…,n,输出序列的第一个元素是n,则第i个输出元素是(D)。
A不确定 Bn-i Cn-i-1D n-i+1
19.设有两个串p和q,求q在p中首次出现的位置的运算称作( B )。
A连接 B 模式匹配C求子串 D求串长
20.将数组称为随机存取结构是因为(B)。
A数组元素是随机的B对数组任一元素的存取时间是相等的
C 随时可以对数组进行访问D数组的存储结构是不定的
21.一个高度为h的满二叉树共有n个结点,其中有m个叶子结点,则有(D)成立。
An=h+mB h+m=2n Cm=h-1Dn=2m-1
22.队列的操作原则是(B)。
A. 先进后出B.先进先出 C.只能进行插入D.只能进行删除
23.散列技术中的冲突指的是(D )。
A两个元素具有相同的序号 B两个元素的键值不同,而其他属性相同
C数据元素过多D不同键值的元素对应于相同的存储地址
24.在栈中,栈顶指针top指示( B)。
A.栈底元素的位置ﻩﻩB.栈顶元素的位置ﻩ
C.栈中任何元素的位置ﻩD.以上均不对
25.将数组称为随机存取结构是因为(B )。
A.数组元素是随机的 B. 对数组任一元素的存取时间是相等的
C.随时可以对数组进行访问 D. 数组的存储结构是不定的
26.下面(C)不是算法所必须具备的特性。
A有穷性B确切性 C 高效性 D 可行性
27.在一棵树中,(B)没有后继结点。
A. 根结点ﻩB.叶子结点C.分支结点ﻩD.所有结点
28.若链表中最常用的操作是在最后一个结点之后插入一个结点和删除第一个结点,则采用(D)存储方法最节省时间。
A单链表 B带头指针的单循环链表 C 双链表D带尾指针的单循环链表
29.设栈S和队列Q的初始状态为空,元素e1、e2、e3、e4、e5、e6依次通过栈S,一个元素出栈后即进入队列Q,若6个元素出队的顺序是e2、e4、e3、e6、e5、e1,则栈S的容量至少应该是(C)。
A6B4 C 3 D2
30.二维数组A的每个元素是由6个字符组成的串,行下标的范围从0~8,列下标的范围是从0~9,A的第8列和第5行共占(C)个字节。
A114 B54 C108 D540
31.在一棵树中,每个结点最多有(B)个前驱结点。
A.0B.1 C.2 D.任意多个
32.一个队列的入队顺序是1,2,3,4,则队列的输出顺序是(B)。
A 4321 B1234C1432D 3241
33.下面的说法中,不正确的是(C)。
A 数组是一种线性结构B数组是一种定长的线性结构
C除了插入与删除操作外,数组的基本操作还有存取、修改、检索和排序等
D数组的基本操作有存取、修改、检索和排序等,没有插入与删除操作
34.队列的操作原则是( B)。
A.先进后出 B. 先进先出C. 只能进行插入 D. 只能进行删除
35.如果结点A有3个兄弟,B是A的双亲,则结点B的度是( D)。
A1 B2 C3D4
36.静态查找与动态查找的根本区别在于(B)。
A它们的逻辑结构不一样 B 施加在其上的操作不同
C所包含的数据元素的类型不一样D存储实现不一样
37.在一个具有n个单元的顺序栈中,假定以地址低端(即下标为0的单元)作为栈底,以top作为栈顶指针,当出栈时,top的变化为(B)。
A不变 Btop=top-1 Ctop=0 Dtop=top+1
38.算法是指(C)
A.计算方法 B.排序方法C.解决问题的有限运算步骤 D.查找方法
39.算法能正确地实现预定功能的特性称为 (A)。
A.正确性 B.易读性 C.健壮 D.高效率
40.线性表的顺序存储结构是一种( A )的存储结构。
A 随机存取 B顺序存取 C索引存取 D散列存取
41.假设有如下遗产继承规则:
丈夫和妻子可以相互继承遗产;子女可以继承父亲或母亲的遗产;子女间不能相互继承。
则表示该遗产继承关系的最合适的数据结构应该是(B)。
A树 B图C 线性表 D 集合
42.数组通常具有两种基本运算,即(B)
A.创建和删除ﻩﻩﻩﻩB.读取和修改
C.插入和删除ﻩﻩﻩﻩﻩD.排序和查找
43.线性表采用链接存储时,其地址(D )。
A必须是连续的 B部分地址必须是连续的C一定是不连续的 D连续与否均可以
44.下面(C)不属于特殊矩阵。
A 对角矩阵 B三角矩阵 C稀疏矩阵 E对称矩阵
45.线性表的第一个元素叫做( A)。
A.表头元素ﻩB.表尾元素C.前驱元素D.后继元素
46.线性表的最后一个元素叫做( B)。
A.表头元素ﻩB.表尾元素ﻩﻩC.前驱元素ﻩﻩD.后继元素
47.设二叉树有n个结点,则其深度为(C)。
An-1 B n Clog2n向下取整+1 D不能确定
当深度(高度)为h时,结点数n满足:
可知,所以其深度h为向下取整+1
48.G是一个非连通无向图,共有28条边,则该图至少有( D)个顶点。
A6 B7 C8 D 9
取出一个点作为一个无向图,其余点作为另一个无向图,则其点连线最多,使用的点最少,,共需9个点
49.在以下哪种情况下,不能执行出栈操作?
(B )
A.栈满ﻩB.栈空ﻩﻩC.任何情况均可ﻩD.任何情况均不可
50.下列数据结构中,(D)不是线性结构。
A.栈 B.队列C.数组 D.树
51.栈又称为( B )表。
A.先进先出ﻩB.后进先出D.不进不出D.以上均不对
52.在以下哪种情况下,不能执行入栈操作?
(A)
A.栈满ﻩB.栈空ﻩC.任何情况均可ﻩﻩD.任何情况均不可
53.下面(C)不属于特殊矩阵。
A. 对角矩阵B.三角矩阵C.稀疏矩阵 D. 对称矩阵
54.一个队列的入队顺序是1,2,3,4,则队列的输出顺序是(B )。
A.4321 B.1234 C.1432 D.3241
55.在一棵树中,每个结点最多有(B)个前驱结点。
A.0 B. 1 C.2D.任意多个
56.非空树有(B )个根结点。
A.0B.1ﻩC.2ﻩD.任意多个
57.串是一种特殊的线性表,其特殊性体现在( B)
A.可以顺序存储ﻩﻩB.数据元素是一个字符ﻩ
C.可以链接存储ﻩﻩD.数据元素可以是多个字符
58.在以下哪种情况下,不能执行出栈操作?
(B)
A.栈满ﻩB.栈空C.任何情况均可ﻩD.任何情况均不可
59.数组中的数据元素的类型(A)。
A.必须相同B.不必相同ﻩﻩC.一定不能相同ﻩD.以上都不对
60.下列数据结构中,(D)不都是线性结构。
A.栈和队列 B.队列和数组 C.数组和串 D.树和队列
61.关于空串与空格串,下面说法正确的是(C)。
A.空串与空格串是相同的 ﻩB.空串与空格串长度是相同的
C.空格串中存放的都是空格ﻩD.空串中存放的都是NULL
62.递归可采用下面哪种结构实现(B)//栈实现了递归
A.队列B.栈ﻩC.树ﻩﻩD.图
63.栈操作的原则是( B )
A.先进先出ﻩﻩB.后进先出C.只能进行插入D.只能进行删除
64.在关键字序列(4, 12, 23, 55,56,67,88)中,使用折半查找法查找56,需要比较多少次( C)
A.1B.2C.3ﻩD.4
65.如果一个函数在其函数体中调用自己本身,则该函数叫做(B )。
A.重载函数B.递归函数ﻩC.普通函数ﻩD.成员函数
66.线性表若采用链式存储结构时,要求内存中可用存储单元的地址(D)
A.必须是连续的 B.部分地址必须是连续的
C.一定是不连续的 D.连续或不连续都可以
67.设计一个判别表达式中左右括号是否配对的算法,采用(B)数据结构最佳。
A 顺序表 B栈 C队列D链表
68.下面的说法中,不正确的是( D)。
A对称矩阵只须存放包括主对角线元素在内的下(或上)三角的元素即可。
B对角矩阵只须存放非零元素即可。
C稀疏矩阵中值为零的元素较多,因此可以采用三元组表方法存储。
D 稀疏矩阵中大量值为零的元素分布有规律,因此可以采用三元组表方法存储。
69.按( B)遍历二叉排序树得到的序列是一个有序序列。
A前序B中序 C后序D 层次
二.应用题
1.计算下列式子的时间复杂度。
(1)2n3+100log2n+12
(2)5+n2+n!
ﻩ
(3)10+20n+2n
2.有三个元素按a、b、c的次序依次进栈,且每个元素只允许进一次栈,列出所有可能的出栈序列。
abc,acb,bca,bac,cba
3.栈S=(a,b,c),在栈中插入1个元素d,再从栈中删除一个元素,请写出S的变化过程。
S=(a,b,c,d)-> S=(a,b,c)
4.队列Q=(a,b,c),在队列中插入1个元素d,再从队列中删除一个元素,请写出Q的变化过程。
Q=(a,b,c,d)->Q=(b,c,d)
5.
假设下图是一棵二叉树,请根据下图回答下列问题
1哪个是根结点?
ﻩﻩA
2哪些是叶子结点?
DEG
3哪个是结点C的双亲?
ﻩA
4哪些是结点C的孩子?
EF
5C的兄弟是哪个结点?
ﻩB
6F的堂兄弟是哪个结点?
ﻩD
7哪些结点是C的子孙结点?
ﻩEFG
8树的深度是多少?
4
9树的度是多少?
2
10请写出该树的先根遍历序列、中根序列、后根序列、层次遍历序列。
先序:
ABDCEFG
中序:
BDAECGF
后序:
DBEGFCA
层序:
ABCDEFG
6.分别用prim算法和kruskal算法构造下图的最小生成树。
√
7.若对序列(56,23,67,4,88,12,55)采用直接插入排序法和冒泡排序法进行排序,请写出每一趟的结果。
直接插入排序法:
(23,56)67,4,88,12,55
(23,56,67)4,88,12,55
(4,23,56,67)88,12,55
(4,23,56,67,88)12,55
(4,12,23,56,67,88)55
(4,12,23,55,56,67,88)
冒泡排序法:
(23,56,4,67,12,55,88)
(23,4,56,12,55,67,88)
(4,23,12,55,56,67,88)
(4,12,23,55,56,67,88)
8.写出利用线性表求集合交集、并集和差集的算法
(1)求并集
1初始化集合A、B、C
A=newList(); B=newList();C=newList() ;
2for(i=0;i<n;i++) A.insert(e); //输入集合A的数据元素
for(i=0;i3 for(i=0;i<A.size();i++) //逐个取出集合A中的数据元素,放入到集合C中
{ e=A.get(i);C.insert(e);}
4个取出集合B中的元素,判断该元素是否已存在集合C中
4.1该元素如果不在集合C中,则将其放入集合C中
4.2该元素如果已在集合C中,则重复第4步
for(i=0;i{
e=B.get(i);
if(A.contains(e)==false)
C.insert(e);
}
5 出集合C中的所有数据元素
C.toString();
(2)求交集
1、初始化集合A、B、C
ﻩA=newList();B=newList();C=newList();
2、for(i=0;ifor(i=0;i<m;i++)B.insert(e);//输入集合B的数据元素
3、逐个取出集合B中的元素,判断该元素是否已存在集合C中
ﻩ3.1该元素如果在集合A中,则将其放入集合C中
3.2该元素如果不在集合A中,则重复第3步
for(i=0;i{
e=B.get(i);
if(A.contains(e)==true)
C.insert(e);
}
4、//输出集合C中的所有数据元素
C.toString();
(3)求差集
1、初始化集合A、B、C
A=newList();
B=newList() ;
C=newList();
2、for(i=0;iA.insert(e); //输入集合A的数据元素
for(i=0;i<m;i++)
B.insert(e); //输入集合B的数据元素
3、逐个取出集合A中的元素,判断该元素是否已存在集合B中
ﻩ4.1 该元素如果不在集合B中,则将其放入集合C中
4.2该元素如果已在集合B中,则重复第4步
for(i=0;i<A.size();i++)
{
e=A.get(i);
if(B.contains(e)==false)
C.insert(e);
}
4、//输出集合C中的所有数据元素
C.toString();
9.写出对字符串中的字符ASCII值进行运算来进行加密和解密的算法。
1.从键盘中输入并初始化字符串
Scannersc=newScanner(System.in);
StringBuffers=newStringBuffer(sc.next());
2. 定义一个变量charch;
定义一个变量int i;
3.加密过程
对字符串中每个字符的ASCII值+1
ﻩfor(i=0;i<s.length();i++)
{
ﻩﻩch=s.charAt(i);
ﻩﻩch=(char)((int)(ch)+1);
ﻩﻩs.setCharAt(i,ch);
}
4.输出加密之后的结果
System.out.println("加密之后的字符串是:
"+s);
5.解密过程
对加密串中每个字符的ASCII值执行-1操作
for(i=0;i<s.length();i++)
ﻩﻩ{
ﻩﻩch=s.charAt(i);
ﻩﻩﻩch=(char)((int)(ch)-1);
ﻩs.setCharAt(i,ch);
ﻩ}
6.输出加密之后的结果
System.out.println("解密之后的字符串是:
"+s);
10.写出利用栈,将非负的十进制整数M转化为基于N的N进制数的算法。
1.定义变量
int m,n,e,i;
定义栈
SeqStack
2.从键盘获取非负的十进制整数
System.out.println("请输入要转换的十进制正数:
");
Scanner sc=newScanner(System.in);
m=sc.nextInt();
3.获取转化为基于N的N进制数
System.out.println("请输入要转换的数制:
");
ﻩn=sc.nextInt();
4.用M除N,得到商数和余数,将余数放入栈中;
当商数不为0,继续用商数除N,得到新的商数和余数,余数入栈。
当商数为0,循环结束。
while(m!
=0)
{
ﻩe=m%n;
ﻩs.push(e);
m=m/n;
}
5.输出转化结果,若N为16时则按照如下规则输出结果
System.out.println("转化结果为:
");
while(s.isEmpty()!
=true)
ﻩ{
i=s.pop();
ﻩif(n==16)
ﻩ{
ﻩﻩif(i==10) System.out.print('A'+"");
ﻩelseif(i==11) System.out.print('B'+"");
ﻩelseif(i==12)System.out.print('C'+"");
elseif(i==13) System.out.print('D'+"");
ﻩelse if(i==14)System.out.print('E'+"");
ﻩelseif(i==15)System.out.print('F'+"");
ﻩelseSystem.out.print(i+"");
ﻩ}
elseSystem.out.print(i+"");
}
ﻩSystem.out.println();
}
}
11.写出利用栈和队列,判断一个字符串是否是回文串的算法。
1.取出字符串中的一个字符,分别入栈和入队列。
boolean pal(Stringstr)
{
for(i=0;i
{
ch=str.charAt(i);
S.push(ch);Q.add(ch);
}
2.重复第1步,直到字符串结束。
3.栈顶元素出栈,队头元素出队列,两者比较是否相等
3.1如果不相等,则该字符串不是回文串
3.2如果相等,重复第3步,直到栈为空或者队列为空。
while(S.isEmpty()==false)
{
ﻩch1=S.pop();ch2=Q.poll();
ﻩif(ch1!
=ch2)returnfalse;
}
4.如果栈为空或者队列为空,则该字符串是回文串。
if(S.isEmpty()==true) returntrue;
12.写出求n!
的递归算法。
intfun(intn){
if(n==1||n==0)
return1;
ﻩelse
ﻩreturnn*fun(n-1);
}
13.写出求2个正整数m*n的递归算法。
intmul(intm,int n){
if(m==0||n==0)return0;
elseif(m==1)return n;
ﻩelse returnn+mul(m-1,n);
}
14.写出递归算法求数组中最大值、最小值和平均值。
求数组中的最大值
1.定义递归函数
intmax(int A[],int n)
2.判断n是否为1
2.1若n为1则返回结果A[0]跳转至3
2.2若n不为1则执行递归体并跳转至2
ﻩﻩif(n==1) ret