package com.bigdata.datastructure.stack;
import java.util.Scanner;
/**
* @ description: 数组实现栈
* @ author: spencer
* @ date: 2020/10/28 15:40
*/
public class ArrayStackDemo {
public static void main(String[] args) {
ArrayStack stack = new ArrayStack(5);
String key = "";
boolean loop = true;
Scanner scanner = new Scanner(System.in);
while (loop){
System.out.println("show:显示栈");
System.out.println("exit:退出程序");
System.out.println("push:添加数据到栈");
System.out.println("pop:从栈中取出数据");
System.out.println("请输入你的选择:");
key = scanner.next();
switch (key){
case "show":
stack.list();
break;
case "push":
int value = scanner.nextInt();
stack.push(value);
break;
case "pop":
try {
int result = stack.pop();
System.out.println("出栈的数据是:" + result);
} catch (Exception e) {
e.printStackTrace();
}
break;
case "exit":
scanner.close();
loop = false;
break;
default:
break;
}
}
}
}
class ArrayStack{
private int maxSize; // 栈的大小
private int[] stack; // 数组模拟栈,存储栈的数据
private int top = -1; // 栈顶,初始化为-1
public ArrayStack(int maxSize) {
this.maxSize = maxSize;
this.stack = new int[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; // 将移动后的位置填入value
}
// 入栈
public int pop(){
// 先判断栈是否满了
if (isEmpty()){
// System.out.println("栈空了,无法出栈");
// return -1;
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]);
}
}
}
java数组实现栈的功能
最新推荐文章于 2021-02-20 00:39:51 发布