循环队列
#include <stdio.h>
#include <stdlib.h>
#define QUEUE_TYPE int
typedef struct QUEUE{
QUEUE_TYPE *head; //pointer start
int front; //head
int rear; //tail
int size; //the real is [0 ~ size-1]
}Queue;
int create_queue(Queue *s, size_t size)
{
if ((s->head = (QUEUE_TYPE *)malloc(size * sizeof(QUEUE_TYPE))) == NULL)
return -1; //failed
s->front = 0;
s->rear = 0;
s->size = size;
return 0;
}
void destroy_queue(Queue *s)
{
free(s->head);
}
int is_empty(Queue *s)
{
if (s->front == s->rear)
return 0; //empty
else
return -1; //not empty
}
int is_full(Queue *s)
{
if (((s->rear +1) % s->size) == s->front)
return 0; //full
else
return -1; //not full
}
/*
* front for out
* rear for in
*/
int insert_queue(Queue *s, QUEUE_TYPE value)
{
if (is_full(s) == 0)
return -1; //failed
s->head[s->rear] = value;
s->rear = (s->rear + 1) % s->size;
return 0;
}
int delete_queue(Queue *s, QUEUE_TYPE *value)
{
if (is_empty(s) == 0)
return -1; //failed
*value = s->head[s->front];
s->front = (s->front + 1) % s->size;
return 0; //success
}
int first_queue(Queue *s, QUEUE_TYPE *value)
{
if (is_empty(s) == 0)
return -1; //empty queue, failed
*value = s->head[s->front];
return 0; //success
}