#include <stdio.h>
#include <malloc.h>
typedef struct queue
{
int head;
int tail;//想到队列就要想到两个下标 一个头 一个尾
int *data;//定义一个指向数组的指针
int size;//指定长度
}Queue;
void init(Queue *queue,int size)
{
queue->head = 0;
queue->tail = 0;//初始化两个下标
queue->size = size;
queue->data = (int*)malloc(size * sizeof(int));
//把数组给定空间
}
//我们要知道在队列中它是从下标为1的时候才开始存数据的
int add(Queue *queue,int value)
{
if(queue->size == 0)
return -1;
queue->tail = (queue->tail + 1) % queue->size;
queue->data[queue->tail] = value;
return 1;
}
int out(Queue *queue)
{
//这里之所以不写判空是因为我在最后写了一个判空的子函数
queue->head = (queue->head + 1) % queue->size;
int value = queue->data[queue->head];
return value;
}
int isempty(Queue *queue) //判空
{
return queue->head == queue->tail;
//当尾等于头的时候,就说明数据都被输出去了,没有了
}
int isfull(Queue *queue)
{
return (queue->tail + 1) % queue->size == queue->head;
//头部当然可能会超出size的范围所以用取余的方法
//当尾+1等于头的时候 就说明满了
//这里可以结合我之前写的另一种实现方法里面给的图来理解
}
int main()
{
Queue queue;
init(&queue,5);
add(&queue,1);
add(&queue,12);
add(&queue,123);
add(&queue,1234);
while(!isempty(&queue))
{
printf("%10d",out(&queue));
}
return 0;
}