//定义一个类表示栈
class ArrayStack {
//top表示栈顶的位置,默认为-1,表示栈空
private int top = -1;
//maxSize表示栈能存储元素的最大值
private int maxSize;
//stack表示用数组模拟栈
private int[] stack;
//构造器
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 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]);
}
}
}
public static void main(String[] args) {
//测试栈
ArrayStack stack = new ArrayStack(10);
//接收输入的信息
String key = "";
//控制菜单结束
boolean loop = true;
//扫描器
Scanner scanner = new Scanner(System.in);
while (loop){
System.out.println("========欢迎来到栈测试系统========");
System.out.println("========list表示显示栈中元素========");
System.out.println("========push表示向栈中添加元素========");
System.out.println("========pop表示取出栈中元素========");
System.out.println("========exit表示退出栈========");
System.out.println("请输入你的选择:");
key = scanner.next();
switch (key){
case "list":
stack.list();
break;
case "push":
System.out.println("请输入你要添加的元素:");
int value = scanner.nextInt();
stack.push(value);
System.out.println("元素添加成功~~");
break;
case "pop":
try{
value = stack.pop();
System.out.println("取出的元素是 " + value);
}catch (Exception e){
System.out.println(e.getMessage());
}
break;
case "exit":
loop = false;
break;
}
}
System.out.println("程序退出~~");
}
}
原文:https://www.cnblogs.com/mx-info/p/14742667.html