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

Java函数:如何实现栈数据结构?

发布时间:2023-05-26 16:30:25

栈(Stack)是一种线性数据结构,具有后进先出(Last-In-First-Out,LIFO)的特性。在Java中,我们可以利用数组和链表来实现栈。

1. 使用数组实现栈

首先,我们需要定义一个数组来存储栈元素,并设定栈的大小。在栈顶元素插入和删除时,我们只需要调整栈顶指针即可。

以下是一个使用数组实现栈的Java代码示例:

public class ArrayStack {
    private int top;        // 栈顶指针
    private int[] stack;    // 存储栈元素的数组
    private int size;       // 栈的大小

    // 构造方法
    public ArrayStack(int size) {
        this.top = -1;      // 初始栈顶指针设为-1,表示栈为空
        this.stack = new int[size];
        this.size = size;
    }

    // 入栈操作
    public void push(int data) {
        if (isFull()) {     // 栈已满
            throw new RuntimeException("Stack is full!");
        }
        stack[++top] = data;
    }

    // 出栈操作
    public int pop() {
        if (isEmpty()) {    // 栈为空
            throw new RuntimeException("Stack is empty!");
        }
        return stack[top--];
    }

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

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

    // 判断栈是否已满
    public boolean isFull() {
        return top == size - 1;
    }
}

2. 使用链表实现栈

除了数组,我们还可以使用链表来实现栈。链表头即为栈顶,入栈时将新元素插入到链表头,出栈时将链表头删除即可。

以下是一个使用链表实现栈的Java代码示例:

public class LinkedStack {
    private Node top;       // 栈顶指针
    private int size;       // 栈的大小

    // 定义节点类
    private class Node {
        private int data;
        private Node next;

        public Node(int data) {
            this.data = data;
        }
    }

    // 构造方法
    public LinkedStack() {
        this.top = null;    // 初始栈顶指针设为null,表示栈为空
        this.size = 0;
    }

    // 入栈操作
    public void push(int data) {
        Node newNode = new Node(data);
        newNode.next = top;
        top = newNode;
        size++;
    }

    // 出栈操作
    public int pop() {
        if (isEmpty()) {    // 栈为空
            throw new RuntimeException("Stack is empty!");
        }
        int data = top.data;
        top = top.next;
        size--;
        return data;
    }

    // 获取栈顶元素
    public int peek() {
        if (isEmpty()) {    // 栈为空
            throw new RuntimeException("Stack is empty!");
        }
        return top.data;
    }

    // 判断栈是否为空
    public boolean isEmpty() {
        return top == null;
    }

    // 获取栈的大小
    public int size() {
        return size;
    }
}

以上是使用数组和链表两种方式实现栈的Java代码示例。具体选择何种实现方式,取决于具体的应用场景和需求。