数据结构习题2答案解析文档格式.docx
- 文档编号:15711625
- 上传时间:2022-11-15
- 格式:DOCX
- 页数:10
- 大小:85.44KB
数据结构习题2答案解析文档格式.docx
《数据结构习题2答案解析文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构习题2答案解析文档格式.docx(10页珍藏版)》请在冰豆网上搜索。
7)设栈的输入序列是1,2,3,4,则()不可能是其出栈序列(D)
A.1,2,4,3,B.2,1,3,4,C.1,4,3,2,
D.4,3,1,2,E.3,2,1,4,
8)表达式a*(b+c)-d的后缀表达式是(B)。
//中缀表达式,做成中序遍历树,再对之post-order遍历
A.abcd*+-B.abc+*d-C.abc*+d-D.-+*abcd
9)设计一个判别表达式中左,右括号是否配对出现的算法,采用(D)数据结构最佳。
A.线性表的顺序存储结构B.队列C.线性表的链式存储结构D.栈
10)用不带头结点的单链表存储队列时,其队头指针指向队头结点,其队尾指针指向队尾结点,则在进行删除操作时(D)。
A.仅修改队头指针B.仅修改队尾指针
C.队头、队尾指针都要修改D.队头,队尾指针都可能要修改
11)假设以数组A[m]存放循环队列的元素,其头尾指针分别为front和rear,则当前队列中的元素个数为(A)。
A.(rear-front+m)%mB.rear-front+1
C.(front-rear+m)%mD.(rear-front)%m
12)若用一个大小为6的数组来实现循环队列,且当前rear和front的值分别为0和3,当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为多少?
(D)//在循环队列中,插入元素rear下移,而删除元素则是front下移
A.1和5B.2和4C.4和2D.5和1
13)设栈S和队列Q的初始状态为空,元素e1,e2,e3,e4,e5和e6依次通过栈S,一个元素出栈后即进队列Q,若6个元素出队的序列是e2,e4,e3,e6,e5,e1则栈S的容量至少应该是(C)。
A.6B.4C.3D.2
2.填空题
14)线性结构包括___线性表_、一维数组(包括字符串)__、堆栈_和_队列_。
线性表的存储结构分成_顺序存储__和_链式存储__。
15)栈是_顺序存储_的线性表,其运算遵循_后进先出(FILO)的原则
16)队列的特点是_先进先出(FIFO)__。
17)已知链队列的头尾指针分别是f和r,则将值x入队的操作序列是_p->
data=x;
rear->
next=p;
rear=p;
_____。
18)表达式求值是_栈__应用的一个典型例子
19)在具有n个单元的循环队列中,队满时共有_n-1_个元素。
20)栈是一种特殊的线性表,允许插入和删除运算的一端称为__top___。
不允许插入和删除运算的一端称为base。
3.分析题
21)入栈的顺序是1,2,3,4,5,试写出所有可能的输出序列。
分析
对于每一个数来说,必须进栈一次、出栈一次。
我们把进栈设为状态‘1’,出栈设为状态‘0’。
n个数的所有状态对应n个1和n个0组成的2n位二进制数。
由于等待入栈的操作数按照1‥n的顺序排列、入栈的操作数b大于等于出栈的操作数a(a≤b),因此输出序列的总数目=由左而右扫描由n个1和n个0组成的2n位二进制数,1的累计数不小于0的累计数的方案种数。
在2n位二进制数中填入n个1的方案数为c(2n,n),不填1的其余n位自动填0。
从中减去不符合要求(由左而右扫描,0的累计数大于1的累计数)的方案数即为所求。
不符合要求的数的特征是由左而右扫描时,必然在某一奇数位2m+1位上首先出现m+1个0的累计数和m个1的累计数,此后的2(n-m)-1位上有n-m个1和n-m-1个0。
如若把后面这2(n-m)-1位上的0和1互换,使之成为n-m个0和n-m-1个1,结果得1个由n+1个0和n-1个1组成的2n位数,即一个不合要求的数对应于一个由n+1个0和n-1个1组成的排列。
反过来,任何一个由n+1个0和n-1个1组成的2n位二进制数,由于0的个数多2个,2n为偶数,故必在某一个奇数位上出现0的累计数超过1的累计数。
同样在后面部分0和1互换,使之成为由n个0和n个1组成的2n位数,即n+1个0和n-1个1组成的2n位数必对应一个不符合要求的数(比如,当n=4时,可以写一个11000001,那么换过来就是11000110,也就是在第5位后面开始调换,因为在第5位处0的累加和比1刚好多一,可以发现11000110就是不满足条件的情况)。
因而不合要求的2n位数与n+1个0,n-1个1组成的排列一一对应。
显然,不符合要求的方案数为c(2n,n+1)。
由此得出输出序列的总数目=c(2n,n)-c(2n,n+1)=[1/(n+1)]*c(2n,n)。
所以说当n=5时,总共有42种情形。
1)1,2,3,4,5
2)1,2,3,5,4
3)1,2,4,3,5
4)1,2,5,4,3
5)1,3,2,4,5
6)1,3,2,5,4
7)1,3,4,2,5
8)1,3,4,5,2
9)1,3,5,4,2
10)1,4,3,2,5
11)1,4,3,5,2
12)1,4,5,3,2
13)1,5,4,3,2
14)2,1,3,4,5
15)2,1,3,5,4
16)2,1,4,3,5
17)2,1,4,5,3
18)2,1,5,4,3
19)2,3,1,4,5
20)2,3,1,5,4
21)2,3,4,1,5
22)2,3,4,5,1
23)2,3,5,4,1
24)2,4,3,1,5
25)2,4,3,5,1
26)2,4,5,3,1
27)2,5,4,3,1
28)3,2,1,4,5
29)3,2,1,5,4
30)3,2,4,1,5
31)3,2,4,5,1
32)3,2,5,4,1
33)3,4,2,1,5
34)3,4,2,5,1
35)3,4,5,2,1
36)3,2,5,2,1
37)3,5,4,2,1
38)4,3,2,1,5
39)4,3,2,5,1
40)4,3,5,2,1
41)4,5,3,2,1
42)5,4,3,2,1
21)写出下列算术表达式后缀表达式,并画出后缀表达式求值操作数栈的变化过程
a×
b+(c-d/e)*f
(先按照中序遍历画出二叉树,再用后续遍历写出即是后缀表达式)
中序遍历倒推后得出二叉树如左图,再对该二叉树后序遍历就是后缀表达式了
后缀表达式:
ab*cde/-f*+
先画出一个栈,再从左到右扫描式子,如果是操作数则入栈,如果是运算符,就把栈中的最上面两个数字弹出,先弹出的置于运算符之右方,后弹出的则置之于运算符之左方,运算完毕后将结果再压入栈中,直至结束。
(图略)
4.程序填空题
22)顺序表初始化函数如下,请完成程序填空。
StatusInitList(SqList*L)
{
__L->
elem_=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!
(*L).elem)
exit(OVERFLOW);
(*L).length=0;
(*L).listsize=LIST_INIT_SIZE;
returnOK;
}
23)顺序表GetElem函数如下,请完成程序填空。
StatusGetElem(SqListL,inti,ElemType*e)
if(i<
1||i>
L.length)
exit(ERROR);
*e=*(L.elem+i-1);
24)顺序栈Pop函数如下,请完成程序填空。
StatusPop(SqStack*S,SElemType*e)
if((*S).top==(*S).base)
returnERROR;
*e=*--(S->
top);
25)循环队列EnQueue函数如下,请完成程序填空。
StatusEnQueue(SqQueue*Q,QElemTypee)
if(((*Q).rear+1)%MAXQSIZE==(*Q).front)
(*Q).base[rear]=e;
(*Q).rear=((*Q).rear+1)%MAXQSIZE;
5.编程题
26)应用栈编写括号匹配程序
//stracket(括弧)匹配问题(不考虑brace(花括号),仅考虑中括号以及小括号)
#include"
c1.h"
typedefcharSElemType;
c3-1.h"
bo3-1.c"
#defineN100
Statusbracket(SElemType*a);
//声明括号匹配函数bracket(),有返回值
voidmain()
{
chara[N];
gets(a);
//输入一串数学字符
intb;
b=bracket(a);
if(b==TRUE)
printf("
匹配\n"
);
else
不匹配\n"
}
Statusbracket(SElemType*a)
SqStacks1;
InitStack(&
s1);
//建立栈,用来存储stracket(括弧)
SElemTypet;
//t用来存储弹出来的栈顶元素,注意t的元素类型
while(*a!
=0)
{
switch(*a++)//switch语句是有brace(花括号)的
{
case'
('
:
Push(&
s1,'
break;
['
//左括弧(left-stracket)入栈
)'
{
Pop(&
s1,&
t);
if(t=='
)
break;
else
returnFALSE;
}
]'
Pop(&
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 习题 答案 解析