顺序循环队列

环境: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;

}