



package com.ws.栈.栈;
//栈的思路分析:
//1.使用数组
//2.定义top,栈顶,初始化-1
//3.入栈:top++ stack[top]=data
//4.出栈:int value=stack[top] top-- return value
import java.util.Scanner;
public class ArrayStackTest {
public static void main(String[] args) {
System.out.println("测试栈");
ArrayStack arrayStack=new ArrayStack(4);
String key="";
boolean loop=true;//控制是否退出
Scanner scanner=new Scanner(System.in);
while (loop){
System.out.println("a:显示栈");
System.out.println("b:退出");
System.out.println("c:入栈");
System.out.println("d:出栈");
System.out.println("------------------------请输入选择----------------------------");
key=scanner.next();
switch (key){
case "a":
arrayStack.list();
break;
case "c":
System.out.println("请输入一个数");
int value=scanner.nextInt();
arrayStack.add(value);
break;
case "d":
try {
int re=arrayStack.pop();
System.out.printf("出栈的数据是%d\n",re);
}catch (Exception e){
System.out.println(e.getMessage());
}
break;
case "b":
scanner.close();
loop=false;
break;
}
}
System.out.println("程序退出");
}
}
//栈
class ArrayStack{
private int maxSize;//栈的大小
private int[] stack;//数组,模拟栈
private int top=-1;//栈顶,初始化-1
//构造器
public ArrayStack(int maxSize){
this.maxSize=maxSize;
stack=new int[this.maxSize];
}
//判断栈满
public boolean ifMax(){
return top==maxSize-1;//数组下标从0开始,-1
}
//判断栈空
public boolean ifFull(){
return top==-1;
}
//入栈
public void add(int value){
//判断栈满
if (ifMax()){
System.out.println("栈满");
return;
}
//入栈
top++;
stack[top]=value;
}
//出栈
public int pop(){
//判断栈是否为空
if (ifFull()){
//抛出异常
throw new RuntimeException("栈空");
}
//出栈
int value=stack[top];//先保存栈顶
top--;//栈顶下移
return value;
}
//遍历栈
//栈顶开始显示数据
public void list(){
//判断栈空
if (ifFull()){
System.out.println("栈空");
return;
}
//栈顶开始显示数据
for (int i=top;i>=0;i--){
System.out.printf("stack[%d]=%d\n",i,stack[i]);
}
}
}

这是一个使用Java编写的数组栈实现,包括入栈、出栈、显示栈内容和判断栈满、栈空的功能。用户可以通过控制台输入进行交互操作,如显示栈、入栈、出栈或退出程序。

被折叠的 条评论
为什么被折叠?



