本文介绍:
本文介绍了队列的原理、入队出队和一些基本操作,是用数组来实现的,如果有了 栈 的基础应该会很好理解队列的使用。
队列的介绍:
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出(FIFO—first in first out)线性表。
队列的原理图:
通过简介,我们知道了队列和栈的原理其实差不多,栈是先进后出,而队列是先进先出,入队操作是元素从队尾进入,出队操作时元素从对头删除。
队列的代码:
public class MyQueue {
int[] elements;
//初始化队列
public MyQueue() {
elements = new int[0];
}
//入队
public void add(int data) {
//定义一个比原数组大一个的新数组newArr
int[] newArr = new int[elements.length + 1];
//将原数组中的存在的值赋值给新的数组
for(int i = 0; i < elements.length; i++) {
newArr[i] = elements[i];
}
//然后将要入队的新元素data加入新的数组newArr中
newArr[elements.length] = data;
//将新数组地址的引用设置为原数组的变量名,就完成了新元素的入队
elements = newArr;
}
//出队
public int poll() {
//判断队列是否为空
if(isEmpty()) {
throw new RuntimeException("queue is empty");
}
//把数组中的第0个元素取出来--既队头出队
int data = elements[0];
//定义一个比原数组小一个的新数组newArr
int[] newArr = new int[elements.length - 1];
//将原数组除第一个元素之外的元素全部赋值给新的数组
for(int i = 0; i < newArr.length; i++) {
newArr[i] = elements[i + 1];
}
//将新数组地址的引用设置为原数组的变量名
elements = newArr;
//返回出队的数据就完成了队头元素的出队
return data;
}
//判断队列是否为空
public boolean isEmpty() {
return elements.length == 0;
}
public int size() {
return elements.length;
}
//打印队列
public void show() {
System.out.println(Arrays.toString(elements));
}
public static void main(String[] args) {
MyQueue queue = new MyQueue();
queue.add(1);
queue.add(2);
queue.add(3);
queue.add(4);
System.out.print("入队后:");
queue.show();
System.out.println(queue.poll());
System.out.println(queue.poll());
System.out.print("出队两个元素后:");
queue.show();
System.out.print("队列是否为空:");
System.out.println(queue.isEmpty());
}
}
运行结果:
入队后:[1, 2, 3, 4]
1
2
出队两个元素后:[3, 4]
队列是否为空:false
生命不息,编程不止!加油!