队列的部分总结。
概念
队列同栈一样,也是操作受限的线性表。栈允许从一端输入而从另一端输出。因此具有先进先出的特性。简称FIFO。允许输入的一端称为队尾rear,允许输出的一端称为队首front。
队列也有顺序存储和链式存储两种方式。
#define Maxsize 50
typedef struct Queue{
ElemType data[Maxsize];
int front,rear;
}Queue; //顺序队列
typedef struct Queue{
ElemType data;
struct Queue *next;
struct Queue *front,rear;
}Queue;
入队:rear++;
出队:front++;
队空:front=rear=0;
队满:front=rear;
循环队列
由于普通队列存在着假溢出的现象,因此引入了循环队列的概念。
循环队列入队时rear=(rear+1)%Maxsize;
出队时front=(front+1)%Maxsize;
而为了区别队空和队满,通常采用以下三种方式。
队容量法;数据结构中添加元素size,用于记录队列中元素总数。
tag标志法;数据结构中添加元素tag,当入队时tag置为1,出队时置为0;
牺牲一个存储单元;此时队空为front=rear,队满时有front=(rear##+!)%Maxsize;
应用
银行窗口调度
计算机资源调度