普通队列
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。在队列这种数据结构中,最先插入的元素将是最先被删除的元素;反之最后插入的元素将是最后被删除的元素,因此队列又称为“先进先出”(FIFO—first in first out)的线性表。
package com.algorithm;
/**
* 普通队列
* @author lenovo
*队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,
*和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。
*在队列这种数据结构中,最先插入的元素将是最先被删除的元素;反之最后插入的元素将是最后被删除的元素,
*因此队列又称为“先进先出”(FIFO—first in first out)的线性表。
*/
public class MyQueue {
/**
* 底层使用数据
*/
private long[] attr;
/**
* 有效数据的大小
*/
private int elements;
/**
* 队头
*/
private int front;
/**
* 队尾
*/
private int end;
/**
* 默认构造方法
*/
public MyQueue(){
attr =new long[10];
elements =0;
front =0;
end =-1;
}
/**
* 带参数构造方法,初始化队列大小
*/
public MyQueue(int maxsize){
attr =new long[maxsize];
elements =0;
front =0;
end =-1;
}
/**
* 添加数据,插入到队尾
* @param value
*/
public void intsert(long value){
attr[++end]=value;
elements++;
}
/**
* 删除数据,从对头开始
*/
public long remove(){
elements--;
return attr[front++];
}
/**
* 查看数据
*/
public long peek(){
return attr[front];
}
/**
* 判断是否为空
* @return
*/
public boolean isEmpety(){
return elements==0;
}
/**
* 判断是否满了
* @return
*/
public boolean isFull(){
return elements==attr.length;
}
public static void main(String[] args) {
MyQueue mq = new MyQueue(4);
mq.intsert(23);
mq.intsert(45);
mq.intsert(13);
mq.intsert(1);
System.out.println(mq.isFull());
System.out.println(mq.isEmpety());
System.out.println(mq.peek());
System.out.println(mq.peek());
while (!mq.isEmpety()) {
System.out.print(mq.remove()+" ");
}
mq.intsert(23);
}
}
循环队列
为充分利用向量空间,克服"假溢出"现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环队列(Circular Queue)。
package com.algorithm;
/**
* 循环队列
* @author lenovo
*为充分利用向量空间,克服"假溢出"现象的方法是:将向量空间想象为一个首尾相接的圆环,
*并称这种向量为循环向量。存储在其中的队列称为循环队列(Circular Queue)。
*/
public class MyCycleQueue {
/**
* 底层使用数据
*/
private long[] attr;
/**
* 有效数据的大小
*/
private int elements;
/**
* 队头
*/
private int front;
/**
* 队尾
*/
private int end;
/**
* 默认构造方法
*/
public MyCycleQueue(){
attr =new long[10];
elements =0;
front =0;
end =-1;
}
/**
* 带参数构造方法,初始化队列大小
*/
public MyCycleQueue(int maxsize){
attr =new long[maxsize];
elements =0;
front =0;
end =-1;
}
/**
* 添加数据,插入到队尾
* @param value
*/
public void intsert(long value){
if (end==attr.length-1) {
end=-1;
}
attr[++end]=value;
elements++;
}
/**
* 删除数据,从对头开始
*/
public long remove(){
long value = attr[front++];
if(front==attr.length){
front=0;
}
elements--;
return value;
}
/**
* 查看数据
*/
public long peek(){
return attr[front];
}
/**
* 判断是否为空
* @return
*/
public boolean isEmpety(){
return elements==0;
}
/**
* 判断是否满了
* @return
*/
public boolean isFull(){
return elements==attr.length;
}
public static void main(String[] args) {
MyCycleQueue mq = new MyCycleQueue(4);
mq.intsert(23);
mq.intsert(45);
mq.intsert(13);
mq.intsert(1);
System.out.println(mq.isFull());
System.out.println(mq.isEmpety());
System.out.println(mq.peek());
System.out.println(mq.peek());
while (!mq.isEmpety()) {
System.out.print(mq.remove()+" ");
}
System.out.println();
mq.intsert(23);
mq.intsert(13);
mq.intsert(122);
System.out.println(mq.peek());
while (!mq.isEmpety()) {
System.out.print(mq.remove()+" ");
}
}
}