java循环队列出队入队_java实现循环队列基本操作(入列、出列、查找元素、队列判满、队空)...

文章目录一.基本概念(1)顺序队列(2)循环队列(3)过程实例二.相关属性、方法

一.基本概念

队列(queue)是一种线性的数据结构,只允许在表的一端进行插入操作而在另一端进行删除的线性表。进行删除操作的一端称为队头,进行插入操作的端称为队尾。

(1)顺序队列

顺序队列,用一片连续的存储空间来存储队列中的数据元素,所以一般用数组来实现顺序队列。一般队头用front来指示,指向刚出队的元素的位置;队尾用rear指示,指向刚进队的元素位置。

(2)循环队列

由于队列在队尾就"进元素”,在队头“出元素”,即先进先出(first in first out)的特性,使得队列会出现rear指向了队列最大长度的位置,再插入一个元素就会导致溢出,但实际上队列却没有满,这种情况成为 “假溢出”。解决假溢出的方法是将顺序队列看成是首尾相接的循环结构,但首尾指示器的关系不变,这种队列叫循环队列,循环队列是改进的顺序队列。

(3)过程实例

下面是一个长度为8的循环队列的进队/出队示意图:

(1)由空队进入两个元素,此时front指向0,rear指向2.

(2)进队4个元素,出队3个元素,此时front指向3,rear指向6.

(3)进队2个元素,出队4个元素,此时front指向7,rear指向0.

java循环队列出队入队_java实现循环队列基本操作(入列、出列、查找元素、队列判满、队空)..._第1张图片

从上图可以看出,经过进出操作,rear和front都指向了数组尾端,依然可以让元素继续入队。

二.相关属性、方法

public class QueueA {

private int maxSize; //队列的容量

private int[] queue;

private int data;//队列的数据类型,在本例中为int型。

private int front;//指向刚出队的元素的位置

private int rear;//指向刚进队的元素位置

//初始化顺序队列操作

public void initQueue()

{

this.maxSize = 10;

this.front = 0;

this.rear = 0;

this.queue = new int[maxSize];

}

//入队列操作

public void enQueue(int x)

{

if(!judgeFull())

{

rear = (rear+1)%maxSize;

queue[rear] = x;

}

}

//出队列操作,返回出队列元素

public int deQueue()

{

if(!judgeEmpty())

{

front = (front+1)%maxSize;

int result = queue[front];

}

return result ;

}

//判队列是否已满

public boolean judgeFull() {

if ((rear+1)%maxSize==front)

returntrue;

else

return false;

}

//判队列是否为空

public boolean judgeEmpty() {

if (rear==front) {

return true;

} else {

return false;

}

}

public static void main(String[] args)

{

QueueA q = new QueueA();

q.initQueue();

for(int i = 0;i<20;i++)

{

q.enQueue(i);

System.out.println("结果是:"+q.deQueue()+"rear下标:"+q.rear);

}

}

}

运行结果如下:

java循环队列出队入队_java实现循环队列基本操作(入列、出列、查找元素、队列判满、队空)..._第2张图片

你可能感兴趣的:(java循环队列出队入队)