Java实现简单的顺序队列

队列(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());
	
	}
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章