栈(数组模拟)

303 阅读1分钟

栈的定义:

  栈(又名堆栈):栈是一种运算受限的线性表,只能从栈顶进行插入和删除(先进后出)。

代码实现(java)


import java.util.Scanner;

public class StackDemo {
    public static void main(String[] args) {
        Stack stack = new Stack(4);
        Boolean loop = true;
        int express;
        while (loop) {
            System.out.println("1.入栈 2.出栈 3.遍历 4.退出");
            System.out.print("请输入你的选择:");
            Scanner scanner = new Scanner(System.in);
            express = scanner.nextInt();
            switch (express) {
                case 1:
                    System.out.print("请输入入栈元素的值:");
                    int value = scanner.nextInt();
                    try {
                        stack.push(value);
                        System.out.println("入栈成功!");
                    } catch (Exception e) {
                        System.out.println(e.getMessage());
                    }
                    break;
                case 2:
                    try {
                        int res = stack.pop();
                        System.out.printf("出栈成功值为%d\n",res);
                    } catch (Exception e) {
                        System.out.println(e.getMessage());
                    }
                    break;
                case 3:
                    try {
                        stack.check();
                    } catch (Exception e) {
                        System.out.println(e.getMessage());
                    }
                    break;
                case 4:
                    loop = false;
                    break;
            }
        }
    }
}

// 数组模拟栈
class Stack {
    private int maxSize;
    private int top = -1;
    private int [] stack;
    Stack (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()) {
            stack[++top] = value;
        } else {
            throw new RuntimeException("栈已满!");
        }
    }

    // 出栈
    public int pop () {
        if (!isEmpty()) {
            int value = stack[top--];
            return  value;
        } else {
            throw  new RuntimeException("栈为空!");
        }
    }

    // 获取栈顶元素
    public int getTop() {
        if (!isEmpty()) {
            return stack[top];
        } else {
            throw new RuntimeException("栈为空!");
        }
    }

    // 遍历栈
    public void check () {
        int index = 0;
        if (!isEmpty()) {
            System.out.println("从栈底到栈顶的元素依次为:");
            while (index <= top){
                System.out.printf("arr[%d] = %d\n",index,stack[index]);
                index++;
            }
        } else {
            throw new RuntimeException("栈中没有元素!");
        }
    }
}