第2章习题答案

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
0 0 0 9
0 0 0 0
2.17试写出题2.15中两个稀疏矩阵的POS与NUM向量。
解:对应的POS与NUM向量分别为
(1)
k
1
2
3
4
5
6
POS(k)
(6)运算符“/”进OPS栈,读出操作数T进OVS栈,如图2.2(f)所示。
(7)读出运算符“+”,由于运算符“+”的优先级不大于OPS栈栈顶运算符“/”的优先级,因此从OVS栈依次弹出操作数T与T2,从OPS栈弹出运算符“/”,然后作运算T3=T2/T,并将运算结果T3压入OVS栈,如图2.2(g)所示。在这种情况下,刚读出的运算符“+”下次将重新考虑。
(12)运算符“;”的优先级不大于OPS栈站顶运算符“+”的优先级,因此从OVS栈依次弹出操作数T5与T3,从OPS栈弹出运算符“+”,然后作运算T6=T3+T5,并将运算结果T6压入OVS栈,如图2.2(1)所示。在这种情况下,运算符“;”下次将重新考虑。
(13)运算符“;”与OPS栈栈顶的运算符“;”(它们都是表达式结束符)相遇,弹出OVS栈中的T8即为表达式的计算结果,计算过程结束。
(1)B= [ 4 5 -6 ](2)B=[ 5 2 21 ]
6 4 13 5 4 -12
6 6 -2 7 1 -9
7 2 17 7 5 15
8 8 4
2.16下列各三列二维数组分别表示一个稀疏矩阵,试分别写出与它们对应的稀疏矩阵(假设数组下标从1开始):
6 4 6
1 2 4 4 6 5
1 3 -6 1 3 -6
(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)所示。在这种情况下,刚读出的右括号“)”下次将重新考虑。
0 0 0 0 0 0 0 4
(2)0 0 35 0 0
0 0 0 0 23
17 0 0 0 0
A=[ 0 0 0 0 0 ]
0 21 0 -12 0
0 0 0 0 0
-9 0 0 0 15
解:对应的3列二维数组分别为
8 8 8 7 5 7
1 6 5 1 3 35
3 1 15 2 5 23
3 7 -8 3 1 17
(4)右括号“)”遇到OPS栈中的左括号“(”,从OPS栈中退出左括号“(”,如图2.2(d)所示。
(5)读出运算符“/”,由于运算符“/”的优先级不大于OPS栈栈顶运算符“*”的优先级,因此从OVS栈依次弹出操作数T1与A,从OPS栈弹出运算符“*”,然后作运算T2=A*T1,,并将运算结果T2压入OVS栈,如图2.2(e)所示。在这种情况下,刚读出的运算符“/”下次将重新考虑。
(1)[2 1 3] (2)[1 5 -1 ]
3 1 5 2 2 4
3 3 -8 3 1 8
5 4 9 4 4 9
解:对应的稀疏矩阵分别为
0 4 -6 0 0 0 -6 0 -1 0
3 0 0 0 0 4 0 0 0 0
(1)A=[5 0 -8 0] (2) A=[ 8 0 0 0 0 0 ]
0 0 0 0 0 0 0 9 0 0
(1)front=14,rear=21
(2)front=23,rear=12
问在这两种情况下,循环队列中各有多少个元素?
解:设循环队列的容量为m。
如果rear>front,则循环队列中的元素个数为rear-front;
如果rear<front,则循环队列中的元素个数为m+(rear-front)。
由此可以得到:
(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)所示。在这种情况下,刚读出的右括号“)”下次将重新考虑。
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 -8 0
0 0 0 0 -6 0百度文库0 0
A=[ 0 0 0 0 0 0 0 0 ]
0 0 0 13 0 -2 0 0
0 17 0 0 0 0 0 0
(10)右括号“)”遇到OPS栈中的左括号“(”,从OPS栈中退出左括号“(”,如图2.2(j)所示。
(11)读出运算符“;”,由于运算符“;”的优先级不大于OPS栈栈顶运算符“* *”的优先级,因此从OVS栈依次弹出操作数T4与C,从OPS栈弹出运算符“* *”,然后作运算T5=C* *T4,并将运算结果T5压入OVS栈,如图2.2(k)所示。在这种情况下,刚读出的运算符“;”下次将重新考虑。
2.4对于下面的每一步,画出栈元素与栈顶指针的示意图:
(1)栈空
(2)在栈中插入一个元素A;
(3)在栈中插入一个元素X;
(4)删除栈顶元素;
(5)在栈中插入一个元素T;
(6)在栈中插入一个元素G;
(7)栈初始化。
解:如图2.1所示。
图2-1栈元素与栈顶指针的示意图
2.5设循环队列的容量为70(序号为1~70),现经过一系列的入队与退队运算后,有:
(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)所示。
相关文档
最新文档