#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_QUEUE_SIZE 10
typedef struct
{
unsigned int queue[MAX_QUEUE_SIZE];
int head;
int tail;
int count;
}array_queue;
/*初始化队列*/
array_queue* initialize_array_queue()
{
array_queue* arr_queue = NULL;
arr_queue = (array_queue*)malloc(sizeof(array_queue));
memset(arr_queue,0,sizeof(array_queue));
arr_queue->head = MAX_QUEUE_SIZE-1;
arr_queue->tail = MAX_QUEUE_SIZE-1;
return arr_queue;
}
/*销毁队列*/
void destroy_array_queue(array_queue* arr_queue)
{
if(arr_queue != NULL)
{
free(arr_queue);
}
return;
}
/*入队列*/
void in_queue(array_queue* arr_queue,unsigned int value)
{
if(arr_queue != NULL)
{
if(arr_queue->count == MAX_QUEUE_SIZE)
{
return ;
}
else
{
arr_queue->tail = (arr_queue->tail+1)%MAX_QUEUE_SIZE;
arr_queue->queue[arr_queue->tail] = value;
arr_queue->count++;
}
}
}
/*出队列*/
unsigned int out_queue(array_queue* arr_queue)
{
unsigned int value;
if(arr_queue != NULL)
{
if(arr_queue->count == 0)
{
return -1;
}
else
{
arr_queue->head = (arr_queue->head+1)%MAX_QUEUE_SIZE;
value = arr_queue->queue[arr_queue->head];
arr_queue->queue[arr_queue->head] = 0;
arr_queue->count--;
}
}
}
void print_queue(array_queue* arr_queue)
{
int i = 0;
for(i=0;i<MAX_QUEUE_SIZE;i++)
{
printf("%d,",arr_queue->queue[i]);
}
printf("\n");
printf("head is %d, tail is %d\n",arr_queue->head,arr_queue->tail);
}
void main()
{
array_queue* queue = initialize_array_queue();
in_queue(queue, 5);
in_queue(queue, 6);
out_queue(queue);
print_queue(queue);
destroy_array_queue(queue);
}
现在队列有点小问题:head指向的并不是表头,(head++)%MAX_QUEUE_SIZE 才是表头