结构体
#define ElemType int
#define MAXSIZE 8
typedef struct Queue {
ElemType *base;//这个指针指向初始化的动态分配存储空间
int front;//用于记录队头下标
int rear;//用于记录队尾下标,表示能放的下标
}Queue;
入队
void EnQueue(Queue *Q, ElemType x) {
//队列满了,rear下标指向MAXSIAZE
if (Q->rear >= MAXSIZE) return;
//在队列不满的情况下放入rear的下标
Q->base[Q->rear++] = x;
}
打印输出
void ShowQueue(Queue *Q) {
for (int i = Q->front; i < Q->rear; i++) {
printf("%d ", Q->base[i]);
}
printf("\n");
}
出队
void DeQueue(Queue *Q) {
//头下标和尾下标指向相同的空间,队列就为空
if (Q->front == Q->rear)return;
//不为空时,让下标指向下一个地址单元,前面的就出队了
Q->front++;
}
获取队头元 素
void GetHdad(Queue *Q, ElemType *v) {
if (Q->front == Q->rear)return;
*v = Q->base[Q->front];
}
求长度
int Length(Queue *Q) {
return Q->rear - Q->front;
}
清空队
void ClearQueue(Queue *Q) {
Q->front = Q->rear = 0;
}
销毁队
void DestroyQueue(Queue *Q) {
free(Q->base);
Q->base == NULL;
}
问题
队列的最大容量是8,出了一个,本来可以再入一个元素,却无法进入。
空间没有达到百分百的利用率
所以循环队列应运而生