Queue.h
#pragma once
#include <stdbool.h>
#define N 4
typedef struct {
int elements[N];
int front;
int rear;
int size;
} Queue;
Queue* create_queue();
void enqueue(Queue* q, int val);
int dequeue(Queue* q);
int peek(Queue* q);
int size(Queue* q);
bool isEmpty(Queue* q);
bool isFull(Queue* q);
Queue.c
#include "Queue.h"
#include <stdlib.h>
#include <stdio.h>
Queue* create_queue() {
return calloc(1, sizeof(Queue));
}
bool isEmpty(Queue* q) {
return q->size == 0;
}
bool isFull(Queue* q) {
return q->size == N;
}
void enqueue(Queue* q, int val) {
// 判满
if (isFull(q)) {
return;
}
// 添加到队尾
q->elements[q->rear] = val;
q->rear = (q->rear + 1) % N;
q->size++;
}
int dequeue(Queue* q) {
// 判空
if (isEmpty(q)) {
printf("Error: empty queue\n");
exit(1);
}
int result = q->elements[q->front];
q->front = (q->front + 1) % N;
q->size--;
return result;
}
int peek(Queue* q) {
if (isEmpty(q)) {
printf("Error: empty queue\n");
exit(1);
}
return q->elements[q->front];
}
int size(Queue* q) {
return q->size;
}
main.c
#include "Queue.h"
#include "Queue.h"
#include <stdio.h>
int main(void) {
Queue* q = create_queue(); // 创建一个空队列
enqueue(q, 1);
enqueue(q, 2);
enqueue(q, 3);
enqueue(q, 4);
while (!isEmpty(q)) {
int val = peek(q);
printf("%d ", val);
dequeue(q);
}
printf("\n");
printf("isEmpty: %s\n", isEmpty(q) ? "true" : "false");
return 0;
}