第一种方法判栈满是 top==MaxSize-1;
链栈本质上是只允许一端增加、删除元素的单链表
如果不空着一个,那么rear=front就不知道是空还是满了
指向队尾元素,由于刚开始没有队尾元素,所以可以指向n-1即 9 这个位置.
无论rear是指向队尾元素还是指向队尾元素的下一个位置,都必须采取方案才能避免判空判满的条件相同。
栈中合法的序列,双端队列中一定也合法,所以继续依次 判断栈中不合法的就行了
左优先原则可保证最后生成的后缀表达式唯一,且从左到右的运算符恰好与运算的先后顺序相对应。
A是操作数,直接输出
+是运算符且栈是空的状态,把 + 压入栈
B直接输出
减号- 和栈中 + 优先级相同,把减号-弹出来,把+压入栈
c是操作数直接输出
乘号比减号优先级高,第三条不符合,所以直接压入栈。D是操作数,直接输出。
除号 / 和 栈中乘号 *优先级相同,乘号出栈,除号入栈。 E直接输出
加号 +优先级小于栈中除号/ , 等于栈中减号-的优先级。栈中运算符可依次输出。 在把加法+ 运算符压入栈中,把F直接初始,栈中加号+出栈,完成后缀表达式的转变。
栈用来保存 暂时还不能确定运算顺序 的运算符。
弹出减号,在去掉左括号
减号优先级比乘号*低,和加号+一样,依次弹出乘号,加号,再把减号压入栈里。
除号压入栈里
全部弹出
中缀表达式的求值就是 中缀转后缀+后缀表达式求值 的结合。
一边把中缀表达式转后缀,一边计算已经转换完的后缀表达式的值(先弹出的是右操作数)
1、树的层次遍历(树章节详解)
2、图的广度优先遍历(图章节详解)
3、在操作系统中的应用,多个进程争抢使用有限的系统资源时,可以用队列进行先来先服务的排序。