Java对队列的基本操作
数据结构之基本数据结构---队列:先入先出
百度百科:
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,
队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
1.自定义队列实现:
代码展示:
package queue; import java.lang.reflect.Array; /** * @Author YangHe * @Date 2020/4/14 16:45 * 手动实现:对列的基本操作 * 先进先出:FIFO */ public class QueueTest<T> { private int queueSize; //队列大小 private int base; //基地址 private int front; //队列头 private int rear; //队列尾 private T[] array; //存储使用数组来实现 /** * 初始化队列 * @param type 数组类型 * @param queueSize 数组大小 */ public QueueTest(Class<T> type,int queueSize){ this.queueSize=queueSize; this.front=this.rear=0; this.base=0; array= (T[])Array.newInstance(type,queueSize); } //队列是否为空 public boolean isEmpty(){ return front==rear; } //队列是否已满 public boolean isFull(){ return (rear+2)%queueSize==front; //为区分为空或者满 设置容量-1 为满 } //入队列 public void offer(T n){ if(!isFull()){ if(rear==(queueSize-1)){ array[rear]=n; rear=base; //重新指向底部 }else{ array[rear++]=n; } }else{ System.out.println("队列已满!"); } } //出队列不删除 public T peek(){ if(!isEmpty()){ return array[front]; }else{ return null; } } //出队列删除元素 public T poll(){ if(!isEmpty()){ if(front==(queueSize-1)){ T t= array[front]; front=base; return t; }else{ return array[front++]; } }else{ return null; } } //获取队列长度 public int getQueueLength(){ return Math.abs(rear-front); } public static void main(String[] args) { QueueTest<Integer> queueTest=new QueueTest<>(Integer.class,5); for(int i=0;i<10;i++){ System.out.println(i+"+++++"); queueTest.offer(i); System.out.println("队列尾:"+queueTest.rear); System.out.println("队列头:"+queueTest.front); System.out.println("队列长度:"+queueTest.getQueueLength()); queueTest.poll(); System.out.println("队列尾:"+queueTest.rear); System.out.println("队列头:"+queueTest.front); System.out.println("队列长度:"+queueTest.getQueueLength()); } } }
结果输出:
2.通过collection接口下的Queue实现单端队列 该示例代码只是展示部分功能,其他功能自行探索:
示例代码:
package queue; import java.util.PriorityQueue; /** * @Author YangHe * @Date 2020/4/17 0:05 * 通过collection接口下的Queue实现单端队列 * 该示例代码只是展示部分功能,其他功能自行探索 */ public class PriorityQueueTest { public static void main(String[] args) { PriorityQueue pq=new PriorityQueue(); pq.add("Java基础"); //添加队列元素 pq.add("python基础"); pq.add("MySQL基础"); pq.add("Linux基础"); System.out.println("输出队列长度:"+pq.size()); System.out.println("输出队列"+pq); System.out.println("取出不删除队列元素:"+pq.peek()+" 输出队列长度:"+pq.size()); System.out.println("取出不删除队列元素:"+pq.peek()+" 输出队列长度:"+pq.size()); System.out.println("取出不删除队列元素:"+pq.peek()+" 输出队列长度:"+pq.size()); System.out.println("输出队列"+pq); System.out.println("取出并且删除队列元素:"+pq.poll()+" 输出队列长度:"+pq.size()); System.out.println("取出并且删除队列元素:"+pq.poll()+" 输出队列长度:"+pq.size()); System.out.println("取出并且删除队列元素:"+pq.poll()+" 输出队列长度:"+pq.size()); System.out.println("输出队列"+pq); } }
示例结果:
3.实际运用实例: