public abstract class Istack {
    int MAX_SIZE = 5; /*最大栈长度。为5表示栈中最大容纳5个元素*/
    public abstract boolean push(int data); /*元素进栈,如果栈满返回false*/
    public abstract int pop(); /*从栈中取数据。如果栈已为空返回Integer.MIN_VALUE*/
    public abstract boolean isEmpty();/*判断栈是否为空*/

    /*显示栈中所有元素
    * 1. 如果栈不为空,显示: 
    * 栈中元素有:
    * <显示每个元素,空格分隔,最后一个元素后换行>
    * 2. 如果栈为空,显示: 
    * 栈为空
    */

    public abstract void display();

}

public class Stack extends Istack {
    private int[] data; //栈中存储数据的数组
    private int top; //栈顶指针,指向栈顶元素的下标

    public Stack() {
        data = new int[MAX_SIZE]; //初始化数组大小
        top = -1; //栈顶指针初始化为-1,表示栈为空
    }

    @Override
    public boolean push(int data) {
        if (top == MAX_SIZE - 1) { //判断栈是否已满
            return false;
        }
        this.data[++top] = data; //栈顶指针加1,并将元素存入栈中
        return true;
    }

    @Override
    public int pop() {
        if (top == -1) { //判断栈是否为空
            return Integer.MIN_VALUE;
        }
        int result = this.data[top--]; //取出栈顶元素,并将栈顶指针减1
        return result;
    }

    @Override
    public boolean isEmpty() {
        return (top == -1); //判断栈是否为空
    }

    @Override
    public void display() {
        if (isEmpty()) {
            System.out.println("栈为空");
        } else {
            System.out.print("栈中元素有:");
            for (int i = 0; i <= top; i++) {
                System.out.print(this.data[i] + " ");
            }
            System.out.println();
        }
    }
}

//测试代码
public static void main(String[] args) {
    System.out.println("************栈测试开始************");
    Stack stack = new Stack();
    int v = stack.pop();
    if (v == Integer.MIN_VALUE) {
        System.out.println("弹出失败,栈为空");
    } else {
        System.out.println("弹出数据为:" + v);
    }
    stack.display();
    stack.push(1);
    stack.push(2);
    stack.push(3);
    stack.push(4);
    stack.push(5);
    if (!stack.push(6)) {
        System.out.println("压栈失败,栈已满。失败的数据为:6");
        stack.display();
    }
    for (int i = 0; ; i++) {
        if (stack.isEmpty()) break;
        System.out.println(i + ". 弹出元素为:" + stack.pop());
        stack.display();
    }
    System.out.println("**************栈测试结束**************");
}
Java 栈数据结构实现 - Stack 类详解

原文地址: https://www.cveoy.top/t/topic/nOOj 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录