堆栈操作
(a-b)/c; 后缀表示 a b - c /
问题:不能把运算符全部放在后面,定义自己的词来解决问题;
问题:不能把运算符全部放在后面,定义自己的词来解决问题;
SWAP 这个词是交换栈中栈顶和栈顶后的一个元素位置;eg: 1 2 . . -->2 1 ok | 1 2 SWAP . . -->1 2 OK
![rcA8BSpRea9p3y8Xv5bCzLtYF9tZxgiVuFQfntnOXjFWJn9Uox4ZViwivFhFfK8D7azk4jP1FVjAvQCjaWAAAAAElFTkSuQmCC](https://img-blog.csdnimg.cn/2022010614333776252.png)
设:a = 10 , b = 4 , c = 2 ;
2 10 4 - SWAP / .
![diE9kd9gvoZDjycecj0IS49yZ7JiGh09lV5w0vmhHL9ATdVOGP3RxBwb0kJeeM9Gx9XZP5rIEGRv80lMFJMCYwUUwIjxZTASDElMH4BEAM4RNHmLVsAAAAASUVORK5CYII=](https://img-blog.csdnimg.cn/2022010614333731006.png)
常用堆栈操作:
![B9R1JYmQeovRQAAAABJRU5ErkJggg==](https://img-blog.csdnimg.cn/2022010614333722906.png)
![CjEO8ZhsHwAAAAASUVORK5CYII=](https://img-blog.csdnimg.cn/2022010614333891474.png)
12 DUP . . DUP * . | ![]() ![]() |
a(a+b)---> a b OVER + * . | ![]() |
ab-ba == b(a-c) | ![]() |
![]() |
显示栈顶元素,但是不弹出 .S
![BQ51rpdYTFJtAAAAAElFTkSuQmCC](https://img-blog.csdnimg.cn/2022010614333952160.png)
成对数堆栈操作
![qOzeQAvAAAAAElFTkSuQmCC](https://img-blog.csdnimg.cn/2022010614333943974.png)
说明:前缀“2”表明这些堆栈操作符都是成对处理数,也能用来处理双字长数。栈标志中的字母“d”表示成对数。
eg:
![nNnHLEj9UUYAAAAASUVORK5CYII=](https://img-blog.csdnimg.cn/2022010614333918228.png)
![pcrm0H+HwOcqBuqOgbpjoO4YqDuGf9l3eV7E5KvRAAAAAElFTkSuQmCC](https://img-blog.csdnimg.cn/2022010614334064946.png)
堆栈操作练习
1、ab+c | c a b * + | : NUM1 * + . ; | ![]() |
2、(a-4b)/6 +c | a 4 b * - ; 6 / ; c + | : NUM2_1 * - ; : NUM2_2 6 / ; : NUM2_3 + ; | ![]() ![]() |
3、a/8b | a 8 b * / | : NUM3 * / | ![]() |
4、0.5ab/100 | 0.5 a b * * 100 / | : NUM4_1 0.5 * * ; : NUM4_2 100 / ; | ![]() |
5、a(2a+3) | a 2 a * 3 + * | : NUM5 2 * 3 + * ; | ![]() |
6、(a-b)/c | a b - c / | : NUM6_1 - ; : NUM6_2 / ; | ![]() |
\\栈练习
a b c === c b a | SWAP ROT |
自己实现OVER功能 | : MYOVER SWAP DUP ROT ROT ; |
实现<ROT 功能与ROT相反 1 2 3 === 3 1 2 | : <ROT SWAP ROT SWAP ; |