没有合适的资源?快使用搜索试试~ 我知道了~
第三章 栈和队列答案.doc
需积分: 5 0 下载量 143 浏览量
2023-12-11
14:13:42
上传
评论
收藏 121KB DOC 举报
温馨提示
试读
15页
第三章 栈和队列答案
资源推荐
资源详情
资源评论
第三章 栈和队列
一、选择题
1.B
2.1B
2.2A
2.3B
2.4D
2.5.C
3.B
4.D
5.D
6.C
7.D
8.B
9.D
10.D
11.D
12.C
13.B
14.C
15.B
16.D
17.B
18.B
19.B
20.D
21.D
22.D
23.D
24.C
25.A
26.A
27.D
28.B
29.BD
30.C
31.B
32.C
33.1B
33.2A
33.3C
33.4C
33.5F
34.C
35.C
36.A
37.AD
二、判断题
1.
√
2.√
3.
√
4.
√
5.×
6.√
7.
√
8.
√
9.
√
10.×
11.
√
12.×
13.
×
14.×
15.
√
16.×
17.
√
18.×
19.
√
20.
√
部分答案解释如下。
1、 1、 尾递归的消除就不需用栈
2、 2、 这个数是前序序列为 1,2,3,…,n,所能得到的不相似的二叉树的数
目。
三、填空题
1、操作受限(或限定仅在表尾进行插入和删除操作) 后进先出
2、栈 3、3 1 2 4、23 100CH 5、0 n+1 top[1]+1=top[2]
6、两栈顶指针值相减的绝对值为 1(或两栈顶指针相邻)。
7、(1)满 (2)空 (3)n (4)栈底 (5)两栈顶指针相邻(即值之差的绝对
值为 1)
8、链式存储结构 9、S×SS×S×× 10、data[++top]=x;
11、23.12.3*2-4/34.5*7/++108.9/+(注:表达式中的点(.)表示将数隔开,
如 23.12.3 是三个数)
12、假溢出时大量移动数据元素。
13、(M+1) MOD N (M+1)% N; 14、队列 15、先进先出
16、先进先出
17 、 s=(LinkedList)malloc(sizeof(LNode)) ;
s->data=x;s->next=r->next;r->next=s;r=s;
18、牺牲一个存储单元 设标记
19、(TAIL+1)MOD M=FRONT (数组下标 0 到 M-1,若一定使用 1 到 M,则
取模为 0 者,值改取 M
20 、 sq.front=(sq.front+1)%(M+1) ; return(sq.data(sq.front)) ;
(sq.rear+1)%(M+1)==sq.front;
21、栈 22、(rear-front+m)% m; 23、(R-P+N)% N;
24、(1)a[i]或 a[1] (2)a[i] (3)pop(s)或 s[1];
25、(1)PUSH(OPTR,w)(2)POP(OPTR)(3)PUSH(OPND,operate
(a,theta,b))
26、(1)T>0(2)i<n(3)T>0(4)top<n(5)top+1(6)true(7)i-1
(8)top-1(9)T+w[i](10)false
四、应用题
1、栈是只准在一端进行插入和删除操作的线性表,允许插入和删除的
一端叫栈顶,另一端叫栈底。最后插入的元素最先删除,故栈也称后进先
出(LIFO)表。
2、队列是允许在一端插入而在另一端删除的线性表,允许插入的一端
叫队尾,允许删除的一端叫队头。最先插入队的元素最先离开(删除),故
队列也常称先进先出(FIFO)表。
3、用常规意义下顺序存储结构的一维数组表示队列,由于队列的性质
(队尾插入和队头删除),容易造成“假溢出”现象,即队尾已到达一维数
组的高下标,不能再插入,然而队中元素个数小于队列的长度(容量)。循
环队列是解决“假溢出”的一种方法。通常把一维数组看成首尾相接。在
循环队列下,通常采用“牺牲一个存储单元”或“作标记”的方法解决“队
满”和“队空”的判定问题。
4、(1)通常有两条规则。第一是给定序列中 S 的个数和 X 的个数相等;
第二是从给定序列的开始,到给定序列中的任一位置,S 的个数要大于或
等于 X 的个数。
(2)可以得到相同的输出元素序列。例如,输入元素为 A,B,C,
则两个输入的合法序列 ABC 和 BAC 均可得到输出元素序列 ABC。对于合
法序列 ABC,我们使用本题约定的 S×S×S×操作序列;对于合法序列 BAC,
我们使用 SS××S×操作序列。
5、三个:CDEBA,CDBEA,CDBAE
6、输入序列为 123456,不能得出 435612,其理由是,输出序列最后
两元素是 12,前面 4 个元素(4356)得到后,栈中元素剩 12,且 2 在栈顶,
不可能栈底元素 1 在栈顶元素 2 之前出栈。
得到 135426 的过程如下:1 入栈并出栈,得到部分输出序列 1;然后 2
和 3 入栈,3 出栈,部分输出序列变为:13;接着 4 和 5 入栈,5,4 和 2
依次出栈,部分输出序列变为 13542;最后 6 入栈并退栈,得最终结果
135426。
7、能得到出栈序列 B、C、A、E、D,不能得到出栈序列 D、B、A、C、
E。其理由为:若出栈序列以 D 开头,说明在 D 之前的入栈元素是 A、B 和
C,三个元素中 C 是栈顶元素,B 和 A 不可能早于 C 出栈,故不可能得到 D、
B、A、C、E 出栈序列。
8、借助栈结构,n 个入栈元素可得到 1/(n+1)((2n)!/(n!*n!))种
出栈序列。本题 4 个元素,可有 14 种出栈序列,abcd 和 dcba 就是其中两
种。但 dabc 和 adbc 是不可能得到的两种。
9、不能得到序列 2,5,3,4,6。栈可以用单链表实现,这就是链栈。
由于栈只在栈顶操作,所以链栈通常不设头结点。
10、如果 i<j,则对于 p
i
<p
j
情况,说明 p
i
在 p
j
入栈前先出栈。而对
于 p
i
>p
j
的情况,则说明要将 p
j
压到 p
i
之上,也就是在 p
j
出栈之后 p
i
才
能出栈。这就说明,对于 i<j<k,不可能出现 p
j
<p
k
<p
i
的输出序列。换句
话说,对于输入序列 1,2,3,不可能出现 3,1,2 的输出序列。
11、(1)能得到 325641。在 123 依次进栈后,3 和 2 出栈,得部分输
出序列 32;然后 4,5 入栈,5 出栈,得部分出栈序列 325;6 入栈并出栈,
得部分输出序列 3256;最后退栈,直到栈空。得输出序列 325641。其操作
序列为 AAADDAADADDD。
(2)不能得到输出顺序为 154623 的序列。部分合法操作序列为
ADAAAADDAD,得到部分输出序列 1546 后,栈中元素为 23,3 在栈顶,故不
可能 2 先出栈,得不到输出序列 154623。
12、(1)一个函数在结束本函数之前,直接或间接调用函数自身,称
为递归。例如,函数 f 在执行中,又调用函数 f 自身,这称为直接递归;
若函数 f 在执行中,调用函数 g,而 g 在执行中,又调用函数 f,这称为间
接递归。在实际应用中,多为直接递归,也常简称为递归。
(2)递归程序的优点是程序结构简单、清晰,易证明其正确性。缺
点是执行中占内存空间较多,运行效率低。
(3)递归程序执行中需借助栈这种数据结构来实现。
(4)递归程序的入口语句和出口语句一般用条件判断语句来实现。
递归程序由基本项和归纳项组成。基本项是递归程序出口,即不再递归即
可求出结果的部分;归纳项是将原来问题化成简单的且与原来形式一样的
问题,即向着“基本项”发展,最终“到达”基本项。
13、函数调用结束时 vol=14。执行过程图示如下:
vol(4) vol(4)=vol(3)+5
14 =vol(2)+3+5
=vol(1)+4+3+5
vol(3)+5 =vol(0)+2+4+3+5
9 =0+2+4+3+5
=14
vol(2)+3
6
剩余14页未读,继续阅读
资源评论
想要打Acm的小周同学呀
- 粉丝: 1070
- 资源: 105
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 写入三菱plcD位寄存器的值
- 确保你的操作系统符合Docker的要求 Docker支持的操作系统包括Ubuntu、Debian、CentOS、Fedora和m
- 确保你的操作系统符合Docker的要求 Docker支持的操作系统包括Ubuntu、Debian、CentOS、Fedora和m
- HDMI 虚拟软件欺骗器
- 确保你的操作系统符合Docker的要求 Docker支持的操作系统包括Ubuntu、Debian、CentOS、Fedora和m
- 读取三菱PLC D位寄存器
- HDMI edid 编辑工具
- 要在你的计算机上安装Docker,你可以按照以下步骤进行:
- 要在你的计算机上安装Docker,你可以按照以下步骤进行:
- html加JavaScript进行表单验证
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功