顺序循环队列

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

}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值