队列的特性:先进先出
循环队列类的定义
public class Queue(){
//定义队列长度
private int length;
//定义存放队列元素的数组
private int data[length];
//定义对头,队尾指针
//front指向队头元素的前一个位置
//rear指向队尾元素位置
private int front, rear;
}
对空的条件
//对头等于对尾时队列为空
front == rear;
对满的条件
//队尾位置和对头位置正好差一
(rear + 1) % length == front;
循环队列的入队操作
public void EnQueue(int x){
if((rear + 1) % length == front){
System.out.println("对满,上溢!");
}
//队尾指针在循环意义下加一
rear = (rear + 1) % length;
data[rear] = x;
}
循环队列的出队操作
public void DeQueue(){
if(rear == front){
System.out.println("对空,下溢!");
}
//对头在循环意义下加一
front = (front + 1) % length;
return data[front];
}
循环队列取队头元素
public void GetHead(){
if(rear == front){
System.out.println("对空,下溢!");
}
return data[(front + 1) % length];
}
链队列
链队列存储结构:通常用单链表表示,其节点结构与单链表的节点结构相同。
链队列类的实现
public void ListQueue(){
//定义对头和队尾结点
Node front, rear;
}
构造函数—链队列的初始化
public void ListQueue(){
NOde node = null;
node = new Node;
node.next = null;
//将对头结点和队尾结点都指向头结点
front = rear = node;
}
链队列的入队操作
public void EnQueue(int x){
Node node = null;
node = new Node;
node.data = x;
node.next = null;
//将结点node插到队尾
rear.next = node;
rear = node;
}
链队列的出队操作
public void DeQueue(){
int x;
Node node = null;
if(rear == front){
System.out.println("队列,下溢!");
}
node = front.next;
x = node.data;
fron.next = node.next;
if(node.next == null){
rear = front;
}
delete node;
return x;
}