#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h> //exit 函数需要
#include <malloc.h>
#define MAXSIZE 8
typedef struct queue {
int* arr; //int 类型数组,arr数组名
int head; //队头
int rear; //队尾后一个元素
}QUEUE;
//函数原型
bool init_queue(QUEUE* queue);
bool enqueue(QUEUE* queue, int val); //入队
bool dequeue(QUEUE* queue, int* val); //出队
bool is_empty(QUEUE* queue);
bool is_full(QUEUE* queue);
void show_queue(QUEUE* queue);
//测试程序
main() {
bool is_em = 1, is_fu = 0;
QUEUE queue;
int val; //出队的int;
init_queue(&queue);
enqueue(&queue, -200100);
enqueue(&queue, 12);
enqueue(&queue, 13);
enqueue(&queue, 14);
enqueue(&queue, 15);
enqueue(&queue, 116);
enqueue(&queue, 117);
enqueue(&queue, 1118);
enqueue(&queue, 1119);
enqueue(&queue, 11114);
show_queue(&queue);
is_em = is_empty(&queue);
is_fu = is_full(&queue);
dequeue(&queue, &val);
printf("dequeue val=%d", val);
printf("\nis_em=%d, is_full=%d ", is_em, is_fu);
}
bool init_queue(QUEUE* queue) {
queue->arr = (int*)malloc(sizeof(int) * MAXSIZE); // 注意: 是创建int 的存储空间,不是对结构体!
if (NULL == queue->arr) //申请失败
exit(-1);
queue->head = 0; //起始都为0
queue->rear = 0;
}
bool enqueue(QUEUE* queue, int val) {
if (is_full(queue))
return false;
else
{
queue->arr[queue->rear] = val;
queue->rear = (queue->rear + 1) % MAXSIZE; //循环队列队头自加
}
}
bool dequeue(QUEUE* queue, int* val) {
if (is_empty(queue))
return false;
else {
*val = queue->arr[queue->head];
queue->head = (queue->head + 1) % MAXSIZE; //循环队列队后自加
}
}
bool is_empty(QUEUE* queue) {
if (queue->head == queue->rear) //如果相等就是空,因为还剩一个空间就是队满了,所以不会和对满冲突
return true;
else
return false;
}
bool is_full(QUEUE* queue) {
if (queue->head == (queue->rear + 1) % MAXSIZE) //还剩一个空间就是队满了
return true; //循环队列可以理解为head 在追rear, rear 在追head
else
return false;
}
void show_queue(QUEUE* queue) {
int i;
i = queue->head;
printf("queue: ");
while (i != queue->rear) {
printf("%d ", queue->arr[i]);
i = (i + 1) % MAXSIZE;
}
printf("\n");
}