用C实现简单循环队列结构

/*
* 用C实现简单循环队列结构
*
* 循环队列的类型定义如下:
* typedef struct{
* valuetype data[MAXSIZE]; [>数据的存储区<]
* int font, rear; [>队首队尾<]
* int num; [>队列中元素的个数<]
* }Circular_Queue;
* 循环队列常用函数如下:
* (1)Circular_Queue * Init_CirQueue(): 初始化队列
* (2)int In_CirQueue(Circular_Queue *q, valuetype x): 将元素x插入队列q的队尾,若成功返回1,否则返回0
* (3)int Out_CirQueue(Circular_Queue *q, valuetype *x): 取出队列q队首位置的元素,若成功返回1,否则返回0
*/


/*程序代码:*/

#include <stdio.h>
#include <malloc.h>

#define MAXSIZE 100
typedef int valuetype;
typedef struct{
valuetype data[MAXSIZE]; /*数据的存储区*/
int font, rear; /*队首队尾*/
int num; /*队列中元素的个数*/
}Circular_Queue;

Circular_Queue * Init_CirQueue()
{
Circular_Queue *q = (Circular_Queue*)malloc(sizeof(Circular_Queue));
q->font = q->rear = MAXSIZE-1;
q->num = 0;
return q;
}

int In_CirQueue(Circular_Queue *q, valuetype x)
{
if(q->num == MAXSIZE) return 0; /*队满,不能入队*/
else {
/*q->rear = (q->rear+1)%MAXSIZE;*/
q->data[q->rear] = x;
q->rear = (q->rear+1)%MAXSIZE;
q->num++;
return 1;
}
}

int Out_CirQueue(Circular_Queue *q, valuetype *x)
{
if(q->num == 0) return 0; /*队空*/
else{
*x = q->data[q->font];
q->font = (q->font+1)%MAXSIZE;
q->num--;
return 1;
}
}

int main()
{
Circular_Queue *queue = Init_CirQueue();
int x=0;
for(int i=0;i<10;++i)
{
if(!In_CirQueue(queue, i))
break;
}
while(Out_CirQueue(queue, &x))
printf("%d ",x);
printf("\n");

return 0;
}