【数据结构】——队列 (循环队列和基于Java的运算实现)
作者:互联网
目录
队列
概述:只允许在表的一端进行元素插入,在另一端进行元素删除,允许插入的一端称为队尾(rear),允许删除的一端称为队头(frout)。
先进先出(First In First Out),简称FIFO
图示:
顺序循环队列
概述:两个指针frout和rear分别指示队头和队尾元素在表中的位置,它们的初值在队列初始化时置为0。
图示:
判队列是"空"还是"满":
- 设一个标志位,来区别队列是"空"还是"满"
- 设置一个计数器记录队列中元素个数
- 少用一个元素空间,约定入队前,测试尾指针在循环意义下加1后是否等于头指针,若相等则认为队列满
基本运算实现
//循环队列基本运算
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);
}
}
运行结果:
标签:Java,队列,seqQueue,System,println,数据结构,public,out 来源: https://blog.csdn.net/fhsbvs/article/details/121214496