数据结构与算法考试题库Word下载.docx
《数据结构与算法考试题库Word下载.docx》由会员分享,可在线阅读,更多相关《数据结构与算法考试题库Word下载.docx(73页珍藏版)》请在冰豆网上搜索。
A.单链表
B.给出表头指针的单循环链表
C.双链表
D.带头结点的双循环链表
5.在一个具有n个结点的有序单链表中插入一个新结点并仍然保持有序的时间复杂度是()。
A.O
(1)
B.O(n)
C.O(n2)
D.O(nlog2n)
6.对于只在表的首、尾两端进行插入操作的线性表,宜采用的存储结构为()。
A.顺序表
B.用头指针表示的循环单链表
C.用尾指针表示的循环单链表
D.单链表
C
7.若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法的时间复杂度为()。
A.O(2logn)
B.O
(1)
C.O(n)
D.O(n2)
8.线性表的顺序存储结构是一种()。
A.随机存取的存储结构
B.顺序存取的存储结构
C.索引存取的存储结构
D.Hash存取的存储结构
9.以下()不是队列的基本运算。
A.从队尾插入一个新元素
B.从队列中删除第i个元素
C.判断一个队列是否为空
D.读取队头元素的值
10.判定一个循环队列qu(最多元素为MaxSize)为空的条件是()。
A.qu->
rear–qu->
front==MaxSize
B.qu->
front-1==MaxSize
C.qu->
rear==qu->
front
D.qu->
front-1
11.设计一个判别表达式中左、右括号是否配对出现的算法,采用()数据结构最佳。
A.线性表的顺序存储结构
B.队列
C.线性表的链式存储结构
D.栈
12.和顺序栈相比,链栈有一个比较明显的优势是()。
A.通常不会出现栈满的情况
B.通常不会出现栈空的情况
C.插入操作更容易实现
D.删除操作更容易实现
13.有两个串p和q,求q在p中首次出现的位置的运算称为()。
A.连接
B.模式匹配
C.求子串
D.求串长
14.有一个100×
90的稀疏矩阵,非0元素有10,设每个整型数占2个字节,则用三元组表示该矩阵时,所需的字节数是()。
A.20
B.66
C.18000
D.33
15.树最适合用来表示()。
A.有序数据元素
B.无序数据元素
C.元素之间具有分支层次关系的数据
D.元素之间无联系的数据
16.在下述论述中,正确的是()。
①只有一个结点的二叉树的度为0;
②二叉树的度为2;
③二叉树的左右子树可任意交换;
④深度为K的顺序二叉树的结点个数小于或等于深度相同的满二叉树。
A.①②③
B.②③④
C.②④
D.①④
17.在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的()倍。
A.1/2
B.1
C.2
D.4
18.采用邻接表存储的图的广度优先遍历算法类似于二叉树的()。
A.先序遍历
B.中序遍历
C.后序遍历
D.按层遍历
19.对线性表进行折半查找时,要求线性表必须()。
A.以顺序方式存储
B.以顺序方式存储,且结点按关键字有序排列
C.以链式方式存储
D.以链式方式存储,且结点按关键字有序排列
20.以下说法错误的是()。
A.散列法存储的思想是由关键字值决定数据的存储地址。
B.散列表的结点中只包含数据元素自身的信息,不包含指针。
C.负载因子是散列表的一个重要参数,它反映了散列表的饱满程度。
D.散列表的查找效率主要取决于散列表构造时选取的散列函数和处理冲突的方法。
判断
判断题
10
1.在线性表的顺序存储结构中,逻辑上相邻的两个元素在物理位置上并不一定紧邻。
()
错误
2.存储无向图的邻接矩阵是对称的,故只存储邻接矩阵的下(或上)三角部分即可。
正确
3.线性表中的元素可以是各种各样的,但同一线性表中的数据元素具有相同的特性,因此是属于同一数据对象。
4.AOE网中一定只有一条关键路径。
5.线性表中的数据元素必须具有相同的特性,即属于同一个数据对象,这种线性表称为同质的线性表。
6.若采用三元组压缩技术存储稀疏矩阵,只要把每个元素的行下标和列下标互换,就完成了对该矩阵的转置运算。
7.用循环链表作为存储结构的队列就是循环队列,这种说法是错误的。
8.非空二叉树在线索化后,仍不能有效求解的问题是中序线索二叉树中求中序后继。
9.哈夫曼树是访问叶子结点的外部路径长最长的二叉树。
10.一个带权连通图的最小生成树是惟一的。
问答
简答题
4
1.什么是树?
树(tree)是一个或多个结点的有限集合,它使得:
①有一个特别指定的称作根(root)的结点;
②剩下的结点被分成m≥0个不相交的集合tl,…,tm,这些集合的每一个都是一棵树,并称t1,…,tm为这根的子树(subtree)。
2.证明:
如果p1/wi≥p。
/w2≥…≥Pn/w。
,则算法greedy,knaPsack对于给定的背包问题实例生成一个最优解。
证明设x=(x1…xn是greedy-knaPsack所生成的解。
如果所有的xi等于1,显然这个解就是最优解。
于是,设j是使xj
1的最小下标。
由算法可知,对于1≤i<
j,xi=1;
对于j<
i≤n,xi=0;
对于j,0≤xj<
1。
如果x不是一个最优解,则必定存在一个可行解y=(y1..y。
),使得∑PiPi>
∑Pixi。
不失一般性,可以假定∑wiyi=m。
设k是使得yk
xk的最小下标。
显然,这样的k必定存在。
由上面的假设,可以推得yk<
xk。
这可从三种可能发
生的情况,即k<
j,k=j或k>
j分别得证明:
(1)若k<
i,则xk=l因yk
xk,从而yk<
(2)若k=j,由于∑wixi=m,且对于1≤i<
j,有xi=yi=1,而对于j<
i≤n,有xi=0。
若y>
xk,显然有∑wiyi>
m,与y是可行解矛盾。
若yk=xk,与假设yk
xk矛盾,故yk<
(3)若k>
j,则∑wiyi>
m,这是不可能的。
现在,假定把yk增加到xk,那未必须从(yk+1,…,yn)中减去同样多的量,使得所用的总容量仍是m。
这导致一个新的解(z1,…,zn),其中,zi=xi,1≤i≤k,并且
因此,对于z有:
如果∑Pizi>
∑Piyi,则y不可能是最优解。
如果这两个和数相等,同时z=x,则x就是最优解;
若z
x,则需重复上面的讨论,或者证明y不是最优解,或者把y转换成x,从而证明了x也是最优解。
证毕。
3.请解释分治法的基本思想,并用分治法说明快速排序算法的实现原理。
分治法的基本思想为:
(1)分解问题为若干子问题;
(2)对子问题求解;
(3)组合各自问题的解。
快速排序过程为:
procedurePARTITION(m,p)
//在A(m),A(m+1),…,A(p-1)中的元素按如下方式重新排列:
如果最初t=A(m),则在重排完成之后,对于m和p-1之间
的某个q,有A(q)=t,并使得对于m≤k<
q,有A(k)≤t,而
对于q<
k<
p,有A(k)≥t退出过程时,p带着划分元素所在的下标位置,即q的值返回。
//
integerm,p,i;
globalA(m:
p-1)
v=A(m);
i=m//A(m)是划分元素//
1oop
loopi=i+1untilA(i)≥vrepeat//i由左向右移//
loopp=p-1untilA(p)≤vrepeat//p由右向左移//
ifi<
p
thencallINTERCHANGE(A(i),A(p))//A(i)和A(p)换位//
elseexit
endif
repeat
A(m)=A(p);
A(p)=v//划分元素在位置p//
endPARTITION
procedureQUICKSORT(p,q)
//将全程数组A(1:
n)中的元素A(p),…,A(q)按递增的方式分类。
认为A(n+1)
已被定义,且大于或等于A(p:
q)的所有元素;
即A(n+1)=+∞//
integerp,q;
globaln,A(1:
n)
ifp<
q
thenj=q+1
callPARTITION(p,j)
callQUICKSORT(p,j-1)//j是划分元素的位置//
callQUICKSORT(j+1,q)
endQUICKSORT
4.请用递归方法写出快速排序法的主要思想和算法。
基本思想:
选取A的某个元素,譬如说t=A(s),然后将其它元素重新排列,使A(1:
n)中所有在t以前出现的元素都小于或等于t,而所有在t后面出现的元素都大于或等于t。
文件的这种重新整理叫做划分(partitioning),元素t称为划分元素(partitionelement)。
因此,所谓快速分类就是通过反复对产生的文件进行划分来实现的。
算法:
procedureQUICKSORT(p,q)
认为A(n+1)已被定义,且大于或等于A(p:
globaln,A(1:
thenjq+1
callPARTITION(p,j)
callQUICKSORT(p,j-1)//j是划分元素的位置//
callQUICKSORT(j+1,q)
1.在数据结构中,从逻辑上可以把数据结构分为()。
A.动态结构和静态结构
B.紧凑结构和非紧凑结构
C.线性结构和非线性结构
D.内部结构和外部结构
2.在决定选取何种存储结构时,一般不考虑()。
A.各结点的值如何
B.结点个数的多少
C.对数据有哪些运算
D.所用的编程语言实现这种结构是否方便。
3.直接选择排序的时间复杂度为()。
(n为元素个数)
A.O(n)
B.O(log2n)
C.O(nlog2n)
4.带头结点的单链表head为空的判定条件是()。
A.head==NULL
B.head->
next==NULL
C.head->
next==head
D.head!
==NULL
5.如果最常用的操作是取第i个结点及其前驱,则采用()存储方式最节省时间。
B.双链表
C.单循环链表
D.顺序表
6.在长度为n的顺序表的第i个位置上插入一个元素(1≤i≤n+1),元素的移动次数为()。
A.n–i+1
B.n–i
C.i
D.i–1
7.在n个结点的线性表的数组实现中,算法的时间复杂度是O
(1)的操作是()。
A.访问第i(1<
=i<
=n)个结点和求第i个结点的直接前驱(1<
i<
=n)
B.在第i(1<
=n)个结点后插入一个新结点
C.删除第i(1<
=n)个结点
D.以上都不对
8.在单链表指针为p的结点之后插入指针为s的结点,正确的操作是()。
A.p->
next=s;
s->
next=p->
next
B.s->
next;
p->
next=s;
C.p->
next=s->
D.p->
next=s
9.快速排序在最好的情况下的时间复杂度是()。
B.0(nlog2n)
D.0(1og2n)
10.一个队列的入队序列是1,2,3,4,则队列的输出序列是()。
A.4,3,2,1
B.1,2,3,4
C.1,4,3,2
D.3,2,4,1
11.若栈采用顺序存储方式存储,现两栈共享空间V[1m],top[1]、top[2]分别代表第1和第2个栈的栈顶,栈1的底在V[1],栈2的底在V[m],则栈满的条件是()。
A.|top[2]-top[1]|=0
B.top[1]+1=top[2]
C.top[1]+top[2]=m
D.top[1]=top[2]
12.队列的“先进先出”特性是指()。
A.最早插入队列中的元素总是最后被删除
B.当同时进行插入、删除操作时,总是插入操作优先
C.每当有删除操作时,总是要先做一次插入操作
D.每次从队列中删除的总是最早插入的元素
13.串是一种特殊的线性表,其特殊性体现在()。
A.可以顺序存储
B.数据元素是一个字符
C.可以链式存储
D.数据元素可以是多个字符
14.设二维数组A[1…m,1…n]按行存储在数组B中,则二维数组元素A[i,j]在一维数组B中的下标为()。
A.n*(i-1)+j
B.n*(i-1)+j-1
C.i*(j-1)
D.j*m+i-1
15.稀疏矩阵一般的压缩存储方式有两种,即()。
A.二维数组和三维数组
B.三元组和散列
C.三元组和十字链表
D.散列和十字链表
16.在线索化树中,每个结点必须设置一个标志来说明它的左、右链指向的是树结构信息,还是线索化信息,若0标识树结构信息,1标识线索,对应叶结点的左右链域,应标识为()。
A.00
B.01
C.10
D.11
17.在一个无向图中,所有顶点的度数之和等于所有边数的()倍。
18.采用邻接表存储的图的深度优先遍历算法类似于二叉树的()。
19.顺序查找法适合于存储结构为()的线性表。
A.散列存储
B.顺序存储或链式存储
C.压缩存储
D.索引存储
20.下面关于B树和B+树的叙述中,不正确的结论是()。
A.B树和B+树都能有效的支持顺序查找
B.B树和B+树都能有效的支持随机查找
C.B树和B+树都是平衡的多叉树
D.B树和B+树都可用于文件索引结构
1.顺序表的插入和删除操作不需要付出很大的时间代价,因为每次操作平均只有近一半的元素需要移动。
2.任何有向网络(AOV-网络)拓扑排序的结果是唯一的。
3.线性表的逻辑顺序与存储顺序总是一致的。
4.存储无向图的邻接矩阵是对称的,故只存储邻接矩阵的下(或上)三角部分即可。
()()
5.若频繁地对线性表进行插入和删除操作,该线性表应该采用顺序结构。
6.数组的基本操作有存取、修改、检索、排序、插入与删除操作。
7.在一个循环队列中,队首指针指向队首元素的前一个元素。
8.具有n(n>
0)个结点的非空二叉树,共有n条分支(边)。