目录
队列
顺序循环队列
基本运算实现
概述:只允许在表的一端进行元素插入,在另一端进行元素删除,允许插入的一端称为队尾(rear),允许删除的一端称为队头(frout)。
先进先出(First In First Out),简称FIFO
图示:
概述:两个指针frout和rear分别指示队头和队尾元素在表中的位置,它们的初值在队列初始化时置为0。
图示:
判队列是"空"还是"满":
//循环队列基本运算 public class SeqQueue { //定义队列长度 int size = 100; //定义数组存放数据 Object[] data = new Object[size]; //定义队头指针 int front; //定义队尾指针 int rear; //置空队列 public void InitQueue() { front = rear = 0; } //判队空 public boolean QueueEmpty() { return front == rear; } //判队满 public boolean QueueFull() { return (rear + 1) % size == front; } //入队列 public void EnQueue(Object x) { //判断队列是否已满 if (QueueFull()) { System.out.println("Queue overflow!"); } else { data[rear] = x; rear++; } } //取队头元素 public Object GetFront() { //判断队列是否为空 if (QueueEmpty()) { System.out.println("Queue empty!"); return null; } else { return data[front]; } } //遍历队列 public void QueueShow() { //判断队列是否为空 if (QueueEmpty()) { System.out.println("Queue empty!"); } else { for (int i = front; i < rear; i++) { System.out.println(data[i]); } } } //出队列:删除队头元素并,返回其值 public Object DeQueue() { //判断队列是否为空 if (QueueEmpty()) { System.out.println("Queue empty!"); return null; } else { //获取被删除的元素值 Object x = data[front]; //头指针加1 front++; return x; } } }
public class SeqQueueTest { public static void main(String[] args) { //创建循环队列对象 SeqQueue seqQueue = new SeqQueue(); //置空队列 seqQueue.InitQueue(); //判队空 boolean b = seqQueue.QueueEmpty(); System.out.println("当前队列是否为空:" + b); //判队满 boolean b1 = seqQueue.QueueFull(); System.out.println("当前队列是否已满:" + b1); System.out.println(); //入队列 seqQueue.EnQueue("qq"); seqQueue.EnQueue("ww"); seqQueue.EnQueue("ee"); seqQueue.EnQueue("rr"); //遍历队列 System.out.println("遍历队列(先进先出):"); seqQueue.QueueShow(); //取队头元素 Object o = seqQueue.GetFront(); System.out.println("队头元素为:" + o); System.out.println(); //出队列 seqQueue.DeQueue(); seqQueue.DeQueue(); //判队空 boolean b2 = seqQueue.QueueEmpty(); System.out.println("当前队列是否为空:" + b2); //判队满 boolean b3 = seqQueue.QueueFull(); System.out.println("当前队列是否已满:" + b3); //遍历队列 System.out.println("遍历队列(先进先出):"); seqQueue.QueueShow(); //取队头元素 Object o1 = seqQueue.GetFront(); System.out.println("队头元素为:" + o1); } }
运行结果: