数据结构练习题Word文档格式.docx
《数据结构练习题Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构练习题Word文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
C.分析算法的效率以求改进D.分析算法的易读性和文档性
18.若某线性表中最常用的操作是取第i个元素和找第i个元素的前趋,则采用(A)存储方法最节省时间。
A顺序表B单链表C双链表D单循环链表
19.在一个单链表中,已知q所指结点是p所指结点的直接前驱,若在q和p之间插入s所指结点,则执行(B)操作。
As->
next=p->
next;
p->
next=s;
Bq->
s->
next=p;
Cp->
next=s->
Dp->
next=q;
20.若一个栈的输入序列是1,2,3,…,n,输出序列的第一个元素是n,则第i个输出元素是(D)。
A不确定Bn-iCn-i-1Dn-i+1
21.设有两个串p和q,求q在p中首次出现的位置的运算称作(B)。
A连接B模式匹配C求子串D求串长
22.将数组称为随机存取结构是因为( B )。
A数组元素是随机的B对数组任一元素的存取时间是相等的
C随时可以对数组进行访问D数组的存储结构是不定的
23.一个高度为h的满二叉树共有n个结点,其中有m个叶子结点,则有(D )成立。
An=h+mBh+m=2nCm=h-1Dn=2m-1
24.队列的操作原则是(B)。
A.先进后出B.先进先出C.只能进行插入D.只能进行删除
26.在栈中,栈顶指针top指示(B)。
A.栈底元素的位置B.栈顶元素的位置
C.栈中任何元素的位置D.以上均不对
28.下面(C)不是算法所必须具备的特性。
A有穷性B确切性C高效性D可行性
29.在一棵树中,(B)没有后继结点。
A.根结点B.叶子结点C.分支结点D.所有结点
31.若链表中最常用的操作是在最后一个结点之后插入一个结点和删除第一个结点,
则采用(D)存储方法最节省时间。
A单链表B带头指针的单循环链表C双链表D带尾指针的单循环链表
32.设栈S和队列Q的初始状态为空,元素e1、e2、e3、e4、e5、e6依次通过栈S,
一个元素出栈后即进入队列Q,若6个元素出队的顺序是e2、e4、e3、e6、e5、e1,
则栈S的容量至少应该是( C )。
A6B4C3D2
33.二维数组A的每个元素是由6个字符组成的串,行下标的范围从0~8,列下标的范围是从0~9,A的第8列和第5行共占( C )个字节。
A114B54C108D540
34.在一棵树中,每个结点最多有(B)个前驱结点。
A.0B.1C.2D.任意多个
35.一个队列的入队顺序是1,2,3,4,则队列的输出顺序是(B)。
A4321B1234C1432D3241
36.下面的说法中,不正确的是( C )。
A数组是一种线性结构B数组是一种定长的线性结构
C除了插入与删除操作外,数组的基本操作还有存取、修改、检索和排序等
D数组的基本操作有存取、修改、检索和排序等,没有插入与删除操作
37.队列的操作原则是(B)。
38.如果结点A有3个兄弟,B是A的双亲,则结点B的度是( D )。
A1B2C3D4
39.静态查找与动态查找的根本区别在于(B)。
A它们的逻辑结构不一样B施加在其上的操作不同
C所包含的数据元素的类型不一样D存储实现不一样
40.在一个具有n个单元的顺序栈中,假定以地址低端(即下标为0的单元)作为栈底,以top作为栈顶指针,当出栈时,top的变化为(B)。
A不变Btop=top-1Ctop=0Dtop=top+1
42.算法能正确地实现预定功能的特性称为(A)。
A.正确性B.易读性C.健壮D.高效率
44.线性表的顺序存储结构是一种(A)的存储结构。
A随机存取B顺序存取C索引存取D散列存取
45.假设有如下遗产继承规则:
丈夫和妻子可以相互继承遗产;
子女可以继承父亲或母亲的遗产;
子女间不能相互继承。
则表示该遗产继承关系的最合适的数据结构应该是(B)。
A树B图C线性表D集合
46.数组通常具有两种基本运算,即(B)
A.创建和删除B.读取和修改
C.插入和删除D.排序和查找
47.线性表采用链接存储时,其地址(D)。
A必须是连续的 B部分地址必须是连续的C一定是不连续的D连续与否均可以
49.线性表的第一个元素叫做(A)。
A.表头元素B.表尾元素C.前驱元素D.后继元素
50.线性表的最后一个元素叫做(B)。
51.设二叉树有n个结点,则其深度为(C)。
An-1BnClog2n向下取整+1D不能确定
52.G是一个非连通无向图,共有28条边,则该图至少有(D)个顶点。
A6B7C8D9
53.在以下哪种情况下,不能执行出栈操作?
( B )
A.栈满B.栈空C.任何情况均可D.任何情况均不可
54.下列数据结构中,(D)不是线性结构。
A.栈B.队列C.数组D.树
55.栈又称为(B)表。
A.先进先出B.后进先出D.不进不出D.以上均不对
56.在以下哪种情况下,不能执行入栈操作?
(A)
60.非空树有(B)个根结点。
A.0B.1C.2D.任意多个
61.串是一种特殊的线性表,其特殊性体现在(B)
A.可以顺序存储B.数据元素是一个字符
C.可以链接存储D.数据元素可以是多个字符
63.数组中的数据元素的类型( A )。
A.必须相同B.不必相同C.一定不能相同D.以上都不对
64.下列数据结构中,(D)不都是线性结构。
A.栈和队列B.队列和数组C.数组和串D.树和队列
65.关于空串与空格串,下面说法正确的是(C)。
A.空串与空格串是相同的B.空串与空格串长度是相同的
C.空格串中存放的都是空格D.空串中存放的都是NULL
66.递归可采用下面哪种结构实现(B)
A.队列B.栈C.树D.图
67.栈操作的原则是(B)
A.先进先出B.后进先出C.只能进行插入D.只能进行删除
69.如果一个函数在其函数体中调用自己本身,则该函数叫做(B)。
A.重载函数B.递归函数C.普通函数D.成员函数
70.线性表若采用链式存储结构时,要求内存中可用存储单元的地址(D)
A.必须是连续的B.部分地址必须是连续的
C.一定是不连续的D.连续或不连续都可以
71.设计一个判别表达式中左右括号是否配对的算法,采用(B)数据结构最佳。
A顺序表B栈C队列D链表
72.下面的说法中,不正确的是( D )。
A对称矩阵只须存放包括主对角线元素在内的下(或上)三角的元素即可。
B对角矩阵只须存放非零元素即可。
C稀疏矩阵中值为零的元素较多,因此可以采用三元组表方法存储。
D稀疏矩阵中大量值为零的元素分布有规律,因此可以采用三元组表方法存储。
73、请回答下列关于图的问题:
(1)一个具有n个顶点的完全图的边数为n(n-1)/2n(n-1)。
(2)无向图中的连通分量定义为无向图的____极大连通子图________。
(3)设无向图G的顶点数为n,则G最少有___n____条边。
(4)一个具有n个顶点的有向完全图的弧数为_____n(n-1)_______。
(5)有向图中的强连通分量定义为有向图的___极大强连通子图_________。
74.连通分量是(A)的极大连通子图。
A.无向图B.有向图C.树D.图
75.强连通分量是(B)的极大连通子图。
76.有n个顶点的无向图的邻接矩阵是用(A)数组存储。
A.n行n列B.一维C.任意行n列D.n行任意列
77.下列有关图遍历的说法中不正确的是(C)。
A.连通图深度优先搜索是个递归过程
B.图的广度优先搜索中邻接点的寻找具有“先进先出”的特征
C.非连通图不能用深度优先搜索法
D.图的遍历要求每一顶点仅被防问一次
二.计算题
1.有三个元素按a、b、c的次序依次进栈,且每个元素只允许进一次栈,列出所有可能的出栈序列。
abc,acb,bca,bac,cba2.栈S=(a,b,c),在栈中插入1个元素d,再从栈中删除一个元素,请写出S的变化过程。
3.队列Q=(a,b,c),在队列中插入1个元素d,再从队列中删除一个元素,请写出Q的变化过程。
4.请根据下图回答下列问题
1哪个是根结点?
A
2哪些是叶子结点?
DEG
3哪个是结点C的双亲?
4哪些是结点C的孩子?
EF
5C的兄弟是哪个结点?
B
6F的堂兄弟是哪个结点?
D
7哪些结点是C的子孙结点?
EFG
8树的深度是多少?
4
9树的度是多少?
2
10请写出该树的先根遍历序列、中根序列、后根序列、层次遍历序列。
AB#D##CE##FG###
5.若对序列(56,23,67,4,88,12,55)采用直接插入排序法和冒泡排序法进行排序,请写出每一趟的结果。
6.请写出求数组最大值、最小值、平均值的递归算法。
intmax(intA[],inti)
{
if(i==0)returnA[0];
elsereturnmax(A,i-1)>
A[i-1]?
max(A,i-1):
A[i-1];
}
intmin(intA[],inti)
elsereturnmin(A,i-1)<
min(A,i-1):
intavg(intA[],inti)
{
elsereturn(A[i-1]+avg(A,i-1)*(i-1))/i;
7.请写出求2个正整数相乘的递归算法。
intmul(inta,inti)
if(i==0)returnm;
elsereturnm+mul(m,i-1);
8.请写出对二叉树进行先序遍历、中序遍历、后序遍历、求二叉树高度、结点个数、叶子结点个数等递归算法。
//创建二叉树
voidCreate(BTNode*&
rt)
{
ElemTypech;
//存储数据元素的值
cin>
>
ch;
//输入数据元素的值
if(ch=='
#'
)//如果输入的是'
,说明根结点不存在
{
rt=NULL;
//将根指针设置为空
}
else//否则根结点存在
rt=newBTNode;
//为根结点分配空间
rt->
data=ch;
//将数据元素的值保存在根结点中
Create(rt->
lchild);
//创建当前结点的左子树
rchild);
//创建当前结点的右子树
}
//先序遍历
voidPreOrder(BTNode*rt)
if(rt==NULL)return;
//根指针为空,则为空树,没有结点可访问,直接返回?
else
cout<
<
rt->
data;
//先访问根结点
PreOrder(rt->
//再先序遍历左子树
PreOrder(rt->
//最后先序遍历右子树
//中序遍历
voidInOrder(BTNode*rt)
//根指针为空,则为空树,没有结点可访问,直接返回
InOrder(rt->
//先中序遍历左子树
cout<
//再访问根结点
InOrder(rt->
//最后中序遍历右子树
//后序遍历
voidPostOrder(BTNode*rt)
PostOrder(rt->
//先后序遍历左子树
PostOrder(rt->
//再后序遍历右子树
//最后访问根结点
//求树的深度(高度)?
intDepth(BTNode*rt)
inthl,hr;
if(rt==NULL)return0;
//根指针为空,则为空树,空树高度为0
else
hl=Depth(rt->
//hl保存左子树的高度
hr=Depth(rt->
//hr保存右子树的高度
return(hl>
hr?
hl+1:
hr+1);
//取左、右子树高度的较大者,加上根结点的高度,就是树的高度
//计算树中结点的个数
intCount(BTNode*rt)
intnl,nr;
//根指针为空,则为空树,空树结点个数为0
else
nl=Count(rt->
//计算左子树结点的个数
nr=Count(rt->
//计算右子树结点的个数
returnnl+nr+1;
//二叉树结点个数=左子树结点的个数右子树结点的个数+根结点个数(1个)
//计算树中叶子结点的个数,并输出叶子结点
intLeaf(BTNode*rt)
//根指针为空,则为空树,空树叶子结点个数为
if(rt->
lchild==NULL&
&
rchild==NULL)//判断是否为叶子结点
data<
"
是叶子结点"
endl;
//输出叶子结点的信息
return1;
//叶子结点数
nl=Leaf(rt->
//计算左子树叶子结点的个数
nr=Leaf(rt->
//计算右子树叶子结点的个数
returnnl+nr;
三.问答题
1.什么是数据结构?
数据结构是带结构的数据元素的集合。
2.什么是算法?
算法的五大特性是什么?
算法是对特定问题求解步骤的一种描述,它是指令的有限序列。
有穷性、确定性、可行性、有输入、有输出
3.栈是什么?
请描述栈的特性,并画图说明。
栈是一种只能在一端进行插入或删除操作的线性表。
栈的主要特点是“后进先出”。
4.请阐述栈和队列的异同点。
栈和队列都是操作受限的线性表。
队列的主要特点是“先进先出”。
5.什么是递归?
请阐述递归程序和非递归程序的优缺点。
在定义一个过程或函数时出现调用本过程或本函数的成分,称之为递归。
递归调用的优点是使程序看起来简洁,缺点是效率较低,有可能导致栈溢出。
6.请阐述线性结构和树状结构的异同点。
线性结构中结点间关系是唯一前驱、唯一后继。
树型结构中结点间关系是唯一前驱而后继不唯一,即结点之间是一对多的关系。
7.二叉树的五种形态?
空二叉树、单结点的二叉树、右子树为空的二叉树、左子树为空的二叉树、左右子树都不为空的二叉树。
8.什么是顺序存储结构和链式存储结构?
它们的优缺点?
在什么情况下用顺序表比链表好?
顺序存储结构:
把线性表中的所有元素按照其逻辑顺序依次存储在计算机存储器中指定存储位置开始的一块连续的存储空间中。
链式存储结构: