用数组结构实现栈和队列
引言
在计算机科学中,栈(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)原则的数据结构。它可以看作是一种特殊的线性表,只允许在表的一端(队尾)进行插入操作,而在另一端(队头)进行删除操作。队头和队尾可能会根据操作的不同而发生变化。
队列的实现
队列可以用数组来实现,我们可以定义一个固定大小的数组作为队列的存储空间,并使用两个整数变量front
和rear
分别表示队头和队尾的位置。下面是用数组结构实现队列的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