如何使用c语言实现循环队列
发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,这篇文章主要介绍如何使用c语言实现循环队列,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!队列是一种先入先出的结构,数据从队列头出,队尾进。在linux内核中进程调度,打印缓冲区
千家信息网最后更新 2025年01月22日如何使用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安全错误
数据库的锁怎样保障安全
如何通过利用网络技术
汉邦时代网络技术
滨州供应链软件开发咨询
lae软件开发平台下载
深圳机器人软件开发商
网络技术服务包括监控吗
新疆公安机关网络安全管理
网络安全工程师招聘
网络安全宣传周主题晚会陕西
嵌入式软件开发区小吃街成都
歌尔软件开发11级
软件开发国企工资
黑龙江虚拟主机服务器
网络技术支持和技术支持区别
下面关于数据库的恢复模式
路由器入网络安全密钥
我的世界网易版服务器排行
快手软件开发需要什么技术
服务器上传ip是否安全
网易土豆服务器评测
网络安全德语课心得体会
网络安全方面心得
服务器控件怎么让文本框自己换行
无忧隐藏软件开发
零跑软件开发团队
数据库安全技术实训总结
华为服务器电源状态指示灯
无锡互联网软件开发推荐咨询
对于中文法律数据库的期待
qq泄漏数据库查询