栈的介绍
1、栈是一个先入后出的有序列表(想象成弹夹)
2、变化的一端为栈顶,固定的一端为栈底
3、入栈演示图
4、出栈演示图
栈的应用场景
1、递归
2、四则运算
3、表达式转换
4、二叉树遍历
栈的代码实现
实现栈的思路分析
1、使用数组模拟栈
2、定义一个变量top来表示栈顶,初始化为-1
3、入栈:top++;stack[top]=value
4、出栈:int value=stack[top];top–,return value
入栈
public void push(int value){
//判满
if(isFull()){
System.out.println("栈已满");
return;
}
top++;
stack[top]=value;
}
出栈
public int pop(){
//先判断栈是否为空
if(isEmpty()){
//抛出异常
throw new RuntimeException("栈空");
}
int vaule=stack[top];
top--;
return vaule;
}
遍历栈
public void list(){
//判空
if(isEmpty()){
System.out.println("栈空");
return;
}
//需要从栈顶开始显示数据
for (int i = top; i >=0 ; i--) {
System.out.printf("stack[%d]=%d\n",i,stack[i]);
}
}
完整代码
package linkedlist;
import java.util.Stack;
/**
* @author shkstart
* @create 2021-07-28 21:42
*/
public class ArrayStackDemo {
public static void main(String[] args) {
ArrayStack arrayStack = new ArrayStack(5);
arrayStack.push(2);
arrayStack.push(3);
arrayStack.push(4);
arrayStack.push(5);
arrayStack.push(6);
arrayStack.push(7);
System.out.println("出栈前");
arrayStack.list();
System.out.println("出栈后");
arrayStack.pop();
arrayStack.list();
}
}
//定义ArrayStack类 表示栈
class ArrayStack{
private int maxSize;//栈的大小
private int[] stack;//数组,数组模拟栈
private int top=-1;//top表示栈顶
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()){
//抛出异常
throw new RuntimeException("栈空");
}
int vaule=stack[top];
top--;
return vaule;
}
//遍历栈
public void list(){
//判空
if(isEmpty()){
System.out.println("栈空");
return;
}
//需要从栈顶开始显示数据
for (int i = top; i >=0 ; i--) {
System.out.printf("stack[%d]=%d\n",i,stack[i]);
}
}
}