# 队列
# 1. 概念
队列是只允许在一端删除,另一端插入的线性表,允许删除的一端叫队头 (front),
允许插入的一端叫队尾 (rear)。
特点:先进先出 (FIFO)
# 2. 顺序队列
1. 语言描述
#define MAXSIZE 1024 // 最大队列长度 | |
typedef struct | |
{ | |
datatype data[MAXSIZE]; /* 队员的存储空间 */ | |
int rear,front; /* 队头队尾指针 */ | |
}SqQueue; |
2. 具体操作
置空队: sq.front= sq.rear=0 | |
入队: sq.data[sq.rear]=x; sq.rear++; | |
出队: x=sq.data[sq.front] sq.front++; | |
读队头、队尾: sq.data[sq.front] sq.data[sq.rear-1] | |
队中元素个数:m=sq.rear-sq.front | |
队满:m==MAXSIZE | |
队空:m==0 |
3. 顺序队列的假溢出
如图 (无图) 所示的状态,不能再继续插入新的队尾元素,否则会因为数组越界导致程序代码被破坏。而此时又不宜如顺序栈那样,进行存储空间再分配来扩大数组的空间,因为队列的实际可用空间并未占满,这种情况叫做顺序队列的假溢出。
解决方案:
① 队首固定,每次出队剩余元素向下移动 —— 浪费时间。
② 循环队列。