队列的基本概念
队列(简称队)是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,差别就是线性表允许在任意位置插入和删除,而队列只允许在一端进行插入操作而在另一端进行删除操作。
队列中允许进行插入操作的一端称为队尾,允许进行删除的一端称为队头。
操作集合
(1)入队列append(obj):把数据元素插入队尾;
(2)出队列delete():把队头数据元素删除并由元素返回;
(3)取队头数据元素getFront():取队头数据元素并由函数返回;
(4)判断队列是否为空isEmpty():为空返回true,不为空返回false。
顺序队列的“假溢出”问题
顺序循环队列
循环队列的基本操作
① 方法一:
② 方法二--利用"模运算"
循环队列边界条件处理
① 另设一布尔变量以区别队列的空和满;
② 少用一个元素的空间。约定入队前,测试尾指针在循环意义下加1后是否等于头指针,若相等则认为队满(注意:rear所指的单元始终为空);
③使用一个计数器记录队列中元素的总数(即队列长度)。
源代码
队列接口Queue.java
package 队列;
public interface Queue {
//入队列
public void append(Object obj)throws Exception;
//出队列
public Object delete()throws Exception;
//取对头数据元素
public Object getFront()throws Exception;
//是否为空
public boolean isEmpty();
}
顺序循环队列类SeqQueue.java
package 队列;
public class SeqQueue implements Queue {
static final int defaultSize=10;
int front;//对头
int rear;//对尾
int count;//元素个数统计器
int maxSize;//最大数据元素个数
Object[]data;//保存队列元素的数组
public SeqQueue(){//无参数构建函数
initiate(defaultSize);
}
public SeqQueue(int sz){//带参构建函数
initiate(sz);
}
public void initiate(int sz){//初始化
maxSize=sz;
front=rear=0;
count=0;
data=new Object[sz];
}
@Override
public void append(Object obj) throws Exception {
// TODO 自动生成的方法存根
if(count>0&&front==rear){
throw new Exception("队列已满!");
}
data[rear]=obj;
rear=(rear+1)%maxSize;
count++;
}
@Override
public Object delete() throws Exception {
// TODO 自动生成的方法存根
if(count==0){
throw new Exception("队列已空!");
}
Object temp=data[front];
front=(front+1)%maxSize;
count--;
return temp;
}
@Override
public Object getFront() throws Exception {
// TODO 自动生成的方法存根
if(count==0){
throw new Exception("队列已空!");
}
return data[front];
}
@Override
public boolean isEmpty() {
// TODO 自动生成的方法存根
return count==0;
}
}
测试类 SeqQueueTest.java
package 队列;
public class SeqQueueTest {
public static void main(String[] args)throws Exception {
SeqQueue queue=new SeqQueue();
queue.append("a");
queue.append("b");
queue.append("c");
queue.append("d");
queue.append("e");
queue.delete();
queue.append("f");
queue.delete();
while(!queue.isEmpty()){
System.out.println(queue.delete());
}
}
}
参考来源:http://blog.sina.com.cn/s/blog_5b9734c501015wjp.html