06.队列介绍+实现

目录

 一、队列的概念

 二、队列的实现

1、头文件定义

2、功能函数实现

3、主函数测试


一、队列的概念

        队列就像吃饭排队类似,先来先吃,先进先出。

        队头:队列的头部。

        队尾:队列的尾部。

        入队:在队尾操作。

        出队:在队头操作。

 二、队列的实现

        因为出队列需要对队头操作,而数组对队头操作需要遍历,所以队列用链表实现更优。而单链表较双向链表占用空间更小,且同样能实现队列,所以用单链表更好。

        队列的实现类似于单链表,所以定义了链表用的节点结构体,而队列需要对头和尾操作,所以再定义结构体分别表示队列的头和尾。头和尾分别指向链表的头部和尾部。

        定义头和尾方便,为什么单链表实现不定义头和尾,因为在链表尾删的时候,需要改变尾节点的前一个节点的指针,而尾节点找不到尾节点的前一个结点,还是需要遍历链表,定义尾部意义不大。

1、头文件定义

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <assert.h>typedef int QDataType;
//链式结构,表示队列
typedef struct QList
{struct QList* next;QDataType data;
}QList;
//队列的结构
typedef struct Queue
{QList* front;QList* rear;int size;
}Queue;//队列初始化
void QInit(Queue* ps);
//队尾入队列
void QPush(Queue* ps, QDataType x);
//队头出队列
void QPop(Queue* ps);
//获取队列队头元素
QDataType QFront(Queue* ps);
//获取队列队尾元素
QDataType QRear(Queue* ps);
//检测队列是否为空
bool QEmpty(Queue* ps);
//获取队列数据个数
int QSize(Queue* ps);
//销毁队列
void QDestory(Queue* ps);

2、功能函数实现

#include "Queue.h"//队列初始化
void QInit(Queue* ps)
{assert(ps);ps->front = ps->rear = NULL;ps->size = 0;
}
//申请空间
QList* QCheck(QDataType x)
{QList* new = (QList*)malloc(sizeof(QList));if (new == NULL){perror("malloc fail\n");exit(1);}new->data = x;new->next = NULL;return new;
}
//队尾入队列
void QPush(Queue* ps, QDataType x)
{assert(ps);QList* new = QCheck(x);if (ps->front == NULL){ps->front = ps->rear = new;}else{ps->rear->next = new;ps->rear = new;}ps->size++;
}
//队头出队列
void QPop(Queue* ps)
{assert(ps);assert(ps->front);QList* nextfront = ps->front->next;free(ps->front);ps->front = nextfront;if (ps->front == NULL){ps->rear = NULL;}ps->size--;
}
//获取队列队头元素
QDataType QFront(Queue* ps)
{assert(ps);assert(ps->size > 0);return ps->front->data;
}
//获取队列队尾元素
QDataType QRear(Queue* ps)
{assert(ps);assert(ps->size > 0);return ps->rear->data;
}
//检测队列是否为空
bool QEmpty(Queue* ps)
{assert(ps);return ps->size == 0;
}
//获取队列数据个数
int QSize(Queue* ps)
{assert(ps);return ps->size;
}
//销毁队列
void QDestory(Queue* ps)
{assert(ps);while (ps->front){QList* nextfront = ps->front->next;free(ps->front);ps->front = nextfront;}ps->front = ps->rear = NULL;ps->size = 0;
}

3、主函数测试

#include "Queue.h"int main()
{Queue Q;QInit(&Q);QPush(&Q, 1);QPush(&Q, 2);QPush(&Q, 3);QPush(&Q, 4);printf("队列入队顺序为1,2,3,4,出队顺序也应该为1,2,3,4\n");while (!QEmpty(&Q)){QDataType x = QFront(&Q);printf("%d ", x);QPop(&Q);}QDestory(&Q);return 0;
}

分别建立名为Queue.h的头文件和Queue.c的源文件,和一个主函数文件。运行上述代码: 

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

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

相关文章

根据输入的速度梯度张量A和涡量w计算得到李太克斯(Liutex)相关的量,包括r(可能是一个向量)、R和Omega

这段代码是用一种可能类似于 MATLAB 的语言编写的函数&#xff0c;其主要功能是根据输入的速度梯度张量A和涡量w计算得到李太克斯&#xff08;Liutex&#xff09;相关的量&#xff0c;包括r&#xff08;可能是一个向量&#xff09;、R和Omega。 具体步骤如下&#xff1a; 首先&…

SpringBoot实现的物流优化策略

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理智能物流管理系统的相关信息成为必然。开发…

STM32—BKP备份寄存器RTC实时时钟

1.BKP简介 BKP(Backup Registers)备份寄存器BKP可用于存储用户应用程序数据。当VDD&#xff08;2.0~3.6V&#xff09;电源被切断&#xff0c;他们仍然由VBAT(1.8~3.6V)维持供电。当系统在待机模式下被唤醒&#xff0c;或系统复位或电源复位时&#xff0c;他们也不会被复位TAMP…

如果用Java设计MySQL中表级锁、行级锁和间歇锁会是怎么的?

在 MySQL 中&#xff0c;锁机制是确保数据一致性和并发控制的重要手段。MySQL 支持多种锁类型&#xff0c;包括表级锁、行级锁等&#xff0c;每种锁的适用场景、影响范围和实现机制各不相同。我们将逐一介绍它们&#xff0c;并通过模拟代码展示不同锁的实现。 1. 锁类型及其影…

【GAMES101笔记速查——Lecture 16 Ray Tracing4】

上节课的内容&#xff1a;辐射度量学、光线传播、反射方程、渲染方程、全局光照、概率论复习 这节课要介绍一种真实的渲染方法-蒙特卡洛路径追踪 目录 1 简单回顾 1.1 渲染方程&#xff08;The Rendering Equation&#xff09; 1.2 概率 2 蒙特卡洛积分&#xff08;Monte…

ubuntu 24.04 下载安装离线包,ubuntu 24.04 配置xrdp

ubuntu 24.04 配置xrdp 1. 安装gnome-tweaks sudo apt install gnome-tweaks 2. 配置 cat <<EOF > ~/.xsessionrc export GNOME_SHELL_SESSION_MODEubuntu export XDG_CURRENT_DESKTOPubuntu:GNOME export XDG_CONFIG_DIRS/etc/xdg/xdg-ubuntu:/etc/xdg EOF 3.…

使用poi-tl动态写入目录更新问题解决

在使用poi-tl动态写完word后&#xff0c;是无法更新目录的&#xff0c;使用poi-tl提供的插件也是不行的&#xff0c;而且很多使用poi手动写入的也是不行&#xff0c;最多就是让你在打开文件时提示你更新目录/更新域&#xff0c;用户体验很差&#xff0c;要点击好几次而且wps还不…

SQL Injection | SQL 注入概述

关注这个漏洞的其他相关笔记&#xff1a;SQL 注入漏洞 - 学习手册-CSDN博客 0x01&#xff1a;SQL 注入漏洞介绍 SQL 注入就是指 Web 应用程序对用户输入数据的合法性没有判断&#xff0c;前端传入后端的参数是可控的&#xff0c;并且参数会带入到数据库中执行&#xff0c;导致…

(10) GTest c++单元测试(mac版)

文章目录 概要安装实现机制-断言&#xff08;简单、独立的测试&#xff09;实现机制-测试套件实现机制-Test Fixture和事件 概要 官方文档 https://google.github.io/googletest/ 安装 git clone https://github.com/google/googletestcd googletestmkdir build && c…

JavaScript 了解专用工作者线程

目录 一、何为专用工作者线程二、专用工作者线程的全局对象三、创建专用工作者线程的方法四、专用工作者线程特点END 一、何为专用工作者线程 最简单的WEB工作者线程,执行在页面加载外的其他任意如网络请求,繁杂计算操作并可以与页面通信. 二、专用工作者线程的全局对象 专用…

十、结构型(外观模式)

外观模式&#xff08;Facade Pattern&#xff09; 概念 外观模式&#xff08;Facade Pattern&#xff09;是一种结构型设计模式&#xff0c;旨在为复杂子系统提供一个简化的统一接口。通过外观模式&#xff0c;客户端可以与子系统交互&#xff0c;而无需了解子系统的内部复杂性…

数字化营销助企业在生态平台实现内卷突围

在当今数字化时代&#xff0c;企业竞争激烈&#xff0c;内卷化严重。而数字化生态平台建设与数字化营销为企业带来了新机遇。 数字化生态平台意义重大。它能整合企业内外资源&#xff0c;提高运营效率。打破地域限制&#xff0c;拓展市场&#xff0c;吸引更多客户。还能为企业创…

AdGuard v4.7.61 拦截所有广告 解锁高级版

AdGuard v4.7.61 拦截所有广告 解锁高级版 下载链接&#xff1a;夸克网盘分享

三、MyBatis实践(3):多表映射,动态语句,高级扩展

三、MyBatis多表映射 3.1 多表映射概念 多表查询结果映射思路 上面课程中&#xff0c;我全面讲解了单表的mybatis操作&#xff01;但是开发中更多的是多表查询需求&#xff0c;这种情况我们如何让进行处理&#xff1f; MyBatis 思想是&#xff1a;数据库不可能永远是你所想或所…

【AI副业项目】太离谱了!爆涨粉47W+,下一个风口项目AI+大健康养S赛道,单月变现30W,教你如何用AI做爆款健康养生账号

我一直说小红薯平台是最适合新手素人做的平台&#xff0c;去中心化的平台&#xff0c;任何普通人都可以在这个平台分一杯羹的平台。 但但但是很多朋友发小红薯作品都是超低的小眼睛&#xff0c;连最基本的流量都没拿到。 从他们的经历来看就是小红薯太难做了。那是没有掌握技…

【Vue】Vue3.0 (十二)、watchEffect 和watch的区别及使用

上篇文章&#xff1a; 【Vue】Vue3.0 &#xff08;十二&#xff09;、watch对ref定义的基本类型、对象类型&#xff1b;reactive定义的对象类型的监视使用 &#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;Vue专栏&#xff1a;点击&#xff01; ⏰️创作时间&…

智慧油田智能安全管控方案-AI助力油气田安全管控升级

在科技日新月异的今天&#xff0c;万物纵横科技凭借其前沿的智慧油田智能安全管控方案&#xff0c;正引领着油气田行业向智能化、高效化转型。该方案深度融合了AI视频智能分析与AIoT&#xff08;物联网人工智能&#xff09;技术&#xff0c;为采油场、油气场的设备运维、环境监…

两个字符串的最长 公共子序列

给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。 一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原字符串在不改变字符的相对顺序的情况下删除某些字符&#xff08;也可以…

Unity Apple Vision Pro 自定义手势识别交互

Vision Pro 是可以使用Unity 提供的XR Hand SDK,可通过XR Hand制作自定义手势识别&#xff0c;通过识别出不同的手势做自定义交互 效果预览 在VisionPro中看VisionPro|手势交互|自定义手势识别 Unity Vision Pro 中文课堂教程地址&#xff1a; Unity3D Vision Pro 开发教程【…

2024全网最详细CTF入门指南、CTF夺旗赛使用工具及刷题网站

2024年最新的CTF&#xff08;Capture The Flag&#xff0c;夺旗赛&#xff09;入门指南如下&#xff0c;涵盖了入门思路、常见题型及练习网站推荐&#xff0c;帮助你逐步了解并提升在CTF中的解题技巧。 如果你对网络安全入门感兴趣&#xff0c;我给大家整理好了相关资料&#…