java队列和优先级队列

来源:互联网 发布:淘宝宝贝标题违规规则 编辑:程序博客网 时间:2024/06/05 04:18

一、队列

package queue;import java.util.Scanner;/** * 队列的基本模型:基于数组,front删除,rear插入,front查看 * @author USER * */class Queue{private int maxSize;private int[] queArray;private int front;private int rear;private int p;public Queue(int size) {maxSize = size;queArray = new int[maxSize];front = 0;rear = -1;p = 0;}public void insert(int value) {if (rear == maxSize -1) {rear = -1;}queArray[++rear] = value;p++;}public int delete() {if (front == maxSize) {front = 0;}p--;return queArray[front++];}public int peek() {return queArray[front];}public boolean isEmpty() {return p == 0;}public boolean isFull() {return p == maxSize;}public int size() {return p;}}public class QueueApp {public static void main(String[] args) {System.out.print("输入5个整数:");Scanner in = new Scanner(System.in);int[] a = new int[5];for (int i = 0; i < a.length; i++) {a[i] = in.nextInt();}Queue queue = new Queue(a.length);for (int i = 0; i < a.length; i++) {queue.insert(a[i]);}queue.delete();queue.delete();while (!queue.isEmpty()) {System.out.print(queue.delete()+" ");}}}

二、优先级队列

package queue;/** * 优先级队列:队头删除,队尾插入,队头查看 * 基于数组循序排序,[0,maxSize-1]下标小的在队尾,下标大的在队头,元素个数p在[1,maxSize] * @author USER * */class PriorityQueue{private int maxSize;private int[] queArray;private int p;//队列的元素个数public PriorityQueue(int size) {maxSize = size;queArray = new int[maxSize];p = 0;}//插入public void insert(int value) {int i;if (p == 0) {queArray[p++] = value;}else {for (i = p-1; i >=0; i--) {if (value > queArray[i]) {queArray[i+1] = queArray[i];//插入的较大,则上移一个}else {break;}}queArray[i+1] = value;//插入的是较小值p++;}}//删除public int delete() {return queArray[--p];}public int peek() {return queArray[p-1];}public boolean isEmpty() {return p == 0;}public boolean isFull() {return p == maxSize;}}public class PriorityQueueApp {public static void main(String[] args) {PriorityQueue priorityQueue = new PriorityQueue(5);priorityQueue.insert(40);priorityQueue.insert(20);priorityQueue.insert(50);priorityQueue.insert(10);priorityQueue.insert(30);while (!priorityQueue.isEmpty()) {int output = priorityQueue.delete();System.out.print(output+" ");//10 20 30 40 50}}}



0 0
原创粉丝点击