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

使用Java函数实现栈的基本功能

发布时间:2023-06-29 19:46:52

栈是一种常见的数据结构,它具有后进先出(LIFO)的特点。在Java中,我们可以使用数组或链表来实现栈的基本功能,包括压栈(push)、弹栈(pop)、取栈顶元素(peek)和判断栈是否为空(isEmpty)。

使用数组实现栈的基本功能比较简单,可以定义一个整型数组和一个指针top来表示栈。top指向栈顶元素的位置,初始值为-1表示栈为空。

下面是一个使用数组实现栈基本功能的Java代码示例:

public class Stack {
    private int[] data;
    private int top;

    public Stack(int capacity) {
        data = new int[capacity];
        top = -1;
    }

    public void push(int value) {
        if (top == data.length - 1) {
            throw new StackOverflowError("Stack is full.");
        }
        data[++top] = value;
    }

    public int pop() {
        if (isEmpty()) {
            throw new IllegalStateException("Stack is empty.");
        }
        return data[top--];
    }

    public int peek() {
        if (isEmpty()) {
            throw new IllegalStateException("Stack is empty.");
        }
        return data[top];
    }

    public boolean isEmpty() {
        return top == -1;
    }
}

上述代码中,我们首先定义了一个Stack类,包含私有成员变量int[] data和int top,分别表示存储数据和栈顶元素位置。

在构造函数中,我们根据传入的容量capacity创建一个相应大小的数组,并将top初始化为-1。

push方法将传入的值放入栈中,首先判断栈是否已满,若已满则抛出异常,否则将top的值加1并将值赋给data[top]。

pop方法从栈中弹出一个元素,首先判断栈是否为空,若为空则抛出异常,否则返回data[top]的值,并将top的值减1。

peek方法返回栈顶元素的值,首先判断栈是否为空,若为空则抛出异常,否则返回data[top]的值。

isEmpty方法判断栈是否为空,当top的值为-1时表示栈为空。

除了使用数组,我们还可以使用链表来实现栈的基本功能。链表实现栈的优势在于不需要事先定义栈的大小,可以动态地进行扩容和缩容。

下面是一个使用链表实现栈基本功能的Java代码示例:

public class Node {
    private int value;
    private Node next;

    public Node(int value) {
        this.value = value;
        next = null;
    }

    public int getValue() {
        return value;
    }

    public Node getNext() {
        return next;
    }

    public void setNext(Node next) {
        this.next = next;
    }
}

public class Stack {
    private Node top;

    public Stack() {
        top = null;
    }

    public void push(int value) {
        Node node = new Node(value);
        node.setNext(top);
        top = node;
    }

    public int pop() {
        if (isEmpty()) {
            throw new IllegalStateException("Stack is empty.");
        }
        int value = top.getValue();
        top = top.getNext();
        return value;
    }

    public int peek() {
        if (isEmpty()) {
            throw new IllegalStateException("Stack is empty.");
        }
        return top.getValue();
    }

    public boolean isEmpty() {
        return top == null;
    }
}

上述代码中,我们定义了一个Node类表示链表的节点,含有一个整型值value和一个指向下一个节点的引用next。

在Stack类中,我们定义了一个私有成员变量top,表示栈顶节点的引用。

push方法将传入的值封装成一个新的节点,并将新节点的next指向当前的top,然后将top指向新节点。

pop方法从栈中弹出一个节点,首先判断栈是否为空,若为空则抛出异常,否则返回top节点的值,并将top指向next节点。

peek方法返回栈顶节点的值,首先判断栈是否为空,若为空则抛出异常,否则返回top节点的值。

isEmpty方法判断栈是否为空,当top为null时表示栈为空。

以上就是使用Java函数实现栈的基本功能的示例代码,通过数组或链表可以方便地实现栈的压栈、弹栈、取栈顶元素和判断栈是否为空的操作。