为充分利用向量空间,克服"假溢出"现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环队列(Circular Queue)。这种循环队列可以以单链表的方式来在实际编程应用中来实现。
队列的常用操作:入队,出队,判空,统计个数,访问队列头尾;
由于队列和栈都是线性表,所以队列也同样可以用数组模拟来手动实现。但是由于队列的出队与入队在不同的两端,所以我们要引入一个循环队列的概念。
如果用数组模拟队列,入队的时候,添加元素;出队的时候,一种处理是,队首位置不变,后面的元素往前面移动,覆盖掉队首,这种方法需要移动所有元素,时间耗费的多;第二种是队首的位置往第二位移动,让第二位的位置成为新的队首位置这种方法只改变队首的位置,但是以前抛弃的队首的位置不会被用到,浪费空间,所以--用到了循环队列;
class queue {
final int maxsize = 10000;
int q[] = new int[maxsize];//队列大小,预估
int front, rear, count;
queue() {
front = 0;
rear = 0;
count = 0;
}
void push(int x) {
count++;
if (count == maxsize) {
// 溢出
}
q[rear] = x;
rear = (rear + 1) % maxsize;
}
int pop() {
count--;
front = (front + 1) % maxsize;
return q[front];
}
int front_val() {
return q[front];
}
boolean empty() {
if (count == 0) {
return true;
}
return false;
}
};