04 数据结构之队列

循环队列

/* squence_queue.h */
#ifndef _SQUENCE_QUEUE_H_
#define _SQUENCE_QUEUE_H_#include <stdio.h>
#include <string.h>
#include <stdlib.h>#define QUEUE_SIZE 128
#define DEBUG(msg) \printf("--%s--, %s", __func__, msg)typedef int data_t;
typedef struct {data_t arr[QUEUE_SIZE];int front, rear;
}squence_queue_t;squence_queue_t *SqQueue_Create(void);
int SqQueue_Free(squence_queue_t *q);
int SqQueue_Clear(squence_queue_t *q);
int SqQueue_Entry(squence_queue_t *q, data_t value);
data_t SqQueue_Departure(squence_queue_t *q);
int SqQueue_Isempty(squence_queue_t *q);
int SqQueue_Isfull(squence_queue_t *q);#endif
/* squence_queue.c */
#include "squence_queue.h"/*brife: create a cycle queue*para: none*ret: heap zone addrees* */
squence_queue_t *SqQueue_Create(void)
{squence_queue_t *q = NULL;q = (squence_queue_t *)malloc(sizeof(squence_queue_t));if(q == NULL) {DEBUG("malloc failed\n");	return NULL;}memset(q->arr, 0, sizeof(data_t) * QUEUE_SIZE);q->front = 0;q->rear = 0;return q;
}/*brife: free a cycle in heap space*para: cycle queue pointer*ret: 0 succsess  other failed* */
int SqQueue_Free(squence_queue_t *q)
{if(q == NULL) {DEBUG("param is invalid!\n");	return -1;}free(q);q = NULL;return 0;
}/*brife: clear cycle queue content* * */
int SqQueue_Clear(squence_queue_t *q)
{if(q == NULL) {DEBUG("param is invalid!\n");	return -1;}memset(q->arr, 0, sizeof(data_t) * QUEUE_SIZE);q->front = q->rear = 0;return 0;
}/*brife: cycle queue entry operator** */
int SqQueue_Entry(squence_queue_t *q, data_t value)
{if(q == NULL) {DEBUG("param is invalid!\n");	return -1;}if((q->rear + 1) % QUEUE_SIZE == q->front) {DEBUG("queue is full, entry failed!\n");	return -1;}q->arr[q->rear] = value;q->rear = (q->rear + 1) % QUEUE_SIZE;return 0;
}/*brife: cycle queue departure operator** */
data_t SqQueue_Departure(squence_queue_t *q)
{if(q == NULL) {DEBUG("param is invalid!\n");	return -1;}data_t ret;ret = q->arr[q->front];q->front = (q->front + 1) % QUEUE_SIZE;return ret;
}/*brife: judge cycle queue is empty?*ret: 1---empty* 	   0---no empty	* */
int SqQueue_Isempty(squence_queue_t *q)
{if(q == NULL) {DEBUG("param is invalid!\n");	return -1;}return (q->front == q->rear ? 1 : 0);
}/*brife: judge a cycle queue is full?*ret: 1---full*     0---no full* */
int SqQueue_Isfull(squence_queue_t *q)
{if(q == NULL) {DEBUG("param is invalid!\n");	return -1;}return ((q->rear + 1) % QUEUE_SIZE == q->front ? 1 : 0);
}

链式队列

/* link_queue.h */
#ifndef _LINK_QUEUE_H_
#define _LINK_QUEUE_H_#include <stdio.h>
#include <string.h>
#include <stdlib.h>#define DEBUG(msg) \printf("--%s--, --%s--\n", __func__, msg);typedef int data_t;
typedef struct link_queue {data_t data;struct link_queue *next;
}queue_t;
typedef struct {queue_t *head;queue_t *rear;
}linkqueue_t;linkqueue_t *link_queue_create();
int link_queue_free(linkqueue_t *lq);
int link_queue_entry(linkqueue_t *lq, data_t value);
data_t link_queue_departure(linkqueue_t *lq);
int link_queue_clear(linkqueue_t *lq);
int link_queue_isempty(linkqueue_t *lq);#endif
/* link_queue.c */
#include "link_queue.h"linkqueue_t *link_queue_create()
{linkqueue_t *p = NULL;p = (linkqueue_t *)malloc(sizeof(linkqueue_t));if(p == NULL) {DEBUG("malloc failed\n");return NULL;}p->head = p->rear = (queue_t *)malloc(sizeof(queue_t));if(p->head == NULL) {DEBUG("malloc failed\n");return NULL;}p->head->data = 0;p->head->next = NULL;return p;
}int link_queue_free(linkqueue_t *lq)
{if(lq == NULL) {DEBUG("param is invalid\n");return -1;}queue_t *p = lq->head;while(lq->head != NULL) {p = lq->head;lq->head = lq->head->next;free(p);}free(lq);lq = NULL;return 0;}int link_queue_entry(linkqueue_t *lq, data_t value)
{if(lq == NULL) {DEBUG("param is invalid\n");return -1;}queue_t *p = (queue_t *)malloc(sizeof(queue_t));if(p == NULL) {DEBUG("new node malloc failed\n");return -1;}p->data = value;p->next = NULL;lq->rear->next = p;lq->rear = lq->rear->next;return 0;}data_t link_queue_departure(linkqueue_t *lq)
{if(lq == NULL) {DEBUG("param is invalid\n");return -1;}data_t ret = 0;queue_t *p;ret = lq->head->next->data;p = lq->head;lq->head = lq->head->next;free(p);return ret;
}int link_queue_clear(linkqueue_t *lq)
{if(lq == NULL) {DEBUG("param is invalid\n");return -1;}queue_t *p;while(lq->head->next != NULL) {p = lq->head->next;lq->head = p->next;free(p);p = NULL;}return 0;
}int link_queue_isempty(linkqueue_t *lq)
{if(lq == NULL) {DEBUG("param is invalid\n");return -1;}return (lq->head == lq->rear ? 1 : 0);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/736038.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SAP BTP Hyperscaler PostgreSQL都有哪些Performance监控 (一)

前言 SAP BTP云平台中&#xff0c;除了自身的HANA数据库作为首选以外&#xff0c;它还支持PostgreSQL的整套服务&#xff0c;并以PaaS的形式提供给客户。你可以按照实例为单位进行购买申请不同标准规格的PG实例&#xff0c;然后构建自己的业务逻辑。Hyperscaler是这套产品或方…

【Python-Docx库】Word与Python的完美结合

今天给大家分享Python处理Word的第三方库&#xff1a;Python-Docx。 什么是Python-Docx&#xff1f; Python-Docx是用于创建和更新Microsoft Word&#xff08;.docx&#xff09;文件的Python库。 日常需要经常处理Word文档&#xff0c;用Python的免费第三方包&#xff1a;Pyt…

【Linux】Shell及Linux权限

Shell Shell的定义 Shell最简单的定义是&#xff1a;命令行解释器。 Shell的主要任务&#xff1a;1. 将使用者的命令翻译给核心进行处理。2.将核心的处理结果翻译给使用者 为什么要有Shell? 使用者和内核的关系就相当于两个完全陌生的外国人之间的关系&#xff0c;他们要进…

springboot、vue、uniapp项目的部署和运行(超链接可直接跳过去)

springboot、vue项目环境配置 1、首先要安装jdk、maven、mysql、nodejs 软件安装 2、安装idea、HbuilderX、navicat 运行项目 3、运行springboot项目、运行vue项目、运行uniapp项目

Dockerfile编写实践篇

Docker通过一种打包和分发的软件&#xff0c;完成传统容器的封装。这个用来充当容器分发角色的组件被称为镜像。Docker镜像是一个容器中运行程序的所有文件的捆绑快照。当使用Docker分发软件&#xff0c;其实就是分发这些镜像&#xff0c;并在接收的机器上创建容器。镜像在Dock…

Linux:线程互斥与同步

目录 线程互斥 锁的初始化 加锁 解锁 锁的初始化 锁的原理 死锁 线程同步 方案一&#xff1a;条件变量 条件变量初始化 等待 唤醒 条件变量的代码示例 基于阻塞队列的生产消费模型 方案二&#xff1a;POSIX信号量 初始化信号量&#xff1a; 销毁信号量 等待信…

JAVA基础-数据结构一(线性表、链表、栈、队列)

一、数组线性表&#xff08;ADT&#xff09; 线性表&#xff1a;又称动态数组&#xff0c;核心是动态数组&#xff0c;可以自行扩容&#xff0c;支持增删改查四种功能 java中有ArrayList也可以自行扩容&#xff0c;二者功能较为相似&#xff0c;且ArrayList也支持转换为数组。 …

中国大学生计算机设计大赛--智慧物流挑战赛基础

文章目录 一、Ubuntu基础1.1 基本操作1.2 文本编辑 二、ROS基础介绍2.1 概念与特点2.2 基本结构2.3 创建工程2.4 节点和节点管理器2.5 启动文件 三、ROS通信机制3.1 话题3.2 服务3.3 动作3.4 参数服务器 四、ROS可视化工具4.1 rviz4.2 rqt4.3 tf 五、Python实现简单的ROS节点程…

01-分析同步通讯/异步通讯的特点及其应用

同步通讯/异步通讯 微服务间通讯有同步和异步两种方式 同步通讯: 类似打电话场景需要实时响应(时效性强可以立即得到结果方便使用),而且通话期间不能响应其他的电话(不支持多线操作)异步通讯: 类似发邮件场景不需要马上回复并且可以多线操作(适合高并发场景)但是时效性弱响应…

MQ高可用相关设置

文章目录 前言MQ如何保证消息不丢失RabbitMQRocketMQKafkaMQ MQ如何保证顺序消息RabbitMQRocketMQKafka MQ刷盘机制/集群同步RabbitMQRocketMQKafka 广播消息&集群消息RabbitMQRocketMQ MQ集群架构RabbitMQRocketMQKafka 消息重试RabbitMQRockeMqKafka 死信队列RocketMQKaf…

Claude3横空出世:颠覆GPT-4,Anthropic与亚马逊云科技共启AI新时代

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

洛谷P3853路标设置

题目背景 B 市和 T 市之间有一条长长的高速公路&#xff0c;这条公路的某些地方设有路标&#xff0c;但是大家都感觉路标设得太少了&#xff0c;相邻两个路标之间往往隔着相当长的一段距离。为了便于研究这个问题&#xff0c;我们把公路上相邻路标的最大距离定义为该公路的“空…

车载电子电器架构 —— 汽车电子电气系统分解

车载电子电器架构 —— 汽车电子电气系统分解 我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 屏蔽力是信息过载时代一个人的特殊竞争力&#xff0c;任何…

【JavaWeb】【瑞吉外卖】分页操作数据传输转换

瑞吉day3 搞定了分页以及数据传输的问题 mybatis-plus分页接口实现 分页主要是通过mybatis提供的接口实现的。这篇笔记只是记录如何实现这个接口&#xff0c;并不会深究原理。 博主也比较菜&#xff0c;目前还没有手撕mybatis代码&#xff0c;后续有机会研究一下&#xff08;…

【操作系统概念】第14章:系统保护

文章目录 0. 前言14.1 保护目标14.2 保护原则14.3 保护域14.3.1 域结构14.3.2 实例&#xff1a;UNIX14.3.3 实例&#xff1a;MUTICS 14.4 访问矩阵14.5 访问矩阵的实现14.5.1 全局表14.5.2 对象的访问列表14.5.3 域的能力(权限)列表14.5.4 锁-钥匙机制*14.5.5 比较* 14.6 访问控…

Github 2024-03-10php开源项目日报Top10

根据Github Trendings的统计,今日(2024-03-10统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量PHP项目10Blade项目1Laravel:表达力和优雅的 Web 应用程序框架 创建周期:4631 天开发语言:PHP, BladeStar数量:75969 个Fork数量:24281 次…

网络层学习常见问题及答案整理

问题0&#xff1a;ARP解析协议的定义和特点 ARP&#xff08;地址解析协议&#xff09;高速缓存表用于存储IP地址到MAC地址的映射关系。当一台主机需要将IP数据包发送到同一局域网中的另一台主机时&#xff0c;它需要知道目标主机的MAC地址&#xff0c;以便在以太网帧中使用。AR…

Vue脚手架

Vue脚手架 学习目标&#xff1a; 理解Node.js基本使用方法理解包资源管理器NPM的使用理解webpack的作用理解 vue-cli 脚手架 (重点)Element-UI 组件库 1.vue的格式&#xff1a;new Vue({//作用的视图el:"id选择器",//vue中的数据/*data:{key:value,key:value,...}…

Mysql实现分布式锁

Mysql实现分布式锁 Mysql实现分布式锁 Mysql实现分布式锁 通过数据库的唯一索引和事务的特性来实现分布式锁。 自定义一个表 -- 创建分布式锁表 CREATE TABLE DistributedLock(lock_key VARCHAR(64) NOT NULL,lock_value VARCHAR(255),PRIMARY KEY (lock_key) );-- 尝试获取…

Java 基于微信小程序的快递柜小程序

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…