数据结构之线性结构之堆栈

二,堆栈

中缀表达式:运算符位于两数之后; a+b*c-d/e

后缀表达式:运算符位于两数之后; abc*+de/-;计算机表示式求解时的读法;用堆栈实现计算

前缀表达式:运算符位于两数之前; -+a*bc/de

堆栈(操作受限制的线性表),先入后出,只在一端(栈顶,top)做插入和删除

用数组实现堆栈

一个数组实现两个堆栈

用链表表示堆栈,链栈,实际是个单链表。插入和删除操作只能在链栈的栈顶进行。即栈顶Top应该在链表的头,不能在尾部(单向链表只能找到下一项,找不到上一项)

中缀表达式转换成后缀表达式:堆栈实现,复杂度为n

  1. 运算数:直接输出;
  2. 左括号:压栈
  3. 右括号:输出栈顶元素,直到遇到左括号(出栈,不输出)
  4. 运算符:大于栈顶,压栈;小于等于栈顶,输出栈顶,比较新栈顶,循环,压栈
  5. 堆栈存留一一输出

      小于等于栈顶时,栈顶输出

堆栈其他作用:

  1. 函数调用及递归实现
  2. 深度优先搜索
  3. 回溯算法

三,队列

队列(操作受限制的线性表):先进先出,一端插入,另一端输出

数组实现

  循环队列:问题:空满时front==rear都是相等,无法区分

       原因:n种长度值对应n+1种情况

       解决方法:使用额外标记:size或者tag;仅仅使用n-1的数组空间

单链表实现

猜你喜欢

转载自www.cnblogs.com/xiaoxue126/p/9036568.html