数据结构与算法——队列

2023-05-16

数据结构与算法

  • 队列
    • 队列的链式存储结构
      • 创建一个队列
      • 入队列操作
    • 出队列操作
    • 销毁一个队列

队列

队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。
与栈相反,队列是一种先进先出(First In First Out,FIFO)的线性表。

与栈相同的是,队列也是一种重要的线性结构,实现一个队列同样需要顺序表和链表作为基础。

队列的链式存储结构

队列一般使用链表来实现,简称链队列

typedef struct QNode  //定义结点的数据结构
{
    ElemType data;
    struct QNode *Next;
}QNode, *QueuePrt;

typedef struct
{
    QueuePrt front, rear; //队列头、尾指针
}LinkQueue;

将队头指针指向链队列的头结点,而队尾指针指向终端结点。(注:头结点不是必须的,但是为了方便操作,我们加上了)
在这里插入图片描述

创建一个队列

创建一个队列要完成两个任务:一是在内存中创建一个头结点,二是将队列的头指针和尾指针都指向这个生成的头结点,因为此时是空队列。

void initQueue(LinkQueue *q)
{
    q->front =q->rear(QueuePtr)malloc(sizeof(QNode));
    if(!q->front)
    exit(0);
    q->front->next = null;
}

入队列操作

在这里插入图片描述

在这里插入图片描述

InsertQueue(LinkQueue *q,ElemType e)
{
	QueuePtr p;
	p = (QueuePtr)malloc(sizeof(QNode)); //生成结点
	if (p == NULL)
	exit(0);
	p->data = e; //赋值
	p->next = NULL; //下一个结点
	q->rear->next = p; //令q rear的下一个指向p
	q->rear = p; //令q的rear等于p
}

出队列操作

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
若原队列只有一个元素,那么应该对队尾指针进行处理
在这里插入图片描述
在这里插入图片描述

DeleteQueue(LinkQueue *q,ElemType *e)
{
	QueuePtr p;
	if(q->front == q->rear) //空队列
	return;
	p = q->front->next; //令p结点等于头结点的下一个结点
	if(q->rear == p)  //判断队尾指针是否等于p 即是否只有一个元素
		q->rear = q->front; //将队尾指针向前移动,再释放p
	free(p);
}

销毁一个队列

由于链队列建立在内存的动态区,因此当一个队列不再有用时应将其销毁,以免过多地占用内存空间。

DestroyQueue(LinkQueue *q)
{
	while(q->front)
	{
		q->rear = q->front->next; //队列只有q的头尾结点
		free(q->front); //释放q的头指针
		q->front = q->rear; 
	}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据结构与算法——队列 的相关文章

  • 数据库多维迭代算法

    关键词 数据库 迭代 递归 多维 一 两种传统的数据库迭代结构算法 对于数据库的迭代结构 有两种传统的算法 递归算法和边界算法 比如对于下面图1的结构 图1 递归算法的数据结构如表1所示 节点id 节点值 父节点id 1 1111 2 3
  • 树06--二叉树中和为某一值的路径

    树06 二叉树中和为某一值的路径 jz24 题目概述 解析 参考答案 注意事项 说明 题目概述 算法说明 输入一颗二叉树的根节点和一个整数 按字典序打印出二叉树中结点值的和为输入整数的所有路径 路径定义为从树的根结点开始往下一直到叶结点所经
  • 第二十八节、基于深度学习的目标检测算法的综述(附代码,并附有一些算法英文翻译文章链接))...

    在前面几节中 我们已经介绍了什么是目标检测 以及如何进行目标检测 还提及了滑动窗口 bounding box 以及IOU 非极大值抑制等概念 这里将会综述一下当前目标检测的研究成果 并对几个经典的目标检测算法进行概述 本文内容来自基于深度学
  • Qt——用于表格QTableView的模型

    如果想使用表格来呈现数据 Qt提供了一个方便的部件QTableWidget 但是直接用它实现一些功能可能比较困难 这里将介绍一种强大 灵活的方式来操作表格 一 模型 视图架构 在这个架构中 模型用于存储数据 视图用于呈现数据 除此之外 还有
  • JavaScript实现数据结构 -- 链表

    文章目录 链表 链表的特点 链表和数组的区别 JS模拟链表 遍历链表 插入节点 删除节点 链表应用 删除链表中的节点 leetcode 237 思路 代码 反转链表 leetcode 206 思路 代码 链表 链表和数组一样是有多个元素组成
  • 用 Java 实现的八种常用排序算法

    八种排序算法可以按照如图分类 前置知识 1 算法稳定性 在一个序列中 能保证两个相等的数 经过排序之后 其在序列的前后位置顺序不变 A1 A2 排序前 A1 在 A2 前面 排序后 A1 还在 A2 前面 2 时间复杂度 时间复杂度是用于衡
  • DDP入门

    DDP 即动态动态规划 可以用于解决一类带修改的DP问题 我们从一个比较简单的东西入手 最大子段和 带修改的最大子段和其实是常规问题了 经典的解决方法是用线段树维护从左 右开始的最大子段和和区间最大子段和 然后进行合并 现在我们换一种方法来
  • 数据结构与算法学习总结(六)——字符串的模式匹配算法

    基本概念 字符串是一种特殊的线性表 即元素都是 字符 的线性表 字符是组成字符串的基本单位 字符的取值依赖于字符集 例如二进制的字符集为0 1 则取值只能为 0 1 再比如英语语言 则包括26个字母外加标点符号 例如 abcde 就是一个字
  • 以太坊系列之十五: 以太坊数据库

    以太坊数据库中都存了什么 以太坊使用的数据库是一个NOSQL数据库 是谷歌提供的开源数据leveldb 这里尝试通过分析以太坊数据库存储了什么来分析以太坊可能为我们提供哪些关于区块链的API 存储内容 NOSQL是一个key value数据
  • 数据结构——计算节点个数和二叉树高度(C语言版)

    摘自 数据结构 计算节点个数和二叉树高度 C语言版 作者 正弦定理 发布时间 2020 12 12 23 27 09 网址 https blog csdn net chinesekobe article details 111086664
  • 4Sum

    Given an array S of n integers are there elements a b c and d in S such that a b c d target Find all unique quadruplets
  • Unique Binary Search Trees -- LeetCode

    原题链接 http oj leetcode com problems unique binary search trees 这道题要求可行的二叉查找树的数量 其实二叉查找树可以任意取根 只要满足中序遍历有序的要求就可以 从处理子问题的角度来
  • 如何防止过拟合和欠拟合

    过拟合和欠拟合是模型训练过程中经常出现的问题 两种情况正好相反 现将两者的定义及如何防止进行简要总结 1 过拟合 1 1 定义 是指模型对于训练数据拟合呈现过当的情况 反映到评估指标上就是模型在训练集上的表现很好 但是在测试集上的表现较差
  • OJ-合并两个有序链表

    题目描述 代码如下 Definition for singly linked list struct ListNode int val struct ListNode next struct ListNode mergeTwoLists s
  • Linux 内核中的 Device Mapper 机制

    Linux 内核中的 Device Mapper 机制 尹 洋 在读博士生 尹洋 中科院计算所国家高性能计算机工程技术研究中心的在读博士生 主要从事服务部署和存储资源管理以及Linux块设备一级的开发和研究工作 简介 本文结合具体代码对 L
  • 时间复杂度+常见复杂度解释

    前言 算法的效率 虽然计算机能快速的完成运算处理 但实际上 它也需要根据输入数据的大小和算法效率来消耗一定的处理器资源 要想编写出能高效运行的程序 我们就需要考虑到算法的效率 算法的效率主要由以下两个复杂度来评估 时间复杂度 评估执行程序所
  • 机器学习算法GBDT的面试要点总结-上篇

    1 简介 gbdt全称梯度提升决策树 在传统机器学习算法里面是对真实分布拟合的最好的几种算法之一 在前几年深度学习还没有大行其道之前 gbdt在各种竞赛是大放异彩 原因大概有几个 一是效果确实挺不错 二是即可以用于分类也可以用于回归 三是可
  • 二叉树结构的建立与遍历

    实验项目 1 编写建立二叉树的二叉链表存储结构 左右链表示 的程序 并以适当的形式显示和保存二叉树 2 完成二叉树的7种遍历操作 3 给定一个二叉树 编写算法完成下列应用 1 判断其是否为完全二叉树 2 求二叉树中任意两个结点的公共祖先 输
  • 数组实现循环队列(增设队列大小size)

    目录 一 前言 1 如何实现循环 2 如何判断队列为空 3 如何判断队列为满 二 循环队列的结构定义 三 循环队列的创建及其初始化 四 入队 五 出队 六 取队头元素 七 取队尾元素 八 循环队列判空 九 循环队列判满 十 循环队列销毁 一
  • 高精度运算合集,加减乘除,快速幂,详细代码,OJ链接

    文章目录 零 前言 一 加法 高精度加法步骤 P1601 A B 二 减法 高精度减法步骤

随机推荐

  • C++ MathGL 二维数据绘图

    C 43 43 MathGL环境搭建参考 https blog csdn net vaincury article details 105438971 MathGL官网 http mathgl sourceforge net doc en
  • 面经——小马智行2022秋招嵌入式

    笔试 单选 xff1a 双向链表 实时操作系统特征 死锁的必要条件 小端对齐时 xff0c 不用sizeof判断int长度 const typedef 结构体字节对齐 堆和栈 n阶阶乘的时间复杂度 tcpudp static 常见通信协议
  • silicon labs平台通过串口升级固件方案

    开发环境 windowssimplicity studio 5geck sdk 4 1 一 bootloader 新建BGAPI UART DFU工程 工程新建完成以后看一下linkerfile ld文件的flash和ram的配置跟自己的a
  • Postman前置脚本

    位置 xff1a 作用 xff1a 调用脚本之前需要执行的代码片段 一 产生随机数字 生成0 1之间的随机数 xff0c 包括0 xff0c 不包括1 xff1b var random 61 Math random console log
  • Ubuntu下启动后网卡没有服务没有启动的问题

    参照了很多帖子 xff0c 两个典型的帖子分别是 https blog csdn net ErErFei article details 98205463 Ubuntu 18 04设置开机自动启动 https blog csdn net w
  • 错误:datatype/md5sum

    学习中科院ros入门时 xff0c 在用roscpp实现主题的发布和订阅 xff0c 遇到以下错误 xff1a ERROR Client listener wants topic gps info to have datatype md5s
  • C++的门道(一些C++的关键坑)

    C 43 43 的门门道道 导语 C 43 43 是一门被广泛使用的系统级编程语言 xff0c 更是高性能后端标准开发语言 xff1b C 43 43 虽功能强大 xff0c 灵活巧妙 xff0c 但却属于易学难精的专家型语言 xff0c
  • EGO-PLANNER安装问题记录以及如何在Ubuntu22.04LTS上安装ROS noetic

    一 Ubuntu系统版本及ROS版本 笔者误操作升级系统版本到了Ubuntu22 04LTS xff0c 在这个版本中系统不支持ROS1的安装 xff0c 笔者尝试用ROS2运行ego planner xff0c 并未运行成功 xff0c
  • 算法竞赛中常用的STL

    C 43 43 标准模板库 xff08 STL xff09 封装了大量十分有用的数据结构和算法 xff0c 熟练使用STL将会使我们的程序编写如虎添翼 接下来会介绍几种在程序竞赛中常用到的STL类 如果想了解更多 xff0c 推荐直接访问官
  • Lwip从入门到放弃之(一)---基础网络知识扫盲

    Lwip从入门到放弃之 基础网络知识扫盲 一 由于工作中用到了有关Lwip的有关知识 xff0c 本人作为一个网络通信协议的门外汉 xff0c 打算系统的学习一下以太网通讯的有关知识 而Lwip作为一款开源的轻量级TCP IP协议栈 xff
  • nginx电信合规100分配置

    在日常线上部署中 xff0c 总会遇到nginx配置基线漏洞 xff0c 整理了一份nginx100分配置分享下 可以通过基线扫描 nginx conf user nobody worker processes 1 error log lo
  • gitee码云webhook,代码提交后同步到服务器。

    1 创建脚本 xff0c 写入以下内容 脚本放入www根目录下 span class token delimiter important lt php span span class token variable json span spa
  • Socket接口编程

    简介 1 Socket 英文原意是 孔 或者 插座 的意思 在网络编程中 通常将其称之为 套接字 当前网络中的主流程序设计都是使用 Socket 进行编程的 因为它简单易用 更是一个标准 能在不同平台很方便移植 2 socket是统一的编程
  • Linux基础命令-chattr更改文件隐藏属性

    目录 前言 一 chattr命令介绍 二 语法及常用参数和模式 2 1 一样用help或man查看语法 2 2 常用参数 2 3 命令的模式 三 参考实例 3 1 给文件添加无法修改的权限 3 2 从指定文件移除隐藏属性 3 3 给目录添加
  • 四轴飞行器的串级PID参数整定经验

    串级PID即将两个PID控制器按照串联的方式连接起来 xff0c 前一个的输出作为后一个的输入两者共同控制控制对象 对于四旋翼来讲最普通的就是外环角度环 xff0c 内环角速度环 xff0c 两者怎么联系呢 xff0c 有的说法是 xff1
  • 嵌入式C语言复习——Day4

    嵌入式C语言复习 Day4 C语言函数的使用 1 函数概述 xff1a 一堆代码的集合 xff0c 用一个标签去描述它 xff0c 复用化 xff1b 函数三要素 xff1a 1 函数名 xff08 地址 xff09 2 输入参数 3 返回
  • C++基础复习——Day2

    类和对象 封装对象的初始化和清理构造函数和析构函数构造函数的分类及调用拷贝构造函数调用时机深拷贝与浅拷贝 C 43 43 对象模型和this指针友元运算符重载加号运算符重载左移运算符重载递增运算符重载赋值运算符重载 继承继承的基本用法继承方
  • 【模电基础复习】

    模拟电子技术 概念向 1 二极管杂质半导体的形成载流子是什么线性元件与非线性元件PN结形成原理及特性PN结的击穿二极管特性和主要参数二极管应用其他二极管类型 1 思考题为什么称空穴是载流子 xff1f 如何从PN结的电压电流特性方程来理解其
  • 【数电基础复习】

    数字电子技术 概念向 数制和码制数字量与模拟量位权十 二进制运算反码 补码奇偶校验 逻辑函数逻辑代数运算最小项和最大项逻辑函数化简方法 门电路CMOS门电路CMOS反相器CMOS电压传输特性和电流传输特性CMOS反相器静态输入特性和输出特性
  • 数据结构与算法——队列

    数据结构与算法 队列队列的链式存储结构创建一个队列入队列操作 出队列操作销毁一个队列 队列 队列 xff08 queue xff09 是只允许在一端进行插入操作 xff0c 而在另一端进行删除操作的线性表 与栈相反 xff0c 队列是一种先