数据结构习题.docx
《数据结构习题.docx》由会员分享,可在线阅读,更多相关《数据结构习题.docx(29页珍藏版)》请在冰豆网上搜索。
数据结构习题
1.数据结构中,与所使用的计算机无关的是数据的
结构;
[
]
A)存储B)物理C)逻辑D)物理和存储
2.在非空双向链表中,在由q所指的链结点后面插入一个由p所指的链结点的
过程是依次执行:
①p->llink=q;②p->rlink=q->rlink;③q->link=p;
④_______________。
第④步应执行
A.q->llink=p;B.q->rlink->llink=p
C.p->rlink^.llink=pD.p->llink->llink=p
[
]
3.若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,
则pi为
A)iB)n=iC)n-i+1D)不确定
[
]
4.排序时扫描待排序记录序列,顺次比较相邻的两个元素的大小,逆序时就交换位置。
这是
哪种排序方法的基本思想?
[
]
A、堆排序
B、直接插入排序
C、快速排序
D、冒泡排序
5.已知一个有向图的邻接矩阵表示,要删除所有从第i个结点发出的边,应该:
[
A)将邻接矩阵的第i行删除B)将邻接矩阵的第i行元素全部置为0
C)将邻接矩阵的第i列删除D)将邻接矩阵的第i列元素全部置为0
6.有一个含头结点的双向循环链表,头指针为head,则其为空的条件是:
[]
head->priro==NULLB.head->next==NULL
C.head->next==headD.head->next->priro==NULL
]
7.在顺序表(3,6,8,10,12,15,16,18,21,25,30)中,用折半法查找关键码值11,所需的关
键码比较次数为:
[
]
A)2B)3C)4D)5
8.9.将一棵有100个结点的完全二叉树从根这一层开始,每一层从左到右依次对结点
进行编号,根结点编号为1,则编号最大的非叶结点的编号为:
[
A、48B、49C、50D、51
]
9.10.某二叉树结点的中序序列为A、B、C、D、E、F、G,后序序列为B、D、C、A、F、
G、E,则其左子树中结点数目为:
[
]
A)3B)2C)4D)5
10.下列关于串的叙述中,正确的是
A、一个串的字符个数即该串的长度B、一个串的长度至少是1
C、空串是由一个空格字符组成的串
D、两个串S1和S2若长度相同,则这两个串相等
[
]
11.从未排序序列中依次取出元素与已排序序列中的元素作比较,将其放入已排序序列的正确
位置上。
这各排序方法是[
]
A)归并排序B)插入排序C)快速排序D)选择排序
第1页共10页
12.算法分析的目的是:
A)找出数据结构的合理性B)研究算法中的输入和输出的关系
C)分析算法的效率以求改进D)分析算法的易懂性和文档性
13.在n个结点的顺序表中,算法的时间复杂度是O
(1)的操作是:
A)访问第i个结点(1≤i≤n)和求第i个结点的直接前驱(2≤i≤n)
B)在第i个结点后插入一个新结点(1≤i≤n)
C}删除第i个结点(1≤i≤n)
D}将n个结点从小到大排序
[
[
]
]
14.以数组Q[0..m-1]存放循环队列中的元素,变量rear和qulen分别指示循环队列中队尾元素
的实际位置和当前队列中元素的个数,队列第一个元素的实际位置是
A)rear-qulenB)rear-qulen+m
C)m–qulenD)1+(rear+m-qulen)modm
15.在n个结点的顺序表中,算法的时间复杂度是O
(1)的操作是:
A)访问第i个结点(1≤i≤n)和求第i个结点的直接前驱(2≤i≤n)
B)在第i个结点后插入一个新结点(1≤i≤n)
C)删除第i个结点(1≤i≤n)
D)将n个结点从小到大排序
16.串是一种特殊的线性表,其特殊性体现在:
A)可以顺序存储B)数据元素是一个字符
C)可以链式存储D)数据元素可以是多个字符
17.以下哪一个不是队列的基本运算?
[]
A)从队尾插入一个新元素B)从队列中删除第i个元素
C)判断一个队列是否为空D)读取队头元素的值
[
]
18.在长度为n的顺序表的第i个位置上插入一个元素(1≤i≤n+1),元素的移动次数为:
A)n–i+1B)n–iC)iD)i–1[
19.对于只在表的首、尾两端进行插入操作的线性表,宜采用的存储结构为:
[
A)顺序表B)用头指针表示的循环单链表
C)用尾指针表示的循环单链表D)单链表
20.对包含n个元素的哈希表进行查找,平均查找长度为:
[]
A)O(log2n)B)O(n)C)O(nlog2n)D)不直接依赖于n
]
]
21.以下不稳定的排序方法是
[
]
A)直接插入排序B)冒泡排序C)直接选择排序D)二路归并排序
22.在一个图中,所有顶点的度数之和等于图的边数的
倍。
A)1/2B)1C)2D)4
23.将5个不同的数据进行排序,至多需要比较
第2页共10页
次。
A)8B).9C)10D)25
24.在表长为n的链表中进行线性查找,它的平均查找长度为
A)ASL=n;B)ASL=(n+1)/2;
C)ASL=n+1;D).ASL≈log2(n+1)-1
25.不含任何结点的空树
。
A)是一棵树;B)是一棵二叉树;
C)是一棵树也是一棵二叉树;D)既不是树也不是二叉树
26.数组Q[n]用来表示一个循环队列,f为当前队列头元素的前一位置,r为队尾元素的
位置,假定队列中元素的个数小于n,计算队列中元素数量的公式为
A)r-f;B)(n+f-r)%n;C)n+r-f;D)(n+r-f)%n
27.设矩阵A是一个对称矩阵,为了节省存储,将其下三角部分(如下图所示)按行序存放在
一维数组B[1,n(n-1)/2]中,对下三角部分中任一元
ai,j(i≤j),在一维数组B中下标k的值是:
⎡
⎢
a1,1
⎤
⎥
素
A)i(i-1)/2+j-1B)i(i-1)/2+j
⎢a2,1
A=⎢
a2,2
⎥
⎥
C)i(i+1)/2+j-1D)i(i+1)/2+j
⎢
L
⎥
28.计算机算法指的是:
计算方法B)排序方法
C)解决问题的有限运算序列D)调度方法
29.下列说法中,不正确的是____________。
A)数据元素是数据的基本单位
B)数据项是数据中不可分割的最小可识别单位
⎢an,1an,2
L
ann
⎥
A)
C)数据可由若干个数据元素构成D)数据项可由若干个数据元素构成
30.下列广义表是线性表的[
A)E(a,(b,c))B)E(a,E)C)E(a,b)D)E(a,L())
1.n个结点的有向图,若它有n(n-1)条边,则它一定是强连通的。
[
]
]
2.深度为h的非空二叉树的第h层最多有2h-1个结点[
]
3.对于同一组待输入的关键码集合,虽然各关键码的输入次序不同,但得到的二叉搜索树都
是相同的[
4.广义表(((a),b),c)的表头是((a),b),表尾是(c)。
[]
5.在哈夫曼树中,权值最小的结点离根结点最近。
[]
6.基数排序是高位优先排序法。
[]
]
7.在平衡二叉树中,任意结点左右子树的高度差(绝对值)不超过1。
[
第3页共10页
]
8.数据结构是带有结构的各数据项的集合。
[
9.数据结构中,与所使用的计算机无关的是数据的存储结构
]
[]
10.链表的每个结点中都恰好包含一个指针。
[]
11.顺序表结构适宜于进行顺序存取,而链表适宜于进行随机存取。
[]
12.线性表的逻辑顺序与存储顺序总是一致的。
[]
13.队是一种插入与删除操作分别在表的两端进行的线性表,是一种先进后出型结构。
[]
14.在数据的存放无规律而言的线性表中进行检索的最佳方法是顺序查找[]
15.二叉树中所有结点个数是2k-1-1,其中k是树的深度。
[]
16.在单链表中,给定任一结点的地址p,则可用下述语句将新结点s插入结点p的后面:
p->next
=s;s->next=p->next;[
]
17.抽象数据类型(ADT)包括定义和实现两方面,其中定义是独立于实现的,定义仅给出一
个ADT的逻辑特性,不必考虑如何在计算机中实现。
[
18.数组元素的下标值越大,存取时间越长。
[]
]
19.用邻接矩阵法存储一个图时,在不考虑压缩存储的情况下,所占用的存储空间大小只与图
中结点个数有关,而与图的边数无关。
[
]
20.拓扑排序是按AOE网中每个结点事件的最早发生时间对结点进行排序。
[
21.长度为1的串等价于一个字符型常量[]
22.线性表在物理存储空间中也一定是连续的。
[
]
]
23.数据的逻辑结构是指各数据元素之间的逻辑关系,是用户按使用需要而建立的
[
24.二路归并时,被归并的两个子序列中的关键字个数一定要相等。
[
25.“顺序查找法”是指在顺序表上进行查找的方法。
[
]
]
]
26.邻接表只能用于有向图的存储,邻接矩阵对于有向图和无向图的存储都适用。
[
]
27.栈是一种对所有插入、删除操作限于在表的一端进行的线性表,是一种后进先出型结构。
[]
28.若二叉树用二叉链表作存贮结构,则在n个结点的二叉树链表中只有n—1个非空指针域。
[]
第4页共10页
29.二叉树中每个结点有两棵非空子树或有两棵空子树。
[]
30.若有一个结点是二叉树中某个子树的中序遍历结果序列的最后一个结点,则它一定是该子
树的前序遍历结果序列的最后一个结点。
[
]
1.向一个长度为n的向量的第i个元素(1≤i≤n+1)之前插入一个元素时,
需向后移动__________个元素。
2.在顺序表中访问任意一结点的时间复杂度均为________________,因此,顺序表也称为
_________的数据结构。
3.栈是一种特殊的线性表,允许插入和删除运算的一端称为_________。
不允许插入和
删除运算的一端称为_______。
4.填空完成下面一趟快速排序算法:
intQKPass(RecordTyper[],intlow,inthigh)
{x=r[low];
while(low{
while(low=x.key)
high--;
if(low{r[]=r[high];low++;}
while(lowlow++;
if(low{r[]=r[low];high--;}
}
r[low]=x;returnlow;
}
5.2.假设用循环单链表实现队列,若队列非空,且队尾指针为R,则将新结点S加入队列时,
需执行下面语句:
6.3.通常是以算法执行所耗费的
;
和所占用的
;R=S;
来判断一个算法的优劣。
7.4.已知一个3行、4列的二维数组A(各维下标均从1开始),如果按“以列为主”的顺序
存储,则排在第8个位置的元素是:
8.5.高度为h的完全二叉树最少有
个结点。
第5页共10页
9.程序段“i=1;while(i<=n)i=i*2;”的时间复杂度T(n)=___________。
10.在顺序表中插入或删除一个元素,需要平均移动
与
有关。
元素,具体移动的元素个数
11.对于一个具有n个顶点和e条边的连通图,其生成树中的顶点数和边数分别为
和。
12.栈是一种特殊的线性表,允许插入和删除运算的一端称为
运算的一端称为。
。
不允许插入和删除
13.数据结构被形式地定义为(D,R),其中D是_____的有限集合,
R是D上的
______有限集合。
14.数据结构包括数据的
这三个方面的内容。
________、数据的_______
和数据的
15.一棵深度为6的满二叉树有
个分支结点和
个叶子。
16.设S=“A;/document/Mary.doc”,则strlen(s)=____________,
“/”的字符定位的位置为
。
17.设数组a[1…60,1…70]的基地址为2048,每个元素占2个存储单元,若以列序为主序顺序
存储,则元素a[32,58]的存储地址为__________
18.一棵具有257个结点的完全二叉树,它的深度为
。
19.对于n个记录的集合进行冒泡排序,在最坏的情况下所需要的时间是
快速排序,在最坏的情况下所需要的时间是。
20.在各种查找方法中,平均查找长度与结点个数n无关的查找方法是
。
若对其进行
。
21.线性有序表(a1,a2,a3,…,a256)是从小到大排列的,对一个给定的值k,用二分法检
索表中与k相等的元素,在查找不成功的情况下,最多需要检索
点,用二分法查找时,最大比较次数是。
次。
设有100个结
22.对于具有n个结点的二叉树,当它为一棵_______二叉树时具有最小深度,此时深度为
____________。
23.在具有n个单元的循环队列中,队满时共有__________个元素。
24.对广义表((a,b),(c,d))操作的结果是:
GetHead【GetTail【((a,b),(c,d))】】===______;。
25.根据数据元素之间关系的不同特性,通常有__________、_________、__________、
__________四类基本逻辑结构,
26.已知具有n个元素的一维数组采用顺序存储结构,每个元素占k个存储单元,第一个元素
的地址为LOC(a1),那么,LOC(ai)=
。
27.若对一棵二叉树从0开始进行结点编号,并按此编号把它顺序存储到一维数组中,即编号
为0的结点存储到a[0]中,其余类推,则a[i]元素的左孩子结点为,右孩子结
点为,双亲结点(i>=1)为
第6页共10页
1.画出和下列二叉树相应的森林。
2.设有序顺序表中的元素依次为017,094,154,170,275,503,509,512,553,612,677,765,897,
908。
试画出对其进行折半搜索时的判定树,并计算搜索成功的平均搜索长度和搜索不成功
的平均搜索长度。
3.已知有五个待排序的记录,其关键字分别为:
256,301,751,129,937,863,742,694,
076,438请用快速排序的方法将它们从小到大排列,试写出每一趟排序的结果。
4.对于一个有10000个结点的二叉树,树叶最多有多少个?
最少有多少个?
5.将关键字序列(3,26,12,61,38,40,97,75,53,87)调整为大根堆
6.将给定的图简化为最小的生成树,要求从顶点1出发。
10
2
6
8
12
6
1
3
4
9
2
5
3
7
7
15
5
7.在KMP算法中,已知模式串为ADABCADADA,请写出模式串的next[j]函数值。
8.设要将序列(Q,H,C,Y,P,A,M,S,R,D,F,X)中的关键码按字母序的升序重新排
列,分别写出按冒泡排序、初始步长为4的希尔(shell)排序、二路归并排序、快速排序、
堆排序等排序方法对此序列进行第一趟排序的结果
第7页共10页
1
9.下图为某无向图的邻接表,分别写出深度优先搜索和广度优先搜索的结果,并画
出逻辑结构图。
A5^
2
3
4
5
6
7
8
9
10
B
C
D^
E
F
G
H
I
J
3
2
1^
3^
2
9
8^
8^
7^
6
3^
10^
7^
10.设哈希(Hash)表的地址范围为0~17,哈希函数为:
H(K)=KMOD16。
K为关键字,用线性探测法再散列法处理冲突,输入关键字序列:
(10,24,32,17,31,30,46,47,40,63,49)
造出Hash表,试回答下列问题:
(1)画出哈希表的示意图;
(2)若查找关键字63,需要依次与哪些关键字进行比较?
(4)若查找关键字60,需要依次与哪些关键字比较?
(4)假定每个关键字的查找概率相等,求查找成功时的平均查找长度
11.阅读下面程序,并回答有关问题。
其中BSTree为用二叉链表表示的二叉排序树类型。
(1)简要说明程序功能。
(2)n个结点的满二叉树的深度h是多少?
(3)假设二叉排序树*bst是有n个结点的满二叉树,给出算法的时间复杂度。
intProc(BSTree*bst,KeyTypeK)
{BSTreef,q,s;
s=(BSTree)malloc(sizeof(BSTNode));
s->key=K;s->lchild=NULL;s->rchild=NULL;
if(*bst==NULL){*bst=s;return1;}
f=NULL;q=*bst;
while(q!
=NULL)
{if(Kkey)
{f=q;q=q->lchild;}
else
{f=q;q=q->rchild;}
}
if(Kkey)f->lchild=s;
elsef->rchild=s;
return1;
}
12.设A~H8个字符出现的概率为:
ω={0.10,0.16,0.01,0.02,0.29,0.10,0.07,0.25},
设计最优二进制码并计算平均码长。
第8页共10页
13.已知数据结构DS的定义如下,请给出其逻辑结构图示。
DS=(D,R)
D={a,b,c,d,e,f,g}
R={T}
T={,,,,,,
,,,,,}
14.设定结点序列为:
{60,30,90,50,95,70,40,80}
试画出此结点序列构成的二叉排序树T1;再从T1中依次删除40,70,60,画出删除此3
个结点后的二叉排序树T2。
15.已知二叉树的中序遍历序列为CBGEAFHD,后序遍历序列为CGEBHFDA,请画出此二叉
树的前序线索二叉树的二叉链表表示。
16.将下面的森林变换成二叉树
B
A
C
D
E
F
H
K
G
J
I
17.根据所给有向图,写出一个(从结点1开始的)拓扑序列。
3
1
2
4
5
6
7
第9页共10页
1.利用顺序栈设计一个算法求无符号正整数num的八进制表示。
2.已知字符串s1,s2采用链式存储结构,设计算法判断这2个字符串是否相等,如果相等则返
回整数1,不相等则返回0。
3.已知在一维数组A[m+n]中依次存放着两个顺序表(a0,a1,...am-1,)和(b0,b1,...bn-1,),
试编写一个函数,将数组中两个顺序表的位置互换,即交(b0,b1,...bn-1,)放在(a0,a1,...
am-1,)的前面。
4.编写一个算法将一个整型数组中的所有负数移到所有的正数前面。
5.证明具有n个顶点的无向图的边数的最大值为n*(n-1)/2
6.设计一个算法判别给定的以二叉链表存储的二叉树是否是二叉搜索树
7.设有一个表头指针为h的单链表。
试设计一个算法,通过遍历一趟链表,将链表中所有结
点的链接方向逆转,要求逆转结果链表的表头指针h指向原链表的最后一个结点
8.试编写一个算法,判断一给定的整型数组a[n]是不是一个堆。
9.编写一个建立二叉树的算法,要求采用二叉链表存储结构。
10.设用一个不带头结点的循环链表来表示一个队列,此队列只设一个队尾指针rear,不设队头
指针,请写一个算法在些队列中插入一个新元素。
第10页共10页