有做国外婚恋交友网站/东莞市网络seo推广服务机构
目录
一、队列介绍
二、数组模拟队列介绍
三、数组模拟队列代码实现
一、队列介绍
- 队列是一个有序列表,可以用数组或是链表来实现。
- 遵循先入先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出。
二、数组模拟队列介绍
- 队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图, 其中 maxSize 是该队列的最大容量。
- 因为队列的输出、输入是分别从前后端来处理,因此需要两个变量 front及 rear分别记录队列前后端的下标,front 会随着数据输出而改变,而 rear则是随着数据输入而改变,如图所示
- 数据存入队列时称为”addQueue”,addQueue 的处理需要有两个步骤:
①将尾指针往后移:rear+1 , 当front == rear 【空】
②若尾指针 rear 小于队列的最大下标 maxSize-1,则将数据存入 rear所指的数组元素中,否则无法存入数据。 rear == maxSize - 1[队列满]
- 数组模拟队列示意图
三、数组模拟队列代码实现
public class ArrayQueue<T> {public static void main(String[] args) {ArrayQueue<Integer> arrayQueue=new ArrayQueue<Integer>(5);for (int i=0;i<5;i++){arrayQueue.addQueue(5-i);}System.out.println("----进队列中数据为:-----");arrayQueue.showQueue();for (int i=0;i<2;i++){arrayQueue.getQueue();}System.out.println("---出队列后的数据为:-----");arrayQueue.showQueue();}// 队列的的最大容量int maxSize;// 队列的前端,初始值为0int front;// 队列的后端的后一个值,初始值为0int rear;// 队列数组T arr[];// 初始化队列@SuppressWarnings("unchecked")public ArrayQueue(int arrMaxSize) {maxSize=arrMaxSize;arr=(T[])new Object [maxSize];front =0;rear =0;}// 判断队列是否为空public boolean isEmpty() {return front==rear;}// 判断队列是否为满public boolean isFull(){return front>=maxSize-1;}// 加入队列public void addQueue(T value) {if(isFull()) {System.out.println("队列已满,无法添加");return;}arr[rear]=value;rear++;}// 取出队列public T getQueue(){if(isEmpty()) {throw new RuntimeException("队列为空,无法取出");}T value = arr[front];front++;return value;}// 显示队列的所有数据public void showQueue() {// 遍历if (isEmpty()) {System.out.println("队列空的,没有数据~~");return;}// 思路:从front开始遍历,遍历多少个元素// 动脑筋for (int i = front; i < rear ; i++) {System.out.printf("arr[%d]=", i);System.out.println(arr[i]);}}public T headQueue() {// 判断if (isEmpty()) {throw new RuntimeException("队列空的,没有数据~~");}return arr[front];}}