【数据结构知识】栈和队列

前言

        对栈和队列的介绍比较简单,其实当链表理解清楚后,对这两个的理解都会比较容易,有时间会对栈的四则运算应用那个地方画出示意图。

【数据结构系列】【前一章:链表】【后一章:串】

三、栈和队列

1、栈

存储结构:顺序存储和链式存储

(1)两栈共享空间

进栈时判断是否满栈条件:S->top1+1==S->top2即为满栈

出栈时判断溢出条件:S->top1==-1||S->top2==MAXSIZE

(2)栈的作用

虽然已有数组链表这样的结构了,为何还要引入栈,就像我们可以两条腿走路到各个地方,但为什么又有飞机,火车,汽车等交通工具一样的道理,即是让问题根据明确化,有针对性地去解决问题。栈的引入简化了程序设计的问题,划分了不同关注层次,使得思考范围缩小,更加聚焦于我们要解决的问题核心。

(3)栈的应用

1)递归

编译器选择用栈实现递归,因为在前行阶段,对于每一层递归,函数的局部变量、参数值以及返回地址都被压入栈中,在退回阶段,位于栈顶的局部变量、参数值和返回地址被弹出,用于返回调用层次中执行代码的其余部分,也就是恢复了调用的状态。

2)四则运算表达式求值

括号的问题:遇到左括号就入栈,当遇到右括号时,就让栈顶的左括号出栈,并计算期间的数值运算。

加减乘除问题(逆波兰(后缀)表示法):对于9+(3-1)*3+10/2,用后缀表示法是:9 3 1 - 3 * + 10 2 / +,后缀表示法实质上就是把运算符都放在数值后面。规则:表达式从左到右,遇到数字就让其入栈,遇到运算符号,就让栈顶的两个数字进行运算,将其结果再次入栈,一直到最终得到结果。

现在问题是如何把表达式转换成后缀表达式:从左至右,遇到数字即输出,遇到第一个符号先压栈,再当遇到符号时与栈顶符号优先级进行比较,是右括号或者优先级低于栈顶符号,则栈顶元素依次出栈,并将当前符号入栈,一直到最终输出后缀表达式为止。

2、队列

一端进行插入操作,另一端进行删除操作,先进先出的线性表。同样具有顺序存储和链式存储两种存储方式。

 

 

你可能感兴趣的:(数据结构)