第2章习题答案.doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2.4 对于下面的每一步,画出栈元素与栈顶指针的示意图: (1)栈空 (2)在栈中插入一个元素A; (3)在栈中插入一个元素X; (4)删除栈顶元素; (5)在栈中插入一个元素T; (6)在栈中插入一个元素G; (7)栈初始化 。 解:如图2.1所示。 图2-1 栈元素与栈顶指针的示意图 2.5 设循环队列的容量为70(序号为1~70),现经过一系列的入队与退队运算后,有: (1)front=14,rear=21 (2)front=23,rear=12 问在这两种情况下,循环队列中各有多少个元素? 解:设循环队列的容量为m 。 如果rear>front ,则循环队列中的元素个数为rear-front ; 如果rear<front ,则循环队列中的元素个数为m+(rear-front)。 由此可以得到: (1)循环队列中的元素个数为rear-front=21-14=7 。 (2)循环队列中的元素个数为m+(rear-front)=70+(12-23)=59 。 2.6 试图示在表达式A*(B-D)/T+C * * (E * F ) 执行过程中运算符栈和操作数栈的变化情况。 解:(1)建立操作数栈OVS(栈顶指针为topv)与运算符栈OPS(栈顶指针为topp),其中操作数栈的初始状态为空,在运算符栈中已压入一个表达结束符“;”,如图2.2(a)所示。 (2)读出操作数A进OVS栈,读出运算符“*”进OPS栈,读出左括号“(”进OPS栈,读出操作数B进OVS栈,读出运算符“-”进OPS栈,读出操作数D进OVS栈,如图2.2(b)所示。 (3)读出右括号“)”,由于右括号“)”的优先级不大于OPS栈栈顶运算符“-”的优先级,因此从OVS栈依次弹出操作数D与B,从OPS栈弹出运算符“-”,然后作运算T1=B-D,并将运算结果T1压入OVS栈,如图2.2(e)所示。在这种情况下,刚读出的右括号“)”下次将重新考虑。 (4)右括号“)”遇到OPS栈中的左括号“(”,从OPS栈中退出左括号“(”,如图2.2(d)所示。 (5)读出运算符“/ ”,由于运算符“/ ”的优先级不大于OPS栈栈顶运算符“ * ”的优先级,因此从OVS栈依次弹出操作数T1与A,从OPS栈弹出运算符“ * ”,然后作运算T2=A*T1 ,,并将运算结果T2压入OVS栈,如图2.2(e)所示。在这种情况下,刚读出的运算符“/ ”下次将重新考虑。 (6)运算符“/ ”进OPS栈,读出操作数T进OVS栈,如图2.2(f)所示。 (7)读出运算符“+”,由于运算符“+”的优先级不大于OPS栈栈顶运算符“/ ”的优先级,因此从OVS栈依次弹出操作数T与T2,从OPS栈弹出运算符 “/ ” ,然后作运算T3=T2/T,并将运算结果T3压入OVS栈,如图2.2(g)所示。在这种情况下,刚读出的运算符“+”下次将重新考虑。 (8)运算符“+”进OPS栈,读出操作数C进OVS栈,读出运算符“* *”进OPS栈,读出左括号“(”进OPS栈,读出操作数E进OVS栈,读出运算符“*”进OPS栈,读出操作数F进OVS栈,如图2.2(h)所示。 (9)读出右括号“)”,由于右括号“)”的优先级不大于OPS栈栈顶运算符“*”的优先级,因此从OVS栈依次弹出操作数F与E,从OPS栈弹出运算符“*”,然后作运算T4=E*F,并将运算结果T4压入OVS栈,如图2.2(i)所示。在这种情况下,刚读出的右括号“)”下次将重新考虑。 (10)右括号“)”遇到OPS栈中的左括号“(”,从OPS栈中退出左括号“(”,如图2.2(j)所示。 (11)读出运算符“;”,由于运算符“;”的优先级不大于OPS栈栈顶运算符“* *”的优先级,因此从OVS栈依次弹出操作数T4与C,从OPS栈弹出运算符“* *”,然后作运算T5=C* *T4,并将运算结果T5压入OVS栈,如图2.2(k)所示。在这种情况下,刚读出的运算符“;”下次将重新考虑。 (12)运算符“;”的优先级不大于OPS栈站顶运算符“+”的优先级,因此从OVS栈依次弹出操作数T5与T3,从OPS栈弹出运算符“+”,然后作运算T6=T3+T5,并将运算结果T6压入OVS栈,如图2.2(1)所示。在这种情况下,运算符“;”下次将重新考虑。 (13)运算符“;”与OPS栈栈顶的运算符“;”(它们都是表达式结束符)相遇,弹出OVS栈中的T8即为表达式的计算结果,计算过程结束。 2.15 用三列二维数组表示下列稀疏矩阵(假设数组下标从1开始): (1)(1) 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 15 0 0 0 0 0

文档评论(0)

lxm + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档