数据结构6—队列(附源码)

news/2024/9/18 12:50:00/ 标签: 数据结构, c语言, 算法, 笔记

1.队列

1.1 概念与结构

概念:只允许在一端插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out)

入队列:进行插入操作的一端称为队尾

出队列:进行删除操作的一端称为队头

2.源码

2.1 Queue.h

#pragma once#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <stdbool.h>//定义队列结构typedef int QDataType;typedef struct QueueNode
{int data;struct QueueNode* next;
}QueueNode;typedef struct Queue
{QueueNode* phead;QueueNode* ptail;int size;
}Queue;void QueueInit(Queue* pq);//初始化void QueuePush(Queue* pq, QDataType x);//入队列void QueuePop(Queue* pq);//出队列bool QueueEmpty(Queue* pq);//队列判空QDataType QueueFront(Queue* pq);//取队头数据QDataType QueueBack(Queue* pq);//取队尾数据int QueueSize(Queue* pq);//取有效数据个数void QueueDestroy(Queue* pq);//队列的销毁

2.2 Queue.c

#include "Queue.h"void QueueInit(Queue* pq)
{assert(pq);pq->phead = pq->ptail = NULL;pq->size = 0;
}void QueuePush(Queue* pq, QDataType x)
{assert(pq);//申请新节点QueueNode* newnode = (QueueNode*)malloc(sizeof(QueueNode));if (newnode == NULL){perror("malloc fail!");exit(1);}newnode->data = x;newnode->next = NULL;//ptail  newnodeif (pq->phead == NULL)//队列为空{pq->phead = pq->ptail = newnode;}else//队列不为空{//队列不为空pq->ptail->next = newnode;pq->ptail = pq->ptail->next;}pq->size++;
}
//
void QueuePop(Queue* pq)
{assert(pq);assert(!QueueEmpty(pq));//只有一个节点的情况(避免出现野指针)if (pq->ptail == pq->phead){free(pq->phead);pq->phead = pq->ptail = NULL;}else{//删除队头元素QueueNode* next = pq->phead->next;free(pq->phead);pq->phead = next;}pq->size--;
}//空位true ,非空为false
bool QueueEmpty(Queue* pq)
{assert(pq);return pq->phead = NULL && pq->ptail == NULL;
}
//
QDataType QueueFront(Queue* pq)
{assert(pq);assert(!QueueEmpty(pq));return pq->phead->data;
}
//
QDataType QueueBack(Queue* pq)
{assert(pq);assert(!QueueEmpty(pq));return pq->ptail->data;
}int QueueSize(Queue* pq)
{assert(pq);return pq->size;
}void QueueDestroy(Queue* pq)
{assert(pq);assert(!QueueEmpty(pq));QueueNode* pcur = pq->phead;while (pcur){QueueNode* next = pcur->next;free(pcur);pcur = next;}pq->phead = pq->ptail = NULL;
}

2.3 test.c

#include "Queue.h"void QueueTest01()
{Queue q;QueueInit(&q);QueuePush(&q, 1);QueuePush(&q, 2);QueuePush(&q, 3);//QueuePop(&q);printf("head:&d\n", QueueFront(&q));printf("head:&d\n", QueueBack(&q));}int main()
{QueueTest01();return 0;
}


http://www.ppmy.cn/news/1524627.html

相关文章

Spring中Bean的相关注解

目录 1.Spring IoC&DI 2.关于Bean存储的相关注解(类注解与方法注解) Bean的获取方式 类注解和方法注解的重命名 2.1 类注解 2.1.1 Controller 2.1.2 Service 2.1.3 Repository 2.1.4 Component 2.1.5 Configuration 2.2 方法注解-Bean 2.2.1 定义多个对象 2.2…

四七层如何获取客户端真实地址

7层代理会对报文进行重新封装&#xff0c;封装过程中可以通过增加XFF的header传递客户端IP。4层转发不会修改报文。在不修改HTTP报文前提下&#xff0c;前置补充代理信息, 格式: PROXY TCP 客户端IP 代理端IP 客户端端口 代理端端口。 nginx 七层代理配置&#xff1a; server …

求逆序对(平推)

题目描述 给定一个序列a1,a2,…,an&#xff0c;如果存在i<j并且ai>aj&#xff0c;那么我们称之为逆序对&#xff0c;求逆序对的数目。 输入 第一行&#xff0c;一个数 n&#xff0c;表示序列中有 n个数。 第二行 n 个数&#xff0c;表示给定的序列。序列中每个数字不…

Unexpected token ‘o‘, “[object Obj“... is not valid JSON 报错原因解释

在开发时使用到JSON.parse报错&#xff0c;不过第一次不会报错&#xff0c;解释一下原因&#xff1a; JSON.parse()用于从一个字符串中解析出json对象&#xff0c;举个例子&#xff1a; var str {"name":"Bom","age":"15"}JSON.par…

salesforce user 使用 dataloader.io 需要哪些权限

使用 dataloader.io 来处理 Salesforce 数据时&#xff0c;用户需要具备特定的权限&#xff0c;确保能够顺利进行数据导入、导出和更新操作。以下是所需的关键权限&#xff1a; 1. API 访问权限 “API Enabled” 权限&#xff1a;dataloader.io 依赖 Salesforce API 来与 Sal…

JVM面试真题总结(六)

文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 解释GC的标记-整理算法及其优点 GC&#xff08;垃圾收集&#xff…

WPF利用Path自定义画头部导航条(TOP)样式

1;新建两个多值转换器&#xff0c;都有用处&#xff0c;用来动态确定PATH的X,Y州坐标的。 EndPointConverter 该转换器主要用来动态确定X轴&#xff0c;和Y轴。用于画线条的。 internal class EndPointConverter : IMultiValueConverter {public object Convert(object[] val…

【视频教程】Python语言在地球科学领域中的实践技术应用

Python是功能强大、免费、开源&#xff0c;实现面向对象的编程语言&#xff0c;Python能够运行在Linux、Windows、Macintosh、AIX操作系统上及不同平台&#xff08;x86和arm&#xff09;&#xff0c;Python简洁的语法和对动态输入的支持&#xff0c;再加上解释性语言的本质&…

【C++】list(下)

个人主页~ list&#xff08;上&#xff09;~ list 四、模拟实现1、list.h&#xff08;1&#xff09;关于整个list的搭建①节点②迭代器③接口 &#xff08;2&#xff09;自定义类型实例化 2、test.cpp&#xff08;1&#xff09;test1&#xff08;2&#xff09;test2 五、额外小…

0906作业+思维导图梳理

一、作业&#xff1a; 1、创捷一个类似于qq登录的界面 1&#xff09;源代码 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//QPushbutton:登录、退出this-…

决策树(Decison Tree)—有监督学习方法、概率模型、生成模型、非线性模型、非参数化模型、批量学习

定义 ID3算法 输入&#xff1a;训练数据集&#xff08;T { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ , ( x N , y N ) } \left\{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\right\} {(x1​,y1​),(x2​,y2​),⋯,(xN​,yN​)}&#xff09;&#xff0c;特征集A阀值 ε \varepsilon ε 输…

日志框架log4j打印异常堆栈信息携带traceId,方便接口异常排查

一、异常堆栈无traceId 排查定位问题异常痛苦 在日常项目开发中&#xff0c;我们会自定义一个traceId方便&#xff0c;链路追踪。在log4j2.xml 我们可能是这样去配置日志打印格式。 <Console name"CONSOLE" target"SYSTEM_OUT"><PatternLayoutpa…

大腾智能出席龙华云创中心启动与鸿蒙园揭牌仪式

在数字化转型的浪潮中&#xff0c;深圳市龙华区再次引领行业创新&#xff0c;携手华为云成功举办“龙华工业软件云工程应用创新中心启动仪式暨鸿蒙产业园揭牌仪式”&#xff0c;本次盛会已于8月26日圆满落幕。活动现场&#xff0c;来自全国各地的行业精英、企业领袖及专家学者汇…

基于SpringBoot+Vue+MySQL的滑雪场管理系统

系统展示 用户前台界面 管理员后台界面 系统背景 在快速发展的冰雪运动热潮下&#xff0c;为了提升滑雪场的管理效率与顾客体验&#xff0c;我们设计并实现了一套基于SpringBoot后端框架、Vue前端框架以及MySQL数据库的滑雪场管理系统。该系统旨在通过数字化手段&#xff0c;优…

web框架

1. Web框架: 1.1Web框架定义&#xff1a; Web框架是一个用于构建Web应用程序的软件框架&#xff0c;它提供了一套完整的开发工具和库&#xff0c;以简化Web应用的开发过程。Web框架通常实现了HTTP协议、路由机制、模板渲染、数据验证、数据库操作等常用功能。 1.2Web框架与数…

苹果三款Mac新品十月登场:标配M4系列芯片

Mark Gurman爆料&#xff0c; 苹果将在10月推出14和16英寸MacBook Pro、Mac mini和iMac等设备&#xff0c;标配M4系列芯片。 据悉&#xff0c;苹果Mac新品搭载的M4芯片有两种版本&#xff0c;一种是10核CPU10核GPU&#xff0c;一种是8核CPU8核GPU。 值得注意的是&#xff0c;以…

如何将网络安全防范游戏化

组织对威胁的准备和恢复能力跟不上网络犯罪分子的进步。 一些首席执行官仍然认为网络安全需要偶尔干预&#xff0c;而不是持续关注。 但对于许多公司来说&#xff0c;情况并非如此&#xff1b;网络威胁准备需要协调一致的培训工作&#xff0c;因此网络安全团队在攻击发生时已…

Qt对话框布局调整

Qt 基础: 在"main.cpp" 文件的开始部分加入以下头文件&#xff1a; #include<Qsplitter> #include<QTextEdit> #include<QTextCodec> 停靠窗口QDockWidget 类: 停靠窗口QDockWidget 类也是在应用程序中经常用到的&#xff0c;设置停靠窗口的…

18 Python如何操作文件?

本篇是 Python 系列教程第 18 篇&#xff0c;更多内容敬请访问我的 Python 合集 1 打开文件 通常使用内置的 open(文件路径, 模式, encoding"utf-8")函数。 文件路径&#xff1a;可以是相对路径或绝对路径。模式&#xff1a;&#xff08;可选&#xff09;决定了文件…

【mysql】mysql修改sql_mode之后无法启动

现象&#xff1a;修改后mysql无法启动&#xff0c;不报错 原因&#xff1a;MySQL在8以后sql_mode已经取消了NO_AUTO_CREATE_USER这个关键字。去掉这个关键字后&#xff0c;启动就可以了 修改前&#xff1a; sql_modeSTRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR…