编译环境VS2008
Queue.h
####为了解决顺序队列的假溢出的问题,设计了环形队列
#pragma once
#include <assert.h>
#include <stdio.h>
#define MAX_SIZE 8
typedef int DataType;
typedef struct Queue
{
DataType _array[MAX_SIZE];
int _front;
int _back;
int _count;
}Queue;
//队列的初始化
void QueueInit(Queue* q);
//入队列
void QueuePush(Queue* q,DataType data);
//出队列
void QueuePop(Queue* q);
//判断队列是否为空
int QueueEmpty(Queue* q);
//队列的元素的个数
int QueueSize(Queue* q);
//对头元素
DataType QueueFront(Queue * q);
//队尾元素
DataType QueueBack(Queue* q);
Queue.c
#include "queue.h"
//队列的初始化
void QueueInit(Queue* q)
{
assert(q);
q->_front = q->_back = 0;
q->_count = 0;
};
//入队列
void QueuePush(Queue* q,DataType data)
{
assert(q);
if(MAX_SIZE == q->_count)
{
printf("队列已满!!!\n");
return;
}
q->_array[q->_back++] = data;
if(q->_back == MAX_SIZE)
q->_back = 0;
q->_count++;
}
//出队列
void QueuePop(Queue* q)
{
assert(q);
if(QueueEmpty(q))
{
printf("队列元素为空!\n");
return;
}
++(q->_front);
if(q->_front == MAX_SIZE)
q->_front = 0;
q->_count--;
}
//判断队列是否为空
int QueueEmpty(Queue* q)
{
assert(q);
return q->_count == 0;
}
//队列的元素的个数
int QueueSize(Queue* q)
{
assert(q);
return q->_count;
}
//对头元素
DataType QueueFront(Queue * q)
{
assert(q);
return q->_array[q->_front];
}
//队尾元素
DataType QueueBack(Queue* q)
{
assert(q);
if(0 != q->_back)
return q->_array[q->_back-1];
return q->_array[MAX_SIZE-1];
}
test.c
#include "queue.h"
void test();
int main()
{
test();
return 0;
}
void test()
{
Queue q;
QueueInit(&q);
QueuePush(&q,1);
QueuePush(&q,2);
QueuePush(&q,3);
QueuePush(&q,4);
QueuePush(&q,5);
QueuePush(&q,6);
printf("size = %d\n",QueueSize(&q));
printf("front = %d\n",QueueFront(&q));
printf("back = %d\n",QueueBack(&q));
QueuePop(&q);
QueuePop(&q);
printf("size = %d\n",QueueSize(&q));
printf("front = %d\n",QueueFront(&q));
printf("back = %d\n",QueueBack(&q));
}