1. 栈
栈是指允许在一端就行插入或删除操作的线性表,首先需要确定的是栈是一种线性表。
1)栈的英文为 (stack)
2)栈是一个先入后出 (FILO first In Last Ou的有序列表
3)( stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为機项(Top),另端为固定的一端,称为底( Bottom)
4)根据栈的定义可知,最先放入中元素在機底,最后放入的元素在项,而除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除
栈的应用场景
1)子程序的调用:在跳往子程序前,会先将下个指令的地址存到堆栈中,直到子程序执行完后再将地址取出,以回到原来的程序中。
2)处理递归调用:和子程序的调用类似,只是除了備存下一个指令的地址外也将参数、区域变量等数据存入堆栈中。
3)表达式的转换与求值(实际解决)。
4)二叉树的遍历。
5)图形的深度优先{ depth- first)搜素法。
##栈的实现
栈的顺序存储称为顺序栈,它是利用一组地址连续的存储单元存放自栈底到栈顶的数据元素
使用Java语言对栈进行一个简单实现
用数组模拟栈的使用,由于栈是一种有序表,当然可以使用数据的结构来存储栈的内容、
【思路分析】
- 使用数组模拟栈
- 定义变量top表示栈顶,初始化为-1
- 入栈,当有数据加入栈时,top++。stack(top)=data
- 出栈,从栈顶取出数据,定义变量value用来存储栈顶的数据,然后把top–,return value
需要注意的是,入栈是栈顶元素先top++,再放数据。出栈是先取数据,再top–。
用Java定义一个栈,并定义栈中的各种操作方法
//定义一个ArrayStack 表示栈
class ArrayStack{
private int maxSize; //栈的大小
private int[] stack; //数组,数组模拟栈,数据放在该数组中
private int top = -1; // top表示栈顶,初始化为1
//构造方法
public ArrayStack(int maxSize){
this.maxSize = maxSize;
stack = new int[this.maxSize]; //我们上面定义完数组,没有进行初始化,我们需要进行初始化
}
//判断沾满的方法
public boolean isFull(){
return top == maxSize - 1;
}
//判断栈空的方法
public boolean isEmpty(){
return top == -1;
}
//入栈的操作
public void push(int value){
if (isFull()) {
System.out.println("栈满");
return;
}
top++;
stack[top] = value;
}
//出栈的操作,将栈顶的数据返回
public int pop(){
if (isEmpty()) {
System.out.println("栈空");
new IllegalArgumentException("栈空,没有数据");
}
int value = stack[top]