数据结构试题及.docx
《数据结构试题及.docx》由会员分享,可在线阅读,更多相关《数据结构试题及.docx(14页珍藏版)》请在冰点文库上搜索。
数据结构试题及
数据结构试题及答案修2
试卷一
一、 单选题(每题2分,共20分)
1. 对一个算法的评价,不包括如下()方面的内容。
A.健壮性和可读性B.并行性C.正确性D.时空复杂度
2. 在带有头结点的单链表HL中,要向表头插入一个由指针p指向的结点,则执行()。
A.p->next=HL->next;HL->next=p;B.p->next=HL;HL=p;
C.p->next=HL;p=HL;D.HL=p;p->next=HL;
3. 对线性表,在下列哪种情况下应当采用链表表示?
()
A.经常需要随机地存取元素B.经常需要进行插入和删除操作
C.表中元素需要占据一片连续的存储空间D.表中元素的个数不变
4. 一个栈的输入序列为123,则下列序列中不可能是栈的输出序列的是()
A.231B.321C.312D.123
5. AOV网是一种()。
A.有向图B.无向图C.无向无环图D.有向无环图
7. 若需要利用形参直接访问实参时,应将形参变量说明为()参数。
A.值B.函数C.指针D.引用
8. 在稀疏矩阵的带行指针向量的链接存储中,每个单链表中的结点都具有相同的()。
A.行号B.列号C.元素值D.非零元素个数
二、 填空题(每空1分,共28分)
1. 数据结构是指数据及其相互之间的______________。
当结点之间存在M对N(M:
N)的联系时,称这种结构为_____________________。
2. 队列的插入操作是在队列的___尾______进行,删除操作是在队列的____首______进行。
3. 当用长度为N的数组顺序存储一个栈时,假定用top==N表示栈空,则表示栈满的条件是___top==0_____________。
4. 对于一个长度为n的单链存储的线性表,在表头插入元素的时间复杂度为_________,在表尾插入元素的时间复杂度为____________。
7. 二叉树是指度为2的____________________树。
一棵结点数为N的二叉树,其所有结点的度的总和是_____________。
8. 对一棵二叉搜索树进行中序遍历时,得到的结点序列是一个______________。
对一棵由算术表达式组成的二叉语法树进行后序遍历得到的结点序列是该算术表达式的__________________。
9. 对于一棵具有n个结点的二叉树,用二叉链表存储时,其指针总数为_____________个,其中_______________个用于指向孩子,_________________个指针是空闲的。
10. 若对一棵完全二叉树从0开始进行结点的编号,并按此编号把它顺序存储到一维数组A中,即编号为0的结点存储到A[0]中。
其余类推,则A[i]元素的左孩子元素为________,右孩子元素为_______________,双亲元素为____________。
11. 在线性表的散列存储中,处理冲突的常用方法有________________________和_____________________________两种。
三、 运算题(每题6分,共24分)
1. 已知一个6⨯5稀疏矩阵如下所示,试:
(1) 写出它的三元组线性表;
(2) 给出三元组线性表的顺序存储表示。
2. 设有一个输入数据的序列是{46,25,78,62,12,80},试画出从空树起,逐个输入各个数据而生成的二叉搜索树。
3. 对于图6所示的有向图若存储它采用邻接表,并且每个顶点邻接表中的边结点都是按照终点序号从小到大的次序链接的,试写出:
从顶点①出发进行深度优先搜索所得到的深度优先生成树;
从顶点②出发进行广度优先搜索所得到的广度优先生成树;
图6
4. 已知一个图的顶点集V和边集E分别为:
V={1,2,3,4,5,6,7};
E={<2,1>,<3,2>,<3,6>,<4,3>,<4,5>,<4,6>,<5,1>,<5,7>,<6,1>,<6,2>,<6,5>};
若存储它采用邻接表,并且每个顶点邻接表中的边结点都是按照终点序号从小到大的次序链接的,按主教材中介绍的拓朴排序算法进行排序,试给出得到的拓朴排序的序列。
四、阅读算法(每题7分,共14分)
1. intPrime(intn)
{inti=1;
intx=(int)sqrt(n);
while(++i<=x)
if(n%i==0)break;
if(i>x)return1;
elsereturn0;}
(1)指出该算法的功能;
(2) 该算法的时间复杂度是多少?
2. 写出下述算法的功能:
voidAJ(adjlistGL,inti,intn)
{QueueQ;
InitQueue(Q);
cout<
visited[i]=true;
QInsert(Q,i);
while(!
QueueEmpty(Q)){
intk=QDelete(Q);
edgenode*p=GL[k];
while(p!
=NULL)
{intj=p->adjvex;
if(!
visited[j])
{cout<visited[j]=true;
QInsert(Q,j);}
p=p->next;}}}
HL是单链表的头指针,试写出删除头结点的算法。
ElemTypeDeleFront(LNode*&HL)
参考答案
一、单选题(每题2分,共20分)
1.B2.A3.B4.C5.D6.B7.D8.A9.D10.C
二、 填空题(每空1分,共26分)
1. 联系图(或图结构)
2. 尾首
3. top==0
4. O
(1)O(n)
5. 12844108
6. 33
7.
6
5
5
1
5
1
3
2
-1
4
5
-2
5
1
5
6
3
7
图7
有序n-1
8. 有序序列后缀表达式(或逆波兰式)
9. 2nn-1n+1
10. 2i+12i+2(i-1)/2
11. 开放定址法链接法
12. 快速归并
三、 运算题(每题6分,共24分)
1.
(1)((1,5,1),(3,2,-1),(4,5,-2),(5,1,5),(6,3,7))(3分)
图8
(2)三元组线性表的顺序存储表示如图7示。
2. 如图8所示。
3. DFS:
①②③④⑤
BFS:
②③④⑤①
4. 拓朴排序为:
4365721
四、 阅读算法(每题7分,共14分)
1.
(1)判断n是否是素数(或质数)
(2)O(
)
2. 功能为:
从初始点vi出发广度优先搜索由邻接表GL所表示的图。
六、 编写算法(8分)
ElemTypeDeleFront(LNode*&HL)
{if(HL==NULL){
cerr<<"空表"<exit
(1);}
LNode*p=HL;
HL=HL->next;
ElemTypetemp=p->data;
deletep;
returntemp;}
试卷十三
一、选择题(30分)
1.下列程序段的时间复杂度为()。
for(i=0;ifor(i=0;i(A)O(m*n*t)(B)O(m+n+t)(C)O(m+n*t)(D)O(m*t+n)
2.设顺序线性表中有n个数据元素,则删除表中第i个元素需要移动()个元素。
(A)n-i(B)n+l-i(C)n-1-i(D)i
3.设F是由T1、T2和T3三棵树组成的森林,与F对应的二叉树为B,T1、T2和T3的结点数分别为N1、N2和N3,则二叉树B的根结点的左子树的结点数为()。
(A)N1-1(B)N2-1(C)N2+N3(D)N1+N3
4.利用直接插入排序法的思想建立一个有序线性表的时间复杂度为()。
(A)O(n)(B)O(nlog2n)(C)O(n2)(D)O(1og2n)
5.设指针变量p指向双向链表中结点A,指针变量s指向被插入的结点X,则在结点A的后面插入结点X的操作序列为()。
(A)p->right=s;s->left=p;p->right->left=s;s->right=p->right;
(B)s->left=p;s->right=p->right;p->right=s;p->right->left=s;
(C)p->right=s;p->right->left=s;s->left=p;s->right=p->right;
(D)s->left=p;s->right=p->right;p->right->left=s;p->right=s;
7.设输入序列1、2、3、…、n经过栈作用后,输出序列中的第一个元素是n,则输出序列中的第i个输出元素是()。
(A)n-i(B)n-1-i(C)n+l-i(D)不能确定
8.设散列表中有m个存储单元,散列函数H(key)=key%p,则p最好选择()。
(A)小于等于m的最大奇数(B)小于等于m的最大素数
(C)小于等于m的最大偶数(D)小于等于m的最大合数
9.设在一棵度数为3的树中,度数为3的结点数有2个,度数为2的结点数有1个,度数为1的结点数有2个,那么度数为0的结点数有()个。
(A)4(B)5(C)6(D)7
10.设完全无向图中有n个顶点,则该完全无向图中有()条边。
(A)n(n-1)/2(B)n(n-1)(C)n(n+1)/2(D)(n-1)/2
14.设有向无环图G中的有向边集合E={<1,2>,<2,3>,<3,4>,<1,4>},则下列属于该有向图G的一种拓扑排序序列的是()。
(A)1,2,3,4(B)2,3,4,1(C)1,4,2,3(D)1,2,4,3
二、填空题(30分)
1. 设指针p指向单链表中结点A,指针s指向被插入的结点X,则在结点A的前面插入结点X时的操作序列为:
1)s->next=___________;2)p->next=s;3)t=p->data;4)p->data=___________;5)s->data=t;
2.设某棵完全二叉树中有100个结点,则该二叉树中有______________个叶子结点。
3. 设某顺序循环队列中有m个元素,且规定队头指针F指向队头元素的前一个位置,队尾指针R指向队尾元素的当前位置,则该循环队列中最多存储_______队列元素。
6. 设一组初始记录关键字序列为(20,12,42,31,18,14,28),则根据这些记录关键字构造的二叉排序树的平均查找长度是_______________________________。
7. 设一棵二叉树的中序遍历序列为BDCA,后序遍历序列为DBAC,则这棵二叉树的前序序列为____________________。
8.
设用于通信的电文仅由8个字母组成,字母在电文中出现的频率分别为7、19、2、6、32、3、21、10,根据这些频率作为权值构造哈夫曼树,则这棵哈夫曼树的高度为________________。
10. 设无向图G(如右图所示),则其最小生成树上所有边的权值之和为_________________。
三、判断题(20分)
1. 有向图的邻接表和逆邻接表中表结点的个数不一定相等。
()
2. 对链表进行插入和删除操作时不必移动链表中结点。
()
3. 子串“ABC”在主串“AABCABCD”中的位置为2。
()
4. 若一个叶子结点是某二叉树的中序遍历序列的最后一个结点,则它必是该二叉树的先序遍历序列中的最后一个结点。
()
6. 用邻接矩阵作为图的存储结构时,则其所占用的存储空间与图中顶点数无关而与图中边数有关。
()
7. 中序遍历一棵二叉排序树可以得到一个有序的序列。
()
8. 入栈操作和入队列操作在链式存储结构上实现时不需要考虑栈溢出的情况。
()
9. 顺序表查找指的是在顺序存储结构上进行查找。
()
10.堆是完全二叉树,完全二叉树不一定是堆。
()
五、算法设计题(20分)
1. 设计计算二叉树中所有结点值之和的算法。
2. 设计将所有奇数移到所有偶数之前的算法。
3. 设计判断单链表中元素是否是递增的算法。
参考答案
一、选择题
1.A2.A3.A4.C5.D
6.D7.C8.B9.C10.A
11.C12.C13.D14.A15.A
二、填空题
1. p->next,s->data2. 503. m-14. 6,85. 快速,堆6. 19/7
7. CBDA8. 69. (24,65,33,80,70,56,48)10. 8
三、判断题
1.错2.对3.对4.对5.错
6.错7.对8.对9.错10.对
四、算法设计题
1.设计计算二叉树中所有结点值之和的算法。
voidsum(bitree*bt,int&s)
{if(bt!
=0){s=s+bt->data;sum(bt->lchild,s);sum(bt->rchild,s);}}
2. 设计将所有奇数移到所有偶数之前的算法。
voidquickpass(intr[],ints,intt)
{inti=s,j=t,x=r[s];
while(i{while(iwhile(ir[i]=x;}
3. 设计判断单链表中元素是否是递增的算法。
intisriselk(lklist*head)
{if(head==0||head->next==0)return
(1);else
for(q=head,p=head->next;p!
=0;q=p,p=p->next)if(q->data>p->data)return(0);
return
(1);}
试卷十四
一、选择题(24分)
1.下列程序段的时间复杂度为()。
i=0,s=0;while(s(A)O(n1/2)(B)O(n1/3)(C)O(n)(D)O(n2)
2.设某链表中最常用的操作是在链表的尾部插入或删除元素,则选用下列()存储方式最节省运算时间。
(A)单向链表(B)单向循环链表
(C)双向链表(D)双向循环链表
3.设指针q指向单链表中结点A,指针p指向单链表中结点A的后继结点B,指针s指向被插入的结点X,则在结点A和结点B插入结点X的操作序列为()。
(A)s->next=p->next;p->next=-s;(B)q->next=s;s->next=p;
(C)p->next=s->next;s->next=p;(D)p->next=s;s->next=q;
4.设输入序列为1、2、3、4、5、6,则通过栈的作用后可以得到的输出序列为()。
(A)5,3,4,6,1,2(B)3,2,5,6,4,1
(C)3,1,2,5,4,6(D)1,5,4,6,2,3
5.设有一个10阶的下三角矩阵A(包括对角线),按照从上到下、从左到右的顺序存储到连续的55个存储单元中,每个数组元素占1个字节的存储空间,则A[5][4]地址与A[0][0]的地址之差为()。
(A)10(B)19(C)28(D)55
6.设一棵m叉树中有N1个度数为1的结点,N2个度数为2的结点,……,Nm个度数为m的结点,则该树中共有()个叶子结点。
(A)
(B)
(C)
(D)
8.设一组权值集合W=(15,3,14,2,6,9,16,17),要求根据这些权值集合构造一棵哈夫曼树,则这棵哈夫曼树的带权路径长度为()。
(A)129(B)219(C)189(D)229
9.设有n个关键字具有相同的Hash函数值,则用线性探测法把这n个关键字映射到HASH表中需要做()次线性探测。
(A)n2(B)n(n+1)(C)n(n+1)/2(D)n(n-1)/2
10.设某棵二叉树中只有度数为0和度数为2的结点且度数为0的结点数为n,则这棵二叉中共有()个结点。
(A)2n(B)n+l(C)2n-1(D)2n+l
二、填空题(48分,其中最后两小题各6分)
1. 设需要对5个不同的记录关键字进行排序,则至少需要比较_____________次,至多需要比较_____________次。
5. 设一棵m叉树脂的结点数为n,用多重链表表示其存储结构,则该树中有_________个空指针域。
6. 设指针变量p指向单链表中结点A,则删除结点A的语句序列为:
q=p->next;p->data=q->data;p->next=___________;feee(q);
7. 数据结构从逻辑上划分为三种基本类型:
___________、__________和___________。
8. 设无向图G中有n个顶点e条边,则用邻接矩阵作为图的存储结构进行深度优先或广度优先遍历时的时间复杂度为_________;用邻接表作为图的存储结构进行深度优先或广度优先遍历的时间复杂度为_________。
.12. 设有向图G中的有向边的集合E={<1,2>,<2,3>,<1,4>,<4,5>,<5,3>,<4,6>,<6,5>},则该图的一个拓扑序列为_________________________。
13. 下面程序段的功能是建立二叉树的算法,请在下划线处填上正确的内容。
typedefstructnode{intdata;structnode*lchild;________________;}bitree;
voidcreatebitree(bitree*&bt)
{
scanf(“%c”,&ch);
if(ch=='#')___________;else
{bt=(bitree*)malloc(sizeof(bitree));bt->data=ch;________;createbitree(bt->rchild);}
}
14. 下面程序段的功能是利用从尾部插入的方法建立单链表的算法,请在下划线处填上正确的内容。
typedefstructnode{intdata;structnode*next;}lklist;
voidlklistcreate(_____________*&head)
{for(i=1;i<=n;i++)
{p=(lklist*)malloc(sizeof(lklist));scanf(“%d”,&(p->data));p->next=0;
if(i==1)head=q=p;else{q->next=p;____________;}}}
参考答案
一、选择题
1.A2.D3.B4.B5.B6.D
7.A8.D9.D10.C11.B12.D
二、填空题
1. 4,102. O(nlog2n),O(n2)3. n4. 1,25. n(m-1)+16. q->next
7. 线性结构,树型结构,图型结构8. O(n2),O(n+e)9. 8/3
10. (38,13,27,10,65,76,97)11. (10,13,27,76,65,97,38)
12. 12465313. structnode*rchild,bt=0,createbitree(bt->lchild)14. lklist,q=p