千家信息网

如何使用c语言实现循环队列

发表于:2024-11-21 作者:千家信息网编辑
千家信息网最后更新 2024年11月21日,这篇文章主要介绍如何使用c语言实现循环队列,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!队列是一种先入先出的结构,数据从队列头出,队尾进。在linux内核中进程调度,打印缓冲区
千家信息网最后更新 2024年11月21日如何使用c语言实现循环队列

这篇文章主要介绍如何使用c语言实现循环队列,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

队列是一种先入先出的结构,数据从队列头出,队尾进。在linux内核中进程调度,打印缓冲区都有用到队列。

队列有多种实现方式,可以用链表,也可以用数组。这里用数组来实现一个简单的循环队列。首先创建一个大小为8的队列如下,队列头尾指针指向同一块内存,

当从队列尾部插入一个数据后变成下面的情形,为了便于处理,这里始终会浪费一个空间

继续插入数据,直到出现以下情形,表示队列满了,

接下来看一下出队的情形,从队列头出队3个元素,

再添加三个元素后队列又变成满的了,

在上面这种情况下面,如果再添加元素就会把队列头的元素覆盖掉,如下:

循环队列实现代码:

#include #include /* 循环队列大小*/#define MAX 8     typedef struct queue {        int *que_array;        int front;         //指向队首        int rear;          //指向队尾        int valid_cnt;     //队列中有效的数据个数    int total;      //队列总大小} queue_t;typedef enum {    E_NONE     = 0,    E_NOMEMORY = 1,    E_FAIL     = 2,} error_t;void init_queue(queue_t *que){        que->que_array = (int *)malloc(sizeof(int) * MAX);        if (que->que_array == NULL) {                printf("no mem\n");                exit(-E_NOMEMORY);        }        que->front     = 0;    que->rear      = 0;        que->valid_cnt = 0;    que->total     = MAX;}/* 判断队列是否已满 */int is_full(queue_t *que){        return (((que->rear + 1) % que->total) == (que->front));}/* 判断队列是否为空 */int is_empty(queue_t *que){        return (que->front == que->rear);}/* 元素入队 */void entry_queue(queue_t *que, int data){        if (is_full(que)) {                printf("队列已满,添加后有可能会覆盖掉前面的元素 \n");                que->front = ((que->front+1) % que->total);        }        que->que_array[que->rear % que->total] = data;        que->rear = (que->rear+1) % que->total;        que->valid_cnt++;}/* 元素出队 */int del_queue(queue_t *que){    int tmp;        if (is_empty(que)) {        printf("队列为空 \n");        return -E_FAIL;    }        tmp = que->que_array[que->front % que->total];        que->front = ((que->front+1) % que->total);        que->valid_cnt--;        return tmp;}int main(int argc, char *argv[]){    int tem_data,i;        queue_t que;            init_queue(&que);#if 0        for (i = 0; i < 7; i++) {                entry_queue(&que, i + 1);        }    printf("出队队列中的所有元素 \n");        while (!is_empty(&que)) {                printf("%d,", del_queue(&que));        }#endif            /*接下来,添加十个元素试试*/    for (i = 0; i < 10; i++) {                entry_queue(&que, i + 1);        }    printf("出队队列中的所有元素 \n");        while (!is_empty(&que)) {                printf("%d,", del_queue(&que));        }            return 0;}

以上是"如何使用c语言实现循环队列"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

队列 元素 循环 数据 大小 情形 指向 语言 内容 数组 篇文章 有效 接下来 三个 个数 代码 价值 兴趣 内存 内核 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 工和网络技术有限公司怎么样 网络安全远程扫描服务系统 数据库助手导入旧版数据 计算机网络技术去哪个城市好 网络安全保障工作方案工作总结 华为服务器开关机按钮 飞机服务器和港口怎么填 科学解释网络技术 战队服务器怎么匹配 迷你世界服务器 商务网络技术试卷 嵌入式软件开发工程师招聘猎聘 尚游网络技术有限公司深圳规模 如何不花钱建手机服务器 公司网络安全使用规章制度 怎么看懂软件开发框架 信息网络安全等级考试报名 全民健康数据库建设方案 怪物猎人3g数据库 网络安全法 6个月 手机可以远程登录电脑服务器吗 软件开发如何使用图像 关于网络安全的短语50字 渝北区一站式网络技术是什么 网络安全高级工程师官网 服务器能用无线键盘鼠标吗 公安网络安全对裸眼视力要求 网络安全论文4000字 北京企业管理系统软件开发 博山办公自动化oa软件开发
0