//循环队列(顺序队列)的实现
#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>
#define N 6
//定义数据类型
typedef int datatype_t;
//定义结构体
typedef struct{
datatype_t data[N];
int front;
int rear;
}sequeue_t;
sequeue_t *sq;
//创建一个空的队列
sequeue_t *sequeue_create()
{
static sequeue_t Sequeue_list;
sequeue_t *sq = &Sequeue_list;
sq->front = sq->rear = 0;
return sq;
}
//判断队列是否为空
int sequeue_empty(sequeue_t *sq)
{
return sq->front == sq->rear ? 1 : 0;
}
//判断队列是否为满
int sequeue_full(sequeue_t *sq)
{
return (sq->rear + 1) % N == sq->front ? 1 : 0;
}
//入队
int sequeue_push(sequeue_t *sq, datatype_t value)
{
if(sequeue_full(sq))
{
//printf("sequeue is full\n");
sequeue_pop(sq);
}
sq->data[sq->rear] = value;
sq->rear = (sq->rear + 1) % N;
printf("sequeue_push is ok %d \n",value);
return 0;
}
//出队
datatype_t sequeue_pop(sequeue_t *sq)
{
if(sequeue_empty(sq))
{
printf("sequeue is empty\n");
return (datatype_t)-1;
}
datatype_t value;
value = sq->data[sq->front];
sq->front = (sq->front + 1) % N;
return value;
}
int main(int argc, const char *argv[])
{
sq = sequeue_create();
int i = 0,j = 0;
while(1){
sequeue_push(sq, i++);
sequeue_push(sq, i++);
sequeue_push(sq, i++);
sequeue_push(sq, i++);
sequeue_push(sq, i++);
sequeue_push(sq, i++);
sequeue_push(sq, i++);
sequeue_push(sq, i++);
while(!sequeue_empty(sq) && j)
{
printf("%d ", sequeue_pop(sq));
}
if(j == 0)
j = 1;
else
j = 0;
getchar();
}
return 0;
}