数据结构---队列

头文件

复制代码
  1 #ifndef QUEUE_H
  2 #define QUEUE_H
  3 typedef int data_t
  4 typedef struct queue
  5 {
  6     data_t *que;
  7     int head;
  8     int tail;
  9     int tlen;
 10 }queue_t;
 11 #endif

队列的创建

复制代码
  1 queue_t* queue_create(int len)                                                                                                                                                   
  2 {
        if(len<2)
            return NULL;
  3     queue_t*pq=malloc(sizeof(queue_t));
  4     if(pq==NULL)
  5         return NULL;
  6     pq->que=malloc(sizeof(data_t)*len);
  7     if(pq->que==NULL)
  8     {
  9         free(pq);
 10         return NULL;
 11     }
 12     pq->head=0;
 13     pq->tail=0;
 14     pq->tlen=len;
 15     return pq;
 16 }

整个队列放在一个结构体中,最大容量在创建时就被规定,需要注意,队列长度为0或1时队列无意义,不创建(并且长度为1时head始终等于tail,无法入队或者出队)

判断队列是否为满--是否为空

复制代码
 18 int is_full(queue_t *pque)
 19 {
 20     if((pque->tail+1)%pque->tlen==pque->head)
 21         return 1;
 22     return 0;
 23 }
 24
 25 int is_empty(queue_t *pque)
 26 {
 27     return pque->tail == pque->head;
 28 }

入队

复制代码
 30 int enqueue(queue_t *pque,data_t data)
 31 {
 32     if(is_full(pque))
 33         return -1;
 34     pque->que[pque->tail]=data;
 35     pque->tail=(pque->tail+1)%pque->tlen;
 36     return 0;
 37 }

先判断队列是否为满,不满则在尾部入队,尾下标后移,注意数组是否越界

出队

复制代码
 39 int dequeue(queue_t *pq,data_t *data)
 40 {
 41     if(is_empty(pq))
 42         return -1;
 43     *data=pq->que[pq->head];
 44     pq->head=(pq->head+1)%pq->tlen;
 45     return 0;
 46 }

判断队列是否为空,用指针拿走数据并头删

销毁队列

复制代码
 48 void queue_destroy(queue_t **pq)
 49 {
 50     if(pq==NULL || *pq==NULL)
 51         return;
 52     free((*pq)->que);
 53     free(*pq);
 54     *pq=NULL;
 55     return ;
 56 }

需要用二级指针带入结构体,用二级指针才能把主调函数中的一级指针置空

用链表也可以构成队列,只需要创建、头插、尾删(指针带出数据)、销毁

与链表队列类似,栈链表只需要创建、头插、头删(指针带出数据)、销毁

相关推荐
文丑颜不良啊37 分钟前
LeetCode1941~1960题目解析
java·leetcode
txxzjmzlh1 小时前
SpringBoot 统⼀功能处理
java·spring boot·后端
nice_lcj5203 小时前
Java Lambda 表达式入门:怎么写、怎么用、常用方法有哪些
java·开发语言·后端·面试
码农小河663 小时前
基于SSM+JSP+MySQL的在线医疗服务系统的设计与实现
java·开发语言·mysql
老师我太想进步了20264 小时前
【数据结构-4】算法美学之顺序表
数据结构·算法
风影同志783244 小时前
编码器是激活函数吗?—— 一个看起来很像、其实不是的类比
算法
SL_staff4 小时前
从配置失效到逻辑复用:JVS-Logic 如何构建可治理的业务编排中枢
java·spring·产品
特立独行的猫A4 小时前
一份 Markdown 发十个平台:cspub 一稿多投
java·后端·python
UIU1144 小时前
P1481 魔族密码
c++·算法·动态规划
文丑颜不良啊5 小时前
LeetCode1961~1980题目解析
java·leetcode