二,堆栈
中缀表达式:运算符位于两数之后; a+b*c-d/e
后缀表达式:运算符位于两数之后; abc*+de/-;计算机表示式求解时的读法;用堆栈实现计算
前缀表达式:运算符位于两数之前; -+a*bc/de
堆栈(操作受限制的线性表),先入后出,只在一端(栈顶,top)做插入和删除
用数组实现堆栈
一个数组实现两个堆栈
用链表表示堆栈,链栈,实际是个单链表。插入和删除操作只能在链栈的栈顶进行。即栈顶Top应该在链表的头,不能在尾部(单向链表只能找到下一项,找不到上一项)
中缀表达式转换成后缀表达式:堆栈实现,复杂度为n
- 运算数:直接输出;
- 左括号:压栈
- 右括号:输出栈顶元素,直到遇到左括号(出栈,不输出)
- 运算符:大于栈顶,压栈;小于等于栈顶,输出栈顶,比较新栈顶,循环,压栈
- 堆栈存留一一输出
小于等于栈顶时,栈顶输出
堆栈其他作用:
- 函数调用及递归实现
- 深度优先搜索
- 回溯算法
三,队列
队列(操作受限制的线性表):先进先出,一端插入,另一端输出
数组实现
循环队列:问题:空满时front==rear都是相等,无法区分
原因:n种长度值对应n+1种情况
解决方法:使用额外标记:size或者tag;仅仅使用n-1的数组空间
单链表实现