数据结构8:队列

文章目录

    • Queue.h
  • 实现文件
    • Queue.c
  • 测试文件
    • test.c

#头文件

Queue.h

#pragma once#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<stdbool.h>typedef int QListDataType;typedef struct QListNode {QListDataType val;struct QListNode* next;
}QListNode;typedef struct Queue {QListNode* head;QListNode* tail;int size;
}Queue;//初始化
void QueueInit(Queue* pq);//销毁
void QueueDestroy(Queue* pq);//队尾入队列
void QueuePush(Queue* pq, QListDataType x);//对头出队列
void QueuePop(Queue* pq);//获取队列头部元素
QListDataType QueueFront(Queue* pq);//获取队列队尾元素
QListDataType QueueBack(Queue* pq);//获取队列中有效元素个数
int QueueSize(Queue* pq);//检查队列是否为空,空返回真,非空返回假
bool QueueEmpty(Queue* pq);

实现文件

Queue.c

#define _CRT_SECURE_NO_WARNINGS 1#include"Queue.h"//初始化
void QueueInit(Queue* pq)
{assert(pq);pq->head = NULL;pq->tail = NULL;pq->size = 0;
}//销毁
void QueueDestroy(Queue* pq)
{assert(pq);QListNode* cur = pq->head;while (cur){QListNode* next = cur->next;free(cur);cur = next;}pq->head = NULL;pq->tail = NULL;pq->size = 0;
}//队尾入队列
void QueuePush(Queue* pq, QListDataType x)
{assert(pq);QListNode* newnode = (QListNode*)malloc(sizeof(QListNode));if (newnode == NULL){perror("malloc fail");return;}newnode->val = x;newnode->next = NULL;if (pq->tail == NULL){pq->head = pq->tail = newnode;}else{pq->tail->next = newnode;pq->tail = newnode;}pq->size++;
}//队头出队列
void QueuePop(Queue* pq)
{assert(pq);assert(pq->size);QListNode* tmp = pq->head->next;free(pq->head);pq->head = tmp;if (pq->head == NULL)pq->tail = NULL;pq->size--;
}//获取队列头部元素
QListDataType QueueFront(Queue* pq)
{assert(pq);assert(pq->size);return pq->head->val;
}//获取队列队尾元素
QListDataType QueueBack(Queue* pq)
{assert(pq);assert(pq->size);return pq->tail->val;
}//获取队列中有效元素个数
int QueueSize(Queue* pq)
{assert(pq);return pq->size;
}//检查队列是否为空,空返回真,非空返回假
bool QueueEmpty(Queue* pq)
{assert(pq);return pq->size == 0;
}

测试文件

test.c

#define _CRT_SECURE_NO_WARNINGS 1#include"Queue.h"void Test1()
{Queue q;Queue* pq = &q;//初始化QueueInit(pq);QueuePush(pq, 1);printf("头部元素:%d  尾部元素:%d  队列中元素个数:%d\n", QueueFront(pq), QueueBack(pq),QueueSize(pq));QueuePush(pq, 2);printf("头部元素:%d  尾部元素:%d  队列中元素个数:%d\n", QueueFront(pq), QueueBack(pq), QueueSize(pq));QueuePush(pq, 3);printf("头部元素:%d  尾部元素:%d  队列中元素个数:%d\n", QueueFront(pq), QueueBack(pq), QueueSize(pq));QueuePush(pq, 4);printf("头部元素:%d  尾部元素:%d  队列中元素个数:%d\n", QueueFront(pq), QueueBack(pq), QueueSize(pq));QueuePop(pq);printf("头部元素:%d  尾部元素:%d  队列中元素个数:%d\n", QueueFront(pq), QueueBack(pq), QueueSize(pq));QueuePop(pq);printf("头部元素:%d  尾部元素:%d  队列中元素个数:%d\n", QueueFront(pq), QueueBack(pq), QueueSize(pq));QueuePop(pq);printf("头部元素:%d  尾部元素:%d  队列中元素个数:%d\n", QueueFront(pq), QueueBack(pq), QueueSize(pq));QueuePop(pq);//printf("头部元素:%d  尾部元素:%d  队列中元素个数:%d\n", QueueFront(pq), QueueBack(pq), QueueSize(pq));//销毁QueueDestroy(pq);}int main()
{Test1();return 0;
}

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

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

相关文章

IPRally巧用Google Kubernetes Engine和Ray改善AI

专利检索平台提供商 IPRally 正在快速发展&#xff0c;为全球企业、知识产权律师事务所以及多个国家专利和商标局提供服务。随着公司的发展&#xff0c;其技术需求也在不断增长。它继续训练模型以提高准确性&#xff0c;每周添加 200,000 条可供客户访问的可搜索记录&#xff0…

Python语言零基础入门——案例实战

目录 一、用户登录系统 二、计算天数 一、用户登录系统 1.功能需求&#xff1a;用户输入用户名、密码后&#xff0c;根据用户是否已经注册&#xff0c;用户是否在黑名单中&#xff0c;提示用户是否登录成功。 2.登录功能 输入用户名输入密码登录验证&#xff1a;①用户是否…

Tomcat启动闪退解决办法

Tomcat启动闪退通常是由于多种原因引起的&#xff0c;以下列举了针对常见问题的解决办法&#xff1a; 1. 端口冲突 解决办法&#xff1a; 检查Tomcat默认使用的8080端口是否被其他应用程序占用。可以使用命令行工具&#xff08;如netstat -ano | find "8080"&#…

Linux之 USB驱动框架-USB总线(2)

一、linux 下&#xff0c;通过系统查看usb 总线 ls /sys/bus/usb/devices/也包含了很多信息&#xff1a; 其中usb1、usb2代表系统注册了2条usb总线&#xff0c;即有2个USB主机控制器&#xff0c;1和2用于区分不同总线&#xff0c;是USB的总线号。 每插入一个usb设备&#xff…

深度学习-数据操作

目录 张量通过shape属性访问张量的形状通过shape属性访问张量中元素的总数reshape改变张量的形状&#xff08;不改变元素数量和元素值&#xff09;使用全0、全1、其他常量或者从特定分布中随机采样的数字通过提供包含数值的Python列表为所需张量中的每个元素赋予确定值。张量的…

半导体存储器整理

半导体存储器用来存储大量的二值数据&#xff0c;它是计算机等大型数字系统中不可缺少的组成部分。按照集成度划分&#xff0c;半导体存储器属于大规模集成电路。 目前半导体存储器可以分为两大类&#xff1a; 只读存储器&#xff08;ROM&#xff0c;Read Only Memory&#xff…

关于抖音 担保支付 订单同步 报错

需要注意的问题就是 参数类型 一定要 文档字符类型保持一致 order_detail 参数 其实是 json 一个字符串 其中 order_detail 下的 item_list 参数 是一个数组 转成json 后还是一个数组 所以 litm_list 其实是一个 二维数组 PHP代码 非POI 订单 参数示例 [app_name > dou…

如何判断客户需求能不能做出来产品?

在做G端产品的过程中,为了让产品可以符合客户实际需求,我们需要经历客户需求调研的这个环节。那么,需求收集后,我们要从什么维度判断客户的需求是否真的可以产品化呢? 我们做G端产品,新产品的方向几乎100%来自于政策。所以才会有“政策带来产品,产品催生政绩”。 可就算…

用python写一个高并发请求的request,要求有请求的数据data/query,记录并发数及响应的时间

在Python中实现高并发请求,可以使用concurrent.futures模块来管理线程池或进程池,以并发执行HTTP请求。以下是一个简单的示例,使用requests库发送HTTP请求,并使用ThreadPoolExecutor来实现并发请求。此示例还包括记录请求的并发数和每个请求的响应时间。首先,确保安装了re…

Servlet(JavaEE开发)

目录 一、Tomcat服务器 二、Servlet生命周期详解 三、HttpRequest对象 四、HttpResponse对象 五、HttpSession对象 六、ServletContext对象 七、过滤器、 八、监听器 九、JSP技术介绍 一、Tomcat服务器 Tomcat官网&#xff1a;Apache Tomcat - Welcome! Tomcat的安装…

解锁ApplicationContext vs BeanFactory: 谁更具选择性?

目录 一、聚焦源码回顾 &#xff08;一&#xff09;源码分析和理解 &#xff08;二&#xff09;简短的回顾对比建议 二、ApplicationContext vs BeanFactory特性对比 &#xff08;一&#xff09;主要特性总结 &#xff08;二&#xff09;直接建议 三、案例简单说明 &am…

OpenTelemetry-1.介绍

目录 1.是什么 2.为什么使用 OpenTelemetry 3.数据类型 Tracing Metrics Logging Baggage 4.架构图 5.核心概念 6.相关开源项目 ​编辑 7.分布式追踪的起源 8.百花齐放的分布式追踪 Zipkin Skywalking Pinpoint Jaeger OpenCensus OpenTracing 9.Openteleme…

虚假新闻检测——Adapting Fake News Detection to the Era of Large Language Models

论文地址&#xff1a;https://arxiv.org/abs/2311.04917 1.概论 尽管大量的研究致力于虚假新闻检测&#xff0c;这些研究普遍存在两大局限性&#xff1a;其一&#xff0c;它们往往默认所有新闻文本均出自人类之手&#xff0c;忽略了机器深度改写乃至生成的真实新闻日益增长的现…

【漏洞复现】Adobe ColdFusion 任意文件读取漏洞 CVE-2024-20767

漏洞描述 Adobe ColdFusion是美国奧多比(Adobe)公司的一套快速应用程序开发平台。该平台ColdFusion 2023 <= Update 6 和 ColdFusion 2021<= Update 12版本中存在一个任意文件读取漏洞。 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公共…

【北京迅为】《iTOP-3588开发板系统编程手册》-第20章 socket 应用编程

RK3588是一款低功耗、高性能的处理器&#xff0c;适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用&#xff0c;RK3588支持8K视频编解码&#xff0c;内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像素ISP&…

TI_DSP_F2808学习笔记1: GPIO

1. 初始化设置 1.1 控制寄存器 GPxMUX功能选择寄存器/多功能复用选择 GPxDIR 方向选择寄存器/输入输出选择 0 输入 1 输出GPxPUD 上拉功能选择寄存器/是否启用内部上拉 0 有上拉&#xff0c;1禁止上拉GPxQSeln输入限定选择寄存器 输入n次为0或1才有效&#xff0c;滤波 1.2 数…

使用nacos分布式配置的好处!!!

1、没使用nacos之前&#xff0c;我们如果修改了配置文件&#xff0c;就必须重新发布应用&#xff0c;配置才会生效。使用nacos远程配置后&#xff0c;配置就可以实时更新&#xff0c;就无需重新发布应用&#xff0c;减少了重新发布所消耗的时间&#xff0c;提高了效率。 2、可…

ffmpeg截图(关键帧截图)

1.rtsp流截图 ffmpeg --stimeout 1000000 -rtsp_transport tcp -i rtsp://xxx -vf selecteq(pict_type,PICT_TYPE_I) -vsync vfr -ss 00:00:00.000 -vframes 1 -s 640x480 -y output.jpg -hide_banner参数解释&#xff1a; ● -stimeout 1000000&#xff1a;设置socket超时时间…

PDF 书签制作与调整

本文是对以前发表的旧文拆分&#xff0c;因为原文主题太多&#xff0c;过长&#xff0c;特另起一篇分述。 第一部分 由可编辑 PDF 文档创建书签 方法 1. Adobe Acrobat Pro autobookmark AutoBookmark 是一个可用于 Adobe Acrobat 自动生成书签的插件。 官方下载地址&…

corona渲染器锐化模糊设置,corona高效出图方法

​在使用Corona渲染器进行效果图渲染时&#xff0c;锐化和模糊是两种常用的设置&#xff0c;它们主要用于调整图像的清晰度和柔化效果。锐化参数可以增强图像中的细节&#xff0c;使画面看起来更加清晰锋利&#xff1b;而模糊参数则可以用来柔化图像边缘&#xff0c;减少图像噪…