顺序循环队列
环境:gcc
目的:顺序循环队列练习
功能:
1. 建立顺序循环队列
2. 判空
3. 判满
4. 入队列
5. 出队列
6. 求队列长
/*************************************************************************
@Author: wanghao
@Created Time : Thu 10 May 2018 12:45:40 AMPDT
@File Name: sqlqueue.c
@Description:
************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 10
typedef int data_t;
typedef struct queue_t
{
data_tdata[MAXSIZE];
int front;
int rear;
}Queue;
Queue *create_queue(void)
{
Queue *q = NULL;
q= (Queue *)malloc(sizeof(Queue));
if(!q)
{
printf("Mallocqueue fail\n");
return NULL;
}
memset(q->data,0, MAXSIZE);
q->front = 0;
q->rear = 0;
}
int empty_queue(Queue *queue)
{
if(!queue)
{
printf("Queue does not exist!\n");
return -1;
}
return(queue->front == queue->rear)? 1 : 0;
}
int full_queue(Queue *queue)
{
if(!queue)
{
printf("Queuedoes not exist!\n");
return -1;
}
return((queue->rear + 1) % MAXSIZE == queue->front)? 1 : 0;
}
int in_queue(Queue *queue, data_t data)
{
if(!queue)
{
printf("Queuedoes not exist!\n");
return -1;
}
if(full_queue(queue))
{
printf("Thequeue is full\n");
return -2;
}
queue->data[queue->rear]= data;
queue->rear= (queue->rear + 1) % MAXSIZE;
return 1;
}
int de_queue(Queue *queue, data_t *data)
{
if(!queue)
{
printf("Queue does not exist!\n");
return -1;
}
if(empty_queue(queue))
{
printf("Thequeue is empty\n");
return-2;
}
*data= queue->data[queue->front];
queue->front= (queue->front + 1) % MAXSIZE;
return1;
}
int length_queue(Queue *queue)
{
if(!queue)
{
printf("Queuedoes not exist!\n");
return-1;
}
return(queue->rear - queue->front + MAXSIZE) % MAXSIZE;
}
int main(int argc, const char *argv[])
{
inti;
data_tdata;
Queue*queue = NULL;
queue= create_queue();
if(!queue)
{
printf("Createqueue fail!\n");
return-1;
}
for(i= 0; i < MAXSIZE; i++)
{
in_queue(queue,i+1);
}
printf("Thelength of queue is %d\n",length_queue(queue));
for(i= 0; i < MAXSIZE; i++)
{
de_queue(queue,&data);
printf("%d\t",data);
}
printf("\n");
printf("Thelength of queue is %d\n",length_queue(queue));
return0;
}