您的位置:首页 > 编程语言 > Java开发

Java实现简单的顺序队列

2015-12-22 20:03 671 查看

队列(Queue)是只允许在一端进行插入,而在另一端进行删除的运算受限的线性表。

队列的存储结构及实现

队列的顺序存储结构

(1) 顺序队列的定义:

队列的顺序存储结构称为顺序队列,顺序队列实际上是运算受限的顺序表。

(2)顺序队列的表示:

和顺序表一样,顺序队列利用内存中一段连续的存储空间来存放当前队列中的元素。

由于队列的队头和队尾的位置是变化的,设置两个指针front和rear分别指示队头元素和队尾元素,它们的初值在队列初始化时均应置为0。

放上网上找的一张图更为清晰,这里队尾指针指向的an还没有进队,因为在入队列时尾指针向的是队列的下一个结点,即这个结点还不是队列的元素




我还是用的数组去实现了顺序队列的数据结构
<pre name="code" class="java">package com.gaorui.Stack;

public class ArrayQueue {

private int DEFAULT_SIZE = 10;// 默认大小
private int ArraySize;//队列元素大小
private Object[] elementData;// 定义一个数组用于保存顺序队列的元素
private int front;// 队头
private int rear;// 队尾

// 1.0 构造方法初始化空队列
public ArrayQueue() {
ArraySize = DEFAULT_SIZE;
elementData = new Object[ArraySize];
}

/**1.2构造方法初始化空队列
* 以指定长度的数组来创建顺序队列
*
* @param element
*            指定顺序队列中第一个元素
* @param initSize
*            指定顺序队列底层数组的长度
*/
public ArrayQueue(Object data, int ArraySize) {
this.ArraySize = ArraySize;
elementData = new Object[ArraySize];
elementData[0] = data;
rear++;
}

// 入队
public void offer(Object data) {

elementData[rear++] = data;//当新元素入队,赋值给当前队尾指针指向的域,然后队尾指针+1,队尾指针指向下一个即将入队的新元素。
}

// 出队,并删除队头元素
public Object poll() {

if (isEmpty()) {

return "null";
}

Object data = elementData[front++];//Object类型对象保存队头元素,队头指针++后移一位
elementData[front-1] = null;//因为队头指针后++ 已经向后移了一位,所以需要-1向前移动一位将值清空
return data;
}

//返回队列顶元素,但不是出队
public Object peek(){
if (isEmpty()) {

return "null";
}
Object data = elementData[front];
return data;
}

//对头指针和队尾指针重合,则证明队列此时为null
public boolean isEmpty() {
return rear == front;
}

//获取队列大小
public int getArrayQueueSize(){

return rear-front;
}

/**
* Test
* @param
* @author JavaGR_ais
*/
public static void main(String[] args) {
ArrayQueue aq = new ArrayQueue();
aq.offer(1);
aq.offer(2);
aq.offer(3);
System.out.println(aq.getArrayQueueSize()+"栈顶元素"+aq.peek());
aq.poll();
System.out.println(aq.poll()+"出队");
aq.offer(5);
System.out.println(aq.getArrayQueueSize()+"栈顶元素"+aq.peek());
System.out.println(aq.poll());

}
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: