-
#include <stdio.h>
-
#include <stdlib.h>
-
#include <stdbool.h>
-
-
#define Q_LEN 6
-
-
typedef struct {
-
int *pBase;
-
int front;
-
int rear;
-
}QUEUE;
-
-
static void init(QUEUE *pQ) {
-
pQ->pBase = (int *)malloc(sizeof(int) * Q_LEN);
-
pQ->front = 0;
-
pQ->rear = 0;
-
}
-
-
static inline bool full_queue(QUEUE *pQ) {
-
if((pQ->rear + 1) % Q_LEN == pQ->front)
-
return true;
-
else
-
return false;
-
}
-
-
static bool en_queue(QUEUE *pQ, int val) {
-
if (full_queue(pQ)) {
-
printf("队列已满, %d 不能被加入队列\n", val);
-
return false;
-
} else {
-
pQ->pBase[pQ->rear] = val;
-
pQ->rear = (pQ->rear + 1) % Q_LEN;
-
return true;
-
}
-
}
-
-
static void traverse_queue(QUEUE *pQ) {
-
int idx = pQ->front;
-
while (idx != pQ->rear) {
-
printf("%d ", pQ->pBase[idx]);
-
idx = (idx + 1) % Q_LEN;
-
}
-
printf("\n");
-
}
-
-
static inline bool emput_queue(QUEUE *pQ) {
-
if (pQ->front == pQ->rear) {
-
return true;
-
} else {
-
return false;
-
}
-
}
-
-
static bool out_queue(QUEUE *pQ, int *pVal) {
- if (emput_queue(pQ)) {
-
return false;
-
} else {
-
*pVal = pQ->pBase[pQ->front];
-
pQ->front = (pQ->front + 1) % Q_LEN;
-
return true;
-
}
-
}
-
-
int main(void) {
-
QUEUE Q;
-
int val;
-
-
init(&Q);
-
en_queue(&Q, 1);
-
en_queue(&Q, 2);
-
en_queue(&Q, 3);
-
en_queue(&Q, 4);
-
en_queue(&Q, 5);
-
en_queue(&Q, 6);
-
en_queue(&Q, 7);
-
en_queue(&Q, 8);
-
-
traverse_queue(&Q);
-
-
if (out_queue(&Q, &val)) {
-
printf("出队成功,队列出队的元素是: %d\n", val);
-
} else {
-
printf("出队失败!\n");
-
}
-
-
traverse_queue(&Q);
-
-
free(Q.pBase);
-
return 0;
- }