//queue.h
#ifndef __QUEUE_H__
#define __QUEUE_H__
//队列
typedef struct queue{
int* arr; //记录存储区首地址
int size;//有效元素个数
int cap; //容量
int front;//记录出队元素下标
int rear; //记录入队元素下标
}queue_t;
//初始化
void queue_init(queue_t* q,int cap);
//释放
void queue_deinit(queue_t* q);
//判满
int queue_full(queue_t* q);
//判空
int queue_empty(queue_t* q);
//入队
void queue_push(queue_t* q,int data);
//出队
int queue_pop(queue_t* q);
#endif //__QUEUE_H__
//queue.c
#include <stdio.h>
#include <stdlib.h>
#include "queue.h"
void queue_init(queue_t *q, int cap){
q->arr = malloc(sizeof(int) * cap);
q->size = 0;
q->cap = cap;
q->front = 0;
q->rear = 0;
}
void queue_deinit(queue_t *q){
free(q->arr);
q->arr = NULL;
q->size = 0;
q->cap = 0;
q->front = 0;
q->rear = 0;
}
int queue_full(queue_t *q){
return q->size == q->cap ? 1 : 0;
}
int queue_empty(queue_t *q){
return q->size == 0 ? 1 : 0;
}
void queue_push(queue_t *q, int data){
//rear超出存储极限归零
if(q->rear == q->cap){
q->rear = 0;
}
q->arr[q->rear] = data;
q->rear++;
q->size++;
}
int queue_pop(queue_t *q){
int data = q->arr[q->front];
q->front++;
q->size--;
return data;
}
#include<stdio.h>
#include"queue.h"
int main(void){
queue_t qu;
queue_init(&qu, 6);
int data = 0;
while (queue_full(&qu) != 1){
queue_push(&qu,data);
data++;
}
while (queue_empty(&qu) != 1) {
printf("%d",queue_pop(&qu));
printf("\n");
}
queue_deinit(&qu);
return 0;
}