循环队列操作接口函数声明
void queue_init(sequence_queue_t *sq);
int empty(sequence_queue_t *sq);
int queue_size(sequence_queue_t *sq);
datatype disply(sequence_queue_t *sq);
void get(sequence_queue_t *sq,datatype dat);
void insert(sequence_queue_t *sq, datatype dat);
datatype delet(sequence_queue_t *sq);
循环队列数据结构声明
#define QUEUE_SIZE 100
typedef int datatype;
// 此处实现循环队列
typedef struct sequence_queue
{
datatype buff[QUEUE_SIZE];
int front; // read
int rear; // write
}sequence_queue_t;
完整代码
#include "stdio.h"
#define QUEUE_SIZE 100
typedef int datatype;
// 此处实现循环队列
typedef struct sequence_queue
{
datatype buff[QUEUE_SIZE];
int front; // read
int rear; // write
}sequence_queue_t;
void queue_init(sequence_queue_t *sq);
int empty(sequence_queue_t *sq);
int queue_size(sequence_queue_t *sq);
datatype disply(sequence_queue_t *sq);
void get(sequence_queue_t *sq,datatype dat);
void insert(sequence_queue_t *sq, datatype dat);
datatype delet(sequence_queue_t *sq);
void queue_init(sequence_queue_t *sq)
{
//memset(&sq->buff,0,QUEUE_SIZE);
sq->front = 0;
sq->rear = 0;
}
int empty(sequence_queue_t *sq)
{
return (sq->front == sq->rear)?(1):(0);
}
int full(sequence_queue_t *sq)
{
return ((sq->rear + 1) % QUEUE_SIZE == sq->front)?(1):(0);
}
int queue_size(sequence_queue_t *sq)
{
if(sq->rear > sq->front)
{
return sq->rear - sq->front;
}
else
{
return QUEUE_SIZE - 1 - sq->front + sq->rear;
}
}
datatype disply(sequence_queue_t *sq)
{
int i = 0;
printf("----- queue disply data -----\n");
if(empty(sq))
{
printf("queue empty exit");
}
else
{
if(sq->rear > sq->front)
{
for(i = sq->front ; i < sq->rear;i++)
{
printf("%d : [%d]\n",i,sq->buff[i]);
}
}
else
{
for(i = sq->rear;i < QUEUE_SIZE;i++)
printf("%d : [%d]\n",i,sq->buff[i]);
for(i = 0;i < sq->front;i++)
printf("%d : [%d]\n",i,sq->buff[i]);
}
}
}
datatype get_front(sequence_queue_t *sq)
{
datatype dat;
if(empty(sq))
{
printf("queue empty exit");
return -1;
}
dat = sq->buff[sq->front];
//sq->rear = (sq->rear + 1)%QUEUE_SIZE;
return dat;
}
datatype get_rear(sequence_queue_t *sq)
{
datatype dat;
if(empty(sq))
{
printf("queue empty exit\n");
return -1;
}
dat = sq->buff[sq->rear];
//sq->rear = (sq->rear + 1)%QUEUE_SIZE;
return dat;
}
void insert(sequence_queue_t *sq, datatype dat)
{
if(full(sq))
{
printf("queue full exit\n");
return -1;
}
sq->buff[sq->rear] = dat;
sq->rear = (sq->rear + 1)%QUEUE_SIZE;
return dat;
}
datatype delet(sequence_queue_t *sq)
{
datatype dat;
if(empty(sq))
{
printf("queue empty exit");
return -1;
}
dat = sq->buff[sq->front];
sq->front = (sq->front + 1)%QUEUE_SIZE;
return dat;
}
int main(void)
{
sequence_queue_t sq_queue;
queue_init(&sq_queue);
printf("inser some data in to the sequence queue\n");
insert(&sq_queue,1);
insert(&sq_queue,2);
insert(&sq_queue,3);
insert(&sq_queue,4);
insert(&sq_queue,5);
printf("queue size : %d\n",queue_size(&sq_queue));
disply(&sq_queue);
printf("--delte a item:%d\n",delet(&sq_queue));
printf("queue size : %d\n",queue_size(&sq_queue));
disply(&sq_queue);
printf("-delte a item:%d\n",delet(&sq_queue));
printf("delte a item:%d\n",delet(&sq_queue));
printf("delte a item:%d\n",delet(&sq_queue));
printf("queue size : %d\n",queue_size(&sq_queue));
disply(&sq_queue);
insert(&sq_queue,77);
insert(&sq_queue,88);
insert(&sq_queue,99);
printf("***queue size : %d\n",queue_size(&sq_queue));
disply(&sq_queue);
printf("delte a item:%d\n",delet(&sq_queue));
printf("queue size : %d\n",queue_size(&sq_queue));
disply(&sq_queue);
return;
}