#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#define TYPE int
typedef struct ArrayQueue
{
TYPE* ptr;
size_t cal;
size_t cnt;
size_t front;
size_t rear;
}ArrayQueue;
ArrayQueue* create_array_queue(size_t cal)
{
ArrayQueue* queue = malloc(sizeof(ArrayQueue));
queue->ptr = malloc(sizeof(TYPE)*cal);
queue->cal = cal;
queue->cnt = 0;
queue->front = 0;
queue->rear = -1;
}
bool empty_array_queue(ArrayQueue* queue)
{
return !queue->cnt;
}
bool full_array_queue(ArrayQueue* queue)
{
return queue->cnt == queue->cal;
}
bool push_array_queue(ArrayQueue* queue,TYPE val)
{
if(full_array_queue(queue)) return false;
queue->rear = (queue->rear+1)%queue->cal;
queue->ptr[queue->rear] = val;
queue->cnt++;
return true;
}
bool pop_array_queue(ArrayQueue* queue)
{
if(empty_array_queue(queue)) return false;
queue->front = (queue->front+1)%queue->cal;
queue->cnt--;
return true;
}
TYPE head_array_queue(ArrayQueue* queue)
{
return queue->ptr[queue->front];
}
TYPE tail_array_queue(ArrayQueue* queue)
{
return queue->ptr[queue->rear];
}
size_t size_array_queue(ArrayQueue* queue)
{
return queue->cnt;
}
int main(int argc,const char* argv[])
{
ArrayQueue* queue = create_array_queue(10);
for(int i=0; i<10; i++)
{
push_array_queue(queue,i);
printf("tail:%d ",tail_array_queue(queue));
printf("size:%lu\n",size_array_queue(queue));
}
printf("=================\n");
while(!empty_array_queue(queue))
{
printf("head:%d ",head_array_queue(queue));
pop_array_queue(queue);
printf("size:%lu\n",size_array_queue(queue));
}
}