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
和整型变量top
。push
方法用于将元素压入栈中,pop
方法用于从栈中弹出元素,peek
方法用于查看栈顶元素,isEmpty
方法用于判断栈是否为空。
使用数组实现队列
队列的特点是先进先出,我们可以使用两个指针front
和rear
来实现队列。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
,整型变量front
、rear
、size
和count
。enqueue
方法用于将元素加入队列,dequeue
方法用于从队列中移除元素,peek
方法用于查看队列头部的元素,isEmpty
方法用于判断队列是否为空。
Java中的泛型
上述代码只展示了使用整型数组来实现栈和队列,但实际上,我们可以使用Java中的泛型来实现通用的栈和队列。具体实现代码如下:
class Stack<T> {
private T[] array;
private int top;
public Stack(int size) {