栈(LIFO:后进先出)

栈LIFO

        1)栈是一种限制插入和删除只能在一个位置上的表。这个位置就是栈顶(top)。普通的清空栈的操作和测试栈是否为空的操作,都是栈的指令系统的一部分。其中我们能对栈直接进行的操作只有基本操作:push(入栈)、pop(出栈)。push相当于插入,而pop相当于把最后插入的元素删除。


        一般的模型是,存在某个元素位于栈顶,而该元素是唯一的可见元素。

        2)栈的实现:由于栈是一个表,所以任何实现表的方法都能实现栈。那么,ArrayList和LinkedList都支持栈的操作。由于栈的操作是常数时间操作,所以,除非在非常独特的环境下,否则不会出现任何明显的改进。这种独特的方法,一种是链式结构。一种是数组结构。

        栈的链表实现:通过在单链表的顶端插入元素来实现push,通过删除表顶端的元素来实现pop操作。top只是考查表顶端元素并返回它的值。

        栈的数组实现:模仿的是ArrayList的add操作。与每个栈相关的操作是theArray和topOfStack,对于空栈它是-1.为将某个元素x推入栈中,我们使topOfStack增1,然后将theArray[topOfStack] = x.为了弹出栈元素,我们置返回值为theArray[topOfStack],然后使topOfStack-1.栈很有可能是在计算机科学数组之后最基本的数据结构。

        3)后缀表达式

        (原式) 4.99*1.06+5.99+6.99*1.06

        (后缀表达式)4.99 1.06*5.99+6.99 1.06*

        计算这个问题最容易的方法就是使用一个栈。当遇见一个数值时,就把数值压入栈中;当遇到一个符号时,就作用于从栈中弹出的两个数上,再将作用的结果压入栈中。

        计算一个后缀表达式,所花费的时间是O(N),因为对输入中的每个元素的处理都是栈的一个操作,相当于是由一些常数时间组起来的时间。注意:当一个后缀表达式给出来时,没有必要知道计算的优先级。

        4)中缀到后缀的转换

        这里我们坚持普通的优先级法则

        例如:中缀表达式   a+b*c+(d*e+f)*g

                    后缀表达式   abc*+de*f+g*+3.

        


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值