#include <stdio.h>
typedef struct
{
int qHeader;
int qRear;
int qSize;
int* queue;
} queueType;
void enQueue(queueType *q, int data){
//添加判断语句,如果rear超过Size,则直接将其从a[0]重新开始存储,如果rear+1和front重合,则表示数组已满
if (((q->qRear) + 1) % (q->qSize + 1) == q->qHeader) {
printf("\nfull\n");
return;
}
q->queue[q->qRear % q->qSize] = data;
//printf("a%d = %d ", *rear, a[(*rear)%Size]);
q->qRear++;
}
void deQueue(queueType *q, int data){
//如果Header==rear,表示队列为空
if(q->qHeader == (q->qRear) % q->qSize) {
printf("empty");
return;
}
//printf("out: %d\n",a[*Header]);
//front不再直接 +1,而是+1后同Size进行比较,如果=Size,则直接跳转到 a[0]
q->qHeader = (q->qHeader + 1) % q->qSize;
}
int queue[10] = {0};
queueType queue1;
int main() {
//设置队头指针和队尾指针,当队列中没有元素时,队头和队尾指向同一块地址
queue1.qHeader = 0;
queue1.qRear = 0;
queue1.queue = queue;
queue1.qSize = sizeof(queue) / sizeof(int);
for (int i = 0; i < 10; i++)
{
enQueue(&queue1, i);
}
for(int i = 0; i < 10; i++)
{
printf("%d ", queue[i]);
}
enQueue(&queue1, 10);
return 0;
}
输出:
0 1 2 3 4 5 6 7 8 9
full