数据结构之 栈与队列,栈的递归,栈的四则运算

1、总览

2、栈

定义:栈是限定仅在表尾进行插入和删除操作的线性表。(浏览器后退、word等撤销)

栈的顺序存储结构:

俩个栈的共享空间:

      特点:数组的俩端向中间靠拢。(类比股票,有人卖出才能有人买入)。

栈的链式存储结构:链栈。

栈的应用:

(1)递归算法: 栈实现了递归。

      把一个直接调用自己或通过一系列的调用语句间接地调用自己的函数,称做递归函数。(先入后出)。

      当程序执行到某个函数时,将这个函数进行入栈操作,当一个函数完成之后会进行出栈操作。

(2)四则运算:将中缀表达式转化为后缀表达式(栈用来进出运算的符号)

          9+(3-1)*3+10/2 ====> 9 3 1 - 3 * + 10 2 / +

         规则:

     从左到右遍历中缀表达式的每个数字和符号,若是数字就输出,即成为后缀表达式的一部分;若是符号,则判断其与栈顶符号的优先级,是右括号或优先级低于栈顶符号(乘除优先加减)则栈顶元素依次出栈并输出(直到匹配到左括号),并将当前符号进栈,一直到最终输出后缀表达式为止。

(3)四则运算:将后缀表达式进行运算得出结果(栈用来进出运算的数字)

    规则:

    从左到右遍历表达式的 每个数字和符号,遇到数字就进栈,遇到符号,就将处于栈顶俩个数字出栈,进行运算,运算结果进栈,一直到最终获胜结果。

3、队列

    仅允许在一端进行插入操作,而在另一端进行删除操作的线性表。(排队买票等)

4、一些小结论

栈和队列,都可以用线性表的顺序存储结构来实现,但都存在着顺序存储的弊端。

(1)栈来说,共享栈,用数组的俩端作栈顶的方法,来让俩个栈共享数据。最大化的利用了数组空间。

(2)为了避免插入和删除时需要移动数据,于是引用了循环队列(队头元素的下标可以不为0)。使得队头和队尾可以在数组中循环变化。解决了移动数据的时间消耗。

猜你喜欢

转载自blog.csdn.net/yuewei19/article/details/81163822