使用数组实现队列
2015-01-07 11:30
435 查看
package cn.my.queue;
/**
* 自定义队列: 队列先进先出(FIFO) 队列中的数据项不总是从数组的0下标开始,移除数据项后,
* 队头指针会指向一个较高的下标位置
* 循环队列(“缓冲环”)
* @author wangbowen @date 2015年1月7日
* @version 1.0
*/
public class QueueX {
/**
* 队列大小
*/
private int maxSize;
/**
* 队列数组
*/
private Long [] queueArray;
/**
* 队头数据项
*/
private int fornt;
/**
* 队尾数据项
*/
private int rear;
/**
* 数据项
*/
private int nItems;
/**
* 带参数的构造方法
* @param n
*/
public QueueX(int n) {
this.maxSize = n;
this.queueArray = new Long[maxSize];
this.fornt = 0;
this.rear = -1;
this.nItems = 0;
}
/**
* 插入数据
* @param j
* void
*/
public void insert(long j){
if(!isFull()){
if(rear ==maxSize-1)
rear = -1;
queueArray[++rear] = j;
nItems++;
}else{
System.out.println("队列已满.....");
}
}
/**
* 删除数据项
* @return
* Long
*/
public Long remove(){
if(!isEmpty()){
Long temp = queueArray[fornt++];
if(fornt==maxSize)
fornt = 0;
nItems --;
return temp;
}else{
System.out.println("队列为空不能删除。。。。");
}
return null;
}
/**
* 获取队头数据
* @return
* Long
*/
public Long peekFornt(){
return queueArray[fornt];
}
/**
* 队列是否为空
* @return
* boolean
*/
public boolean isEmpty(){
return (nItems==0);
}
/**
* 队列是否已满
* @return
* boolean
*/
public boolean isFull(){
return (nItems==maxSize);
}
/**
* 队列大小
* @return
* int
*/
public int queueSize(){
return nItems;
}
/**
* 获取队列大小
* @return maxSize 队列大小
*/
public int getMaxSize() {
return maxSize;
}
/**
* 设置队列大小
* @param maxSize 队列大小
*/
public void setMaxSize(int maxSize) {
this.maxSize = maxSize;
}
/**
* 获取队列数组
* @return queueArray 队列数组
*/
public Long[] getQueueArray() {
return queueArray;
}
/**
* 设置队列数组
* @param queueArray 队列数组
*/
public void setQueueArray(Long[] queueArray) {
this.queueArray = queueArray;
}
/**
* 获取队头数据项
* @return fornt 队头数据项
*/
public int getFornt() {
return fornt;
}
/**
* 设置队头数据项
* @param fornt 队头数据项
*/
public void setFornt(int fornt) {
this.fornt = fornt;
}
/**
* 获取队尾数据项
* @return rear 队尾数据项
*/
public int getRear() {
return rear;
}
/**
* 设置队尾数据项
* @param rear 队尾数据项
*/
public void setRear(int rear) {
this.rear = rear;
}
/**
* 获取数据项
* @return nItems 数据项
*/
public int getnItems() {
return nItems;
}
/**
* 设置数据项
* @param nItems 数据项
*/
public void setnItems(int nItems) {
this.nItems = nItems;
}
}
/**
* 自定义队列: 队列先进先出(FIFO) 队列中的数据项不总是从数组的0下标开始,移除数据项后,
* 队头指针会指向一个较高的下标位置
* 循环队列(“缓冲环”)
* @author wangbowen @date 2015年1月7日
* @version 1.0
*/
public class QueueX {
/**
* 队列大小
*/
private int maxSize;
/**
* 队列数组
*/
private Long [] queueArray;
/**
* 队头数据项
*/
private int fornt;
/**
* 队尾数据项
*/
private int rear;
/**
* 数据项
*/
private int nItems;
/**
* 带参数的构造方法
* @param n
*/
public QueueX(int n) {
this.maxSize = n;
this.queueArray = new Long[maxSize];
this.fornt = 0;
this.rear = -1;
this.nItems = 0;
}
/**
* 插入数据
* @param j
* void
*/
public void insert(long j){
if(!isFull()){
if(rear ==maxSize-1)
rear = -1;
queueArray[++rear] = j;
nItems++;
}else{
System.out.println("队列已满.....");
}
}
/**
* 删除数据项
* @return
* Long
*/
public Long remove(){
if(!isEmpty()){
Long temp = queueArray[fornt++];
if(fornt==maxSize)
fornt = 0;
nItems --;
return temp;
}else{
System.out.println("队列为空不能删除。。。。");
}
return null;
}
/**
* 获取队头数据
* @return
* Long
*/
public Long peekFornt(){
return queueArray[fornt];
}
/**
* 队列是否为空
* @return
* boolean
*/
public boolean isEmpty(){
return (nItems==0);
}
/**
* 队列是否已满
* @return
* boolean
*/
public boolean isFull(){
return (nItems==maxSize);
}
/**
* 队列大小
* @return
* int
*/
public int queueSize(){
return nItems;
}
/**
* 获取队列大小
* @return maxSize 队列大小
*/
public int getMaxSize() {
return maxSize;
}
/**
* 设置队列大小
* @param maxSize 队列大小
*/
public void setMaxSize(int maxSize) {
this.maxSize = maxSize;
}
/**
* 获取队列数组
* @return queueArray 队列数组
*/
public Long[] getQueueArray() {
return queueArray;
}
/**
* 设置队列数组
* @param queueArray 队列数组
*/
public void setQueueArray(Long[] queueArray) {
this.queueArray = queueArray;
}
/**
* 获取队头数据项
* @return fornt 队头数据项
*/
public int getFornt() {
return fornt;
}
/**
* 设置队头数据项
* @param fornt 队头数据项
*/
public void setFornt(int fornt) {
this.fornt = fornt;
}
/**
* 获取队尾数据项
* @return rear 队尾数据项
*/
public int getRear() {
return rear;
}
/**
* 设置队尾数据项
* @param rear 队尾数据项
*/
public void setRear(int rear) {
this.rear = rear;
}
/**
* 获取数据项
* @return nItems 数据项
*/
public int getnItems() {
return nItems;
}
/**
* 设置数据项
* @param nItems 数据项
*/
public void setnItems(int nItems) {
this.nItems = nItems;
}
}
相关文章推荐
- 使用数组实现双端队列
- java使用数组和链表实现队列示例
- 使用JavaScript的数组实现数据结构中的队列与堆栈
- 使用数组实现队列
- 使用数组实现堆栈和队列
- 使用数组实现一个随机队列
- java使用数组实现优先级队列
- java使用数组实现顺序队列
- PHP使用数组实现队列(实际就是先进先出如何实现)
- 使用不完全填满数组的实现的循环FIFO(队列)
- 使用数组实现队列----《数据结构与算法分析---C语言描述》
- 使用JavaScript的数组实现数据结构中的队列与堆栈
- 数据结构循环队列,数组实现,循环队列中如果不使用数据项计数字段items,而是通过front和rear计算队列是否为空或满或队列个数,那会很复杂
- java使用数组实现链式队列
- Lua中使用table实现的其它5种数据结构(数组、链表、队列、集合和包、StringBuild)
- 使用循环数组高效的实现队列类
- Python 使用循环数组实现队列 (基于class, 包含迭代器)
- 使用数组实现队列
- 使用JavaScript的数组实现数据结构中的队列与堆栈
- java使用数组实现循环队列