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

Java中如何实现栈和队列并提供相关操作的函数?

发布时间:2023-06-22 04:20:35

在Java中,可以通过数组或者链表来实现栈和队列。

栈的实现:

数组实现栈:

public class ArrayStack {
    private int[] stack; //栈数组
    private int top; //栈顶位置
    private int maxSize; //栈大小

    public ArrayStack(int maxSize) {
        this.maxSize = maxSize;
        stack = new int[this.maxSize];
        top = -1;
    }

    //入栈
    public boolean push(int x) {
        if (isFull()) {
            System.out.println("栈已满!");
            return false;
        }
        stack[++top] = x;
        return true;
    }

    //出栈
    public int pop() {
        if (isEmpty()) {
            System.out.println("栈为空!");
            return -1;
        }
        return stack[top--];
    }

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

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

    //返回栈顶元素
    public int peek() {
        if (isEmpty()) {
            System.out.println("栈为空!");
            return -1;
        }
        return stack[top];
    }

    //返回栈中元素个数
    public int size() {
        return top + 1;
    }
}

链表实现栈:

public class LinkedStack {
    private Node top; //栈顶节点
    private int size; //栈大小

    private class Node {
        private int val;
        private Node next;

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

    //入栈
    public void push(int x) {
        Node node = new Node(x);
        node.next = top;
        top = node;
        size++;
    }

    //出栈
    public int pop() {
        if (isEmpty()) {
            System.out.println("栈为空!");
            return -1;
        }
        int val = top.val;
        top = top.next;
        size--;
        return val;
    }

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

    //返回栈顶元素
    public int peek() {
        if (isEmpty()) {
            System.out.println("栈为空!");
            return -1;
        }
        return top.val;
    }

    //返回栈中元素个数
    public int size() {
        return size;
    }
}

队列的实现:

数组实现队列:

public class ArrayQueue {
    private int[] queue; //队列数组
    private int front; //队头指针
    private int rear; //队尾指针
    private int maxSize; //队列大小

    public ArrayQueue(int maxSize) {
        this.maxSize = maxSize;
        queue = new int[maxSize];
        front = rear = 0;
    }

    //入队
    public boolean enqueue(int x) {
        if (isFull()) {
            System.out.println("队列已满!");
            return false;
        }
        queue[rear++] = x;
        return true;
    }

    //出队
    public int dequeue() {
        if (isEmpty()) {
            System.out.println("队列为空!");
            return -1;
        }
        return queue[front++];
    }

    //判断队列是否为空
    public boolean isEmpty() {
        return front == rear;
    }

    //判断队列是否已满
    public boolean isFull() {
        return rear == maxSize;
    }

    //返回队头元素
    public int peek() {
        if (isEmpty()) {
            System.out.println("队列为空!");
            return -1;
        }
        return queue[front];
    }

    //返回队列中元素个数
    public int size() {
        return rear - front;
    }
}

链表实现队列:

public class LinkedQueue {
    private Node front; //队头节点
    private Node rear; //队尾节点
    private int size; //队列大小

    private class Node {
        private int val;
        private Node next;

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

    //入队
    public void enqueue(int x) {
        Node node = new Node(x);
        if (rear == null) {
            front = rear = node;
        } else {
            rear.next = node;
            rear = node;
        }
        size++;
    }

    //出队
    public int dequeue() {
        if (isEmpty()) {
            System.out.println("队列为空!");
            return -1;
        }
        int val = front.val;
        front = front.next;
        if (front == null) {
            rear = null;
        }
        size--;
        return val;
    }

    //判断队列是否为空
    public boolean isEmpty() {
        return front == null;
    }

    //返回队头元素
    public int peek() {
        if (isEmpty()) {
            System.out.println("队列为空!");
            return -1;
        }
        return front.val;
    }

    //返回队列中元素个数
    public int size() {
        return size;
    }
}

以上就是实现栈和队列的方法,可以根据需要选择适合自己的方法。通过这些实现,可以方便地对栈和队列进行各种操作。