数据结构第四章:栈和队列
栈
- 栈顶指针指向下一个待分配空闲空间,栈底指针指向最后一个待释放已分配空间,当栈顶指针等于栈底指针时,栈为空。
- 链栈:链表头同栈顶指针指向同一块
- 栈的应用:
- 数值转换会先得到低位再得到高位,而输出需要先输出高位,因此可以借助栈来先将过程中算得的低到高位的数字进栈,再出栈输出
- 括号检验的匹配
- 输入缓冲区为了配合退格键,可以设置为栈结构
- 迷宫问题的路径可以设置为栈结构
- 表达式求值可以设置两个栈,一个存运算符,一个存操作数;从左到右依次遍历表达式,若是操作数则进操作数栈,若是运算符,首先比较栈顶运算符与当前运算符优先级,若当前运算符优先,则当前运算符进运算符栈;若栈顶运算符优先,则退栈,将运算结果进操作数栈。同时,规定左括号优先级最高,右括号优先级最低,但若右括号进栈时栈顶为左括号,则消去两个括号。
队列
- 由于基于数组的循环队列的队列空的条件与队列满的条件都是头指针与尾指针位置相同,为了加以区分,有两种方法,一个是留一个位置不占用,也就是数组永远保持至少一个空位置,就在队尾的下一位,因此判断队列满的条件变成了尾指针的下一位等于头指针;另一个方法是设置一个标志位以区分空还是满。