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

实现Java中的Stack类并使用push、pop等常用函数

发布时间:2023-07-03 17:19:03

Stack类是Java中的一个数据结构类,它是继承自Vector类的,用于表示一个后进先出(Last-In-First-Out,LIFO)的栈。在Stack类中,常用的函数有push、pop、peek、empty和size等。下面我们将实现一个自定义的Stack类,并使用这些常用函数。

首先,我们创建一个名为MyStack的类,并将其定义为泛型类,以支持不同类型的数据。在类的内部,我们使用一个Vector来存储栈中的元素。

import java.util.Vector;

public class MyStack<E> {
    private Vector<E> stack;

    public MyStack() {
        stack = new Vector<>();
    }

    public void push(E element) {
        stack.add(element);
    }

    public E pop() {
        if (stack.isEmpty()) {
            throw new IllegalStateException("Stack is empty");
        }
        return stack.remove(stack.size() - 1);
    }

    public E peek() {
        if (stack.isEmpty()) {
            throw new IllegalStateException("Stack is empty");
        }
        return stack.get(stack.size() - 1);
    }

    public boolean empty() {
        return stack.isEmpty();
    }

    public int size() {
        return stack.size();
    }
}

在上面的代码中,我们定义了一个泛型Vector类型的stack变量,用于存储栈中的元素。在构造函数中,我们初始化了stack为一个空的Vector。接下来,我们依次实现了push、pop、peek、empty和size等常用函数。

- push函数将一个元素添加到栈顶,我们只需要通过Vector的add函数将元素添加到Vector的末尾即可。

- pop函数将栈顶的元素弹出并返回该元素,我们通过Vector的remove函数将Vector中的最后一个元素移除并返回即可。注意,在弹出之前,我们需要判断栈是否为空,如果为空则抛出一个异常。

- peek函数返回栈顶的元素,我们通过Vector的get函数获取Vector中最后一个元素即可。同样,在获取之前,我们也需要判断栈是否为空。

- empty函数返回一个布尔值,表示栈是否为空。我们直接使用Vector的isEmpty函数即可。

- size函数返回栈中元素的数量,我们使用Vector的size函数获取Vector中的元素数量。

现在,我们可以使用自定义的Stack类了。

MyStack<Integer> stack = new MyStack<>();
stack.push(1);
stack.push(2);
stack.push(3);

System.out.println("Size of stack: " + stack.size());  // 输出:Size of stack: 3

System.out.println("Pop element from stack: " + stack.pop());  // 输出:Pop element from stack: 3

System.out.println("Peek element from stack: " + stack.peek());  // 输出:Peek element from stack: 2

System.out.println("Is stack empty? " + stack.empty());  // 输出:Is stack empty? false

stack.pop();
stack.pop();

System.out.println("Is stack empty? " + stack.empty());  // 输出:Is stack empty? true

在上面的示例中,我们创建了一个MyStack对象,并向其中压入了三个整数元素1、2和3。然后,我们输出了栈的大小、弹出了栈顶的元素、查看了栈顶的元素、判断了栈是否为空,并进行了相应的输出。最后,我们将栈中的元素弹出,并再次判断栈是否为空。

通过上述实现和示例,我们成功地实现了一个Stack类,并使用了常用的push、pop、peek、empty和size等函数。使用栈的这些操作可以方便地管理和操作数据,适用于各种场景,如逆波兰表达式求值、括号匹配、迷宫求解等。