栈的概念
栈是一种受限制的线性表,是只能在表尾进行插入和删除操作。
在我们日常生活中,一些软件的撤回功能,每次撤回到上一步,还有浏览器的后退键也是和栈的原理大同小异。
允许插入和删除的一端被称为栈顶,另一端被称为栈底,栈遵循后进先出的原则。
栈的插入操作,叫做入栈,栈的删除操作,叫做出栈。
栈的应用--四则运动表达式求值
使用逆波兰表示法:从左到右遍历每一个数字和符号,如果是数字就输出,如果是符号,就判断其与栈顶符号的优先级,是右括号或者优先级不高于栈顶符号,则栈顶元素依次出栈并输出,并将当前符号进栈,一直到最后输出完整表达式。
举例:9+(3-1)*3+10/2
1.初始化空栈,用来存放符号
2.第一个数字是9,输出9,后面符号是“+”,进栈。
3.第三个符号是“(”,进栈。
4.第四个数字是3,输出,接着是“-”,进栈,然后再输出1:
5.在后面是符号“)”,此时需要匹配前面的“(”,因此栈顶一次出栈,知道“(”出栈为止。”()“不用输出
6.接下来是“ * ”入栈,发现比栈顶的“+”优先级高,继续进栈,然后后面的3输出
7.之后是符号“+”,优先级低于栈顶的 “ * ”和栈底的“+”,因此先输出 * ,然后“+”也出栈输出,那3后面的这个“+”就入栈
8.接着输出10,剩下最后一个符号入栈“:
9.因为到了最后了,因此栈内的符号全部出栈:
计算方法:从左到右遍历每一个数字和符号,遇到数字就进栈,遇到是符号,就将位于栈顶的两个数字出栈,进行运算后的结果进栈,一直到最后获得结果。
队列概念
队列也是一种受限制的线性表,是只允许在一端进行插入,另一端进行删除的操作。
允许插入的一端被称为队尾,允许删除的一端称为队头,栈遵循先进先出的原则。就像排队一样,过来一个人就要排到队尾,而进去车厢一个人肯定从队头开始。
队的插入操作,叫做入队,队的删除操作,叫做出队。
来源:https://blog.csdn.net/zzu_seu/article/details/99639371