栈:栈是限定仅在表尾进行插入和删除操作的线性表。
队列:队列是只允许在一段进行插入操作,而在另一端进行删除操作的线性表。
我们把允许插入和删除的一端称为栈顶,另一端称为栈底;
------栈又称为后进先出的线性表
后进先出(Last In First Out 简称为LIFO结构)
栈的插入操作,叫做进栈,也称压栈、入栈。
栈的删除操作,叫做出战,也称弹栈。
栈的顺序存储结构:栈是线性表的特例,站的顺序存储结构也是线性表存储的简化。
栈的链式存储结构:
栈的应用-----递归
递归的定义:在高级语言中,调用自己和其他函数并没有本质的不同。我们把一个直接调用子集或通过一系列的调用语句间接地调用子集的函数,称作递归。
栈的应用——四则运算表达式求值
1,后缀(逆波兰)表达式定义
数学表达式求值:
9+(3-1)*3+10/2
后缀表达式为:
9 3 1-3*+10 2/+
后缀的原因产生于所有的符号都是在要运算数字的后面出现
规则:从左到右遍历表达式的每一个数字和符号,遇到数字就进栈,遇到符号就处于栈顶的数字出栈,进行运算,运算结果进栈,一直到最终获得结果。
中缀表达式转后缀表达式
我们把平时所用的标准四则运算表达式,即“ 9+(3-1)*3+10/2 ”叫做中缀表达式。
中缀表达式“
9+(3-1)*3+10/2”转化为
后缀表达式“
9 3 1-3*+10 2/+”
规则:从左到右遍历中缀表达式中的每一个数字和符号,若是数字就输出,即成为后缀表达式的一部分;若是符号,则判断其与栈顶符号的优先级,是右符号或优先级低于栈顶符号(乘除优先于加减)则栈顶元素依次出栈并输出,并将当前富厚啊进栈,一直到最终输出后缀表达式为止。
队列(queue)是只允许在一段进行插入操作,而在另一端进行删除操作的线性表。
先进先出(First In First Out)的线性表 简称FIFO.允许插入的一段叫队尾,允许删除的一端叫队头
总结:栈和队列,都是特殊的线性表
栈(stack)是限定仅在表尾进行插入和删除操作。
队列(queue)是只允许在一段进行插入操作,另一端进行删除操作的线性表。