栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
![b0ef1465a97d81affcfa8d320560e568.png](https://i-blog.csdnimg.cn/blog_migrate/3e1ccffc89bea87280ba19d9d99e2170.jpeg)
栈
分类:顺序栈和链式栈
特点:先进后出
1.进栈(PUSH)算法
①若TOP≥n时,则给出溢出信息,作出错处理(进栈前首先检查栈是否已满,满则溢出;不满则作②);
②置TOP=TOP+1(栈指针加1,指向进栈地址);
③S(TOP)=X,结束(X为新进栈的元素);
2.退栈(POP)算法
①若TOP≤0,则给出下溢信息,作出错处理(退栈前先检查是否已为空栈, 空则下溢;不空则作②);
②X=S(TOP),(退栈后的元素赋给X):
③TOP=TOP-1,结束(栈指针减1,指向栈顶)。
实例:
![50e4197f5127e95793bad3fc0558cae6.png](https://i-blog.csdnimg.cn/blog_migrate/430ddc9ebc708dc9a8acc071b4514a50.jpeg)
栈的出操作
在计算机系统中,栈则是一个具有以上属性的动态内存区域。程序可以将数据压入栈中,也可以将数据从栈顶弹出。在i386机器中,栈顶由称为esp的寄存器进行定位。压栈的操作使得栈顶的地址减小,弹出的操作使得栈顶的地址增大。
栈在程序的运行中有着举足轻重的作用。最重要的是栈保存了一个函数调用时所需要的维护信息,这常常称之为堆栈帧或者活动记录。堆栈帧一般包含如下几方面的信息:
1.函数的返回地址和参数
2. 临时变量:包括函数的非静态局部变量以及编译器自动生成的其他临时变量。
简单的应用:
倒序输出
下面利用java分装好的Stack,简单写一个程序:
package demo1;import java.util.Stack;public class Stack_Demo1 {public static void main(String[] args) {Stack stack = new Stack();System.out.println("进栈操作~~~");stack.push("a");stack.push("b");stack.push("c");stack.push("d");System.out.println("出栈操作~~~");while(stack.size() > 0){System.out.println(stack.pop());}System.out.println("出栈完成~~~");}}
输出结果
![73b2ffc0cbb507f3c9d0435c7aec89e0.png](https://i-blog.csdnimg.cn/blog_migrate/621d3ad7bcbb21443ead6433a56fb8f3.jpeg)