一、队列
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
}
}
}