欢迎访问宙启技术站
智能推送

Java函数实现栈的基本操作(入栈、出栈、取栈顶元素)

发布时间:2023-06-09 15:31:38

栈是一种常见的线性数据结构,其遵循后进先出(Last In First Out, LIFO)的原则。在Java中,我们可以利用数组或链表来实现栈。下面,我将介绍如何利用数组来实现栈的基本操作。

1. 定义栈的结构

在使用数组实现栈之前,我们需要定义一个栈的结构,包括栈的大小、栈顶指针和栈元素数组。

public class ArrayStack {

    private int maxSize; //栈的大小

    private int top;    //栈顶指针

    private int[] stack; //栈元素数组

    //构造方法

    public ArrayStack(int maxSize) {

        this.maxSize = maxSize;

        stack = new int[maxSize];

        top = -1; //初始化栈顶指针为-1

    }

    //判断栈是否为空

    public boolean isEmpty() {

        return top == -1;

    }

    //判断栈是否已满

    public boolean isFull() {

        return top == maxSize - 1;

    }

    //获取栈顶元素

    public int peek() {

        if (isEmpty()) {

            throw new RuntimeException("栈为空");

        }

        return stack[top];

    }

    //入栈

    public void push(int value) {

        if (isFull()) {

            throw new RuntimeException("栈已满");

        }

        top++;

        stack[top] = value;

    }

    //出栈

    public int pop() {

        if (isEmpty()) {

            throw new RuntimeException("栈为空");

        }

        int value = stack[top];

        top--;

        return value;

    }

}

以上代码中,我们定义了一个数组栈(ArrayStack)类,其中包含了栈的基本结构和操作。

2. 测试栈的基本操作

为了测试我们刚定义的栈,我们可以编写一个简单的测试类。

import java.util.Scanner;

public class TestArrayStack {

    public static void main(String[] args) {

        ArrayStack stack = new ArrayStack(5);

        while (true) {

            System.out.println("请选择操作:");

            System.out.println("1.入栈 2.出栈 3.取栈顶元素 4.退出");

            Scanner scanner = new Scanner(System.in);

            int op = scanner.nextInt();

            switch (op) {

                case 1:

                    try {

                        System.out.println("请输入要入栈的元素:");

                        int value = scanner.nextInt();

                        stack.push(value);

                        System.out.println("入栈成功");

                    } catch (Exception e) {

                        System.out.println(e.getMessage());

                    }

                    break;

                case 2:

                    try {

                        int value = stack.pop();

                        System.out.println("出栈元素是:" + value);

                    } catch (Exception e) {

                        System.out.println(e.getMessage());

                    }

                    break;

                case 3:

                    try {

                        int value = stack.peek();

                        System.out.println("栈顶元素是:" + value);

                    } catch (Exception e) {

                        System.out.println(e.getMessage());

                    }

                    break;

                case 4:

                    System.exit(0); //退出程序

            }

        }

    }

}

在测试类中,我们先实例化一个ArrayStack对象,然后通过Scanner类获取用户输入并进行相应的操作。用户可以选择入栈、出栈、取栈顶元素或退出程序。我们通过try-catch语句来处理异常情况,例如栈已满、栈为空等情况。

3. 运行测试类

当我们运行TestArrayStack类时,控制台上会输出相应的操作提示。我们输入相应的数字,程序将执行相应的操作。

例如,当我们选择入栈操作时,控制台上会显示“请输入要入栈的元素:”,我们输入相应的数字后,程序将把它入栈,同时向控制台输出“入栈成功”。

当我们选择出栈操作时,程序会弹出栈顶的元素,在控制台上输出相应的信息。

当我们选择取栈顶元素操作时,程序会返回当前栈顶的元素。

当我们选择退出程序时,程序会调用System.exit(0);方法退出程序。

总结

通过以上步骤,我们成功地利用数组实现了栈的基本操作,包括入栈、出栈和取栈顶元素。通过这种方法,我们可以方便地处理具有后进先出特性的程序逻辑。