Java使用数组实现栈和队列

在Java中,数组是一种常见的数据结构,可以用来存储多个元素。栈和队列是两种常见的数据结构,它们也可以使用数组来实现。本文将介绍如何使用数组实现栈和队列,并给出相应的代码示例。

什么是栈和队列

栈(Stack)是一种后进先出(Last-In-First-Out,LIFO)的数据结构。在栈中,只有栈顶的元素可以被访问和删除,新的元素只能被加入到栈顶。类似于现实生活中的一叠书,我们只能从最上面取出书籍。

队列(Queue)是一种先进先出(First-In-First-Out,FIFO)的数据结构。在队列中,新的元素被加入到队列的末尾,而访问和删除元素则发生在队列的头部。类似于现实生活中的排队,先来的人先被服务。

使用数组实现栈

栈的特点是后进先出,因此我们可以使用数组的末尾作为栈顶。具体实现代码如下:

class Stack {
    private int[] array;
    private int top;

    public Stack(int size) {
        array = new int[size];
        top = -1;
    }

    public void push(int element) {
        if (top == array.length - 1) {
            System.out.println("Stack is full");
            return;
        }
        array[++top] = element;
    }

    public int pop() {
        if (top == -1) {
            System.out.println("Stack is empty");
            return -1;
        }
        return array[top--];
    }

    public int peek() {
        if (top == -1) {
            System.out.println("Stack is empty");
            return -1;
        }
        return array[top];
    }

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

上述代码定义了一个Stack类,其中包含了数组array和整型变量toppush方法用于将元素压入栈中,pop方法用于从栈中弹出元素,peek方法用于查看栈顶元素,isEmpty方法用于判断栈是否为空。

使用数组实现队列

队列的特点是先进先出,我们可以使用两个指针frontrear来实现队列。front指向队列的头部,rear指向队列的尾部。具体实现代码如下:

class Queue {
    private int[] array;
    private int front;
    private int rear;
    private int size;
    private int count;

    public Queue(int size) {
        array = new int[size];
        front = 0;
        rear = -1;
        this.size = size;
        count = 0;
    }

    public void enqueue(int element) {
        if (count == size) {
            System.out.println("Queue is full");
            return;
        }
        rear = (rear + 1) % size;
        array[rear] = element;
        count++;
    }

    public int dequeue() {
        if (count == 0) {
            System.out.println("Queue is empty");
            return -1;
        }
        int element = array[front];
        front = (front + 1) % size;
        count--;
        return element;
    }

    public int peek() {
        if (count == 0) {
            System.out.println("Queue is empty");
            return -1;
        }
        return array[front];
    }

    public boolean isEmpty() {
        return count == 0;
    }
}

上述代码定义了一个Queue类,其中包含了数组array,整型变量frontrearsizecountenqueue方法用于将元素加入队列,dequeue方法用于从队列中移除元素,peek方法用于查看队列头部的元素,isEmpty方法用于判断队列是否为空。

Java中的泛型

上述代码只展示了使用整型数组来实现栈和队列,但实际上,我们可以使用Java中的泛型来实现通用的栈和队列。具体实现代码如下:

class Stack<T> {
    private T[] array;
    private int top;

    public Stack(int size) {