#include<stdio.h>
#include<stdbool.h>
#include<stdlib.h>
#define N 10
typedef struct {
int elements[N];
int front;
int rear;
int size;
}Queue;
Queue* creat_queue();
void destory_queue(Queue* q);
void push_queue(Queue* q, int val);
int pop_queue(Queue* q);
int peek_queue(Queue* q);
bool is_empty(Queue* q);
bool is_full(Queue* q);
int main() {
Queue* q = creat_queue();
push_queue(q, 1);
push_queue(q, 2);
push_queue(q, 3);
push_queue(q, 4);
while (!is_empty(q)) {
int ret = peek_queue(q);
printf("%d ", ret);
pop_queue(q);
}
printf("The queue is %s\n", is_empty(q) ? "empty" : "not empty");
return 0;
}
Queue* creat_queue() {
return calloc(1, sizeof(Queue));
}
void push_queue(Queue* q, int val) {
//判满
if (is_full(q)) {
printf("Queue is full\n");
exit(1);
}
q->elements[q->rear] = val;
q->rear = (q->rear + 1) % N;
q->size++;
}
int pop_queue(Queue* q) {
//判空
if (is_empty(q)) {
printf("Queue is empty\n");
exit(1);
}
int retVal = q->elements[q->front];
q->front = (q->front + 1) % N;
q->size--;
return retVal;
}
int peek_queue(Queue* q) {
//判空
if (is_empty(q)) {
printf("Queue is empty\n");
exit(1);
}
return q->elements[q->front];
}
bool is_empty(Queue* q) {
return q->size == 0;
}
bool is_full(Queue* q) {
return q->size == N;
}