数据结构与算法(Java版)_03_队列
队列
队列是一个有序列表,可以用数组或者链表来实现。
队列遵循先进先出的原则,即先存入队列的数据先被取出。
代码实现:
package dataStructureAtShangGuiGu; import java.util.Scanner; public class QueueDemo { public static void main(String[] args) { QueueTest queue = new QueueTest(3); Scanner scanner = new Scanner(System.in); boolean loop = true; while(loop) { sopInfo(); char ch = scanner.next().charAt(0); switch(ch){ case 'a': System.out.println("请输入:"); queue.add(scanner.nextInt()); break; case 'g': queue.get(); break; case 'h': queue.showHead(); break; case 's': queue.show(); break; case 'e': loop = false; scanner.close(); break; } } } private static void sopInfo() { System.out.println("--------------------------"); System.out.println("a(add)添加元素"); System.out.println("g(get)获取元素"); System.out.println("h(head)查看第一个元素"); System.out.println("s(show)查看所有元素"); System.out.println("e(exit)退出"); System.out.println("--------------------------"); } } class QueueTest{ private int maxSize; //队列最大容量 private int front; //队列头部指针 private int rear; //队列尾部指针 private int[] arr; //作为队列存储容器 QueueTest(int maxSize){ //初始化队列 this.maxSize = maxSize; this.front = -1; this.rear = -1; this.arr = new int[maxSize]; } private boolean isEmpty() { //判断队列是否需为空 if(this.front==this.rear) return true; return false; } private boolean isFull() { //判断队列是否满了 if(this.rear==(this.maxSize-1)) return true; return false; } public void add(int num) { //向队列添加数据 if(this.isFull()) { System.out.println("队列已满,无法追加数据!"); return; } this.rear++; this.arr[this.rear] = num; } public void get() { //从队列获取一个数据 if(this.isEmpty()) { System.out.println("队列为空!没有数据可以获取!"); return; } this.front++; System.out.println("取出的元素是:"+arr[this.front]); } public void show() { //查看模拟队列容器情况 for(int i=0;i<arr.length;i++) { System.out.printf("arr[%d]=%d\n",i,this.arr[i]); } } public void showHead() { //查看队列第一个元素 if(this.isEmpty()) { System.out.println("队列为空!无法查看队列第一个元素!"); return; } System.out.println("第一个元素是:"+this.arr[this.front+1]); } }
运行测试:
先添加元素,然后查看第一个元素
依次取一个元素,然后查看头元素
将队列元素取尽:
取尽元素后再添加:
数据已经取完了,但是发现添加不了数据,因为指针rear已经到达队列后面了!