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()); } }
相关文章推荐
- Java中的线程池——ThreadPoolExecutor的原理
- Java 笔记——序列化
- Spring+Mybatis实现动态SQL查询
- Eclipse使用入门教程
- 使用Maven搭建Spring+SpringMVC+Mybatis+ehcache项目
- 04.(Java基础)-01Static关键字的有哪些作用
- 解决java.sql.ResultSet的getDate获取时间中时分秒为0的问题
- 使用Eclipse编译运行MapReduce程序 Hadoop2.4.1
- 深入Java虚拟机:JVM中的Stack和Heap
- Java工程师成神之路
- 我的java基础学习2
- Java多线程总结(8)concurrent.locks包下的锁机制的使用
- leetcode 140:Word Break II 采用很巧妙的动态规划和DFS联合使用 JAVA源代码实现
- ubuntu下的jdk,eclipse安装
- Java拾遗之Spring Web MVc
- spark createDirectStream保存kafka offset(JAVA实现)
- Java实例变量初始化
- Android Studio导入外部Eclipse项目中用到的so库
- java.lang.ExceptionInInitializerError
- java正则表达式——判断字符串为哪种类型的数字?