用数组结构实现栈和队列

引言

在计算机科学中,栈(Stack)和队列(Queue)是两个常用的数据结构。它们在许多实际应用中都有广泛的应用,比如操作系统的进程调度、图形学中的图像处理等。本文将介绍如何用数组结构实现栈和队列,并给出相应的Java代码示例。

什么是栈

栈是一种遵循后进先出(LIFO,Last In First Out)原则的数据结构。它可以看作是一种特殊的线性表,只能在表的一端进行插入和删除操作,这一端被称为栈顶。栈底是栈的另一端,它是固定不变的。栈的插入操作称为入栈(push),删除操作称为出栈(pop)。

栈的实现

栈可以使用数组来实现,我们可以定义一个固定大小的数组作为栈的存储空间,同时使用一个整数变量来记录栈顶的位置。下面是用数组结构实现栈的Java代码示例:

public class ArrayStack {
    private int maxSize; // 栈的最大容量
    private int[] stack; // 存储数据的数组
    private int top; // 栈顶指针

    public ArrayStack(int maxSize) {
        this.maxSize = maxSize;
        stack = new int[maxSize];
        top = -1; // 初始化栈顶指针为-1
    }

    public void push(int data) {
        if (top == maxSize - 1) {
            System.out.println("栈已满,无法入栈");
            return;
        }
        stack[++top] = data;
    }

    public int pop() {
        if (top == -1) {
            System.out.println("栈为空,无法出栈");
            return -1;
        }
        return stack[top--];
    }

    public int peek() {
        if (top == -1) {
            System.out.println("栈为空");
            return -1;
        }
        return stack[top];
    }

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

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

上述代码中,ArrayStack类表示用数组实现的栈。其中,maxSize表示栈的最大容量,stack是用于存储数据的数组,top是栈顶指针。

什么是队列

队列是一种遵循先进先出(FIFO,First In First Out)原则的数据结构。它可以看作是一种特殊的线性表,只允许在表的一端(队尾)进行插入操作,而在另一端(队头)进行删除操作。队头和队尾可能会根据操作的不同而发生变化。

队列的实现

队列可以用数组来实现,我们可以定义一个固定大小的数组作为队列的存储空间,并使用两个整数变量frontrear分别表示队头和队尾的位置。下面是用数组结构实现队列的Java代码示例:

public class ArrayQueue {
    private int maxSize; // 队列的最大容量
    private int[] queue; // 存储数据的数组
    private int front; // 队头指针
    private int rear; // 队尾指针

    public ArrayQueue(int maxSize) {
        this.maxSize = maxSize;
        queue = new int[maxSize];
        front = -1; // 初始化队头指针为-1
        rear = -1; // 初始化队尾指针为-1
    }

    public void enqueue(int data) {
        if (rear == maxSize - 1) {
            System.out.println("队列已满,无法入队");
            return;
        }
        queue[++rear] = data;
    }

    public int dequeue() {
        if (front == rear) {
            System.out.println("队列为空,无法出队");
            return -1;
        }
        return queue[++front];
    }

    public int peek() {
        if (front == rear) {
            System.out.println("队列为空");
            return -1;
        }
        return queue[front + 1];
    }

    public