栈的应用场景
栈的介绍
栈的其他应用场景
数组模拟栈的思路分析
代码实现
import java.util.Scanner;
public class ArrayStackDemo {
public static void main(String[] args) {
ArrayStack arrayStack = new ArrayStack(5);
boolean tag = true;
while(tag){
System.out.println("请选择你要进行的操作,push:往栈中压入数据 pop:从栈中弹出数据 list:遍历栈 exit:退出栈");
Scanner sc = new Scanner(System.in);
String str = sc.next();
switch(str){
case "push" :
System.out.println("请输入你要加入的数据:");
int num = sc.nextInt();
arrayStack.push(num);
break;
case "pop" :
try {
int res = arrayStack.pop();
System.out.println("当前从栈中弹出的数据为:"+res);
}catch(Exception e){
System.out.println(e.getMessage());
}
break;
case "list" :
arrayStack.list();
break;
case "exit" :
tag = false;
System.out.println("程序已退出");
break;
}
}
}
}
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;
}
//入栈--push
public void push(int num){
//先判断栈是否满
if(isFull()){
System.out.println("栈已满,不能再添加数据");
return;
}
stack[++top] = num;
}
//出栈--pop,将栈顶的数据返回
public int pop(){
//先判断栈是否为空
if(isEmpty()){
//抛出异常
throw new RuntimeException("栈为空,无法弹出数据");
}
int value = stack[top];
top--;
return value;
}
//显示栈的情况【遍历栈】,遍历时,需要从栈顶开始显示数据
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]);
}
}
}
结果截图: