队列的概念及结构(内有成型代码可供CV工程师参考)

2023-11-07

目录

前言以及队列全部代码(CV工程师点这里)

一、队列的概念

 二、队列的实现

  三、代码实现以及详细解释

        1. 初步介绍

        2.  定义结构体,以及栈内数据类型

        3. 初始化队列

        4.队列的销毁

        5. 队列插入元素(尾插)

        6.删除队头元素

        7.返回队头元素

        8. 返回队尾元素 

        9.求队列的长度   

        10. 判断是否为空


前言以及队列全部代码(CV工程师点这里)

        前言:前面我们学习了链表以及栈的知识,他们都是数据结构中的重要知识点,接下来我们来学习一下队列有关的知识。还是老套路二话不说,先上代码

#include<stdlib.h>
#include<assert.h>
#include<stdbool.h>

typedef int QDataType;
typedef struct QueueNode
{
	struct QueueNode* next;
	QDataType data;
}QNode;

typedef struct Queue
{
	QNode* phead;
	QNode* ptail;
	int size;
}Queue;

void QueueInit(Queue* pq);
void QueueDestroy(Queue* pq);
void QueuePush(Queue* pq, QDataType x);
void QueuePop(Queue* pq);
QDataType QueueFront(Queue* pq);
QDataType QueueBack(Queue* pq);
int QueueSize(Queue* pq);
bool QueueEmpty(Queue* pq);

void QueueInit(Queue* pq)
{
	assert(pq);
	pq->phead = NULL;
	pq->ptail = NULL;
	pq->size = 0;
}
void QueueDestroy(Queue* pq)
{
	assert(pq);
	QNode* cur = pq->phead;
	while (cur)
	{
		QNode* next = cur->next;
		free(cur);
		cur = next;
	}
	pq->phead = pq->ptail = NULL;
	pq->size = 0;
}
void QueuePush(Queue* pq, QDataType x)
{
	assert(pq);
	QNode* newnode = (QNode*)malloc(sizeof(QNode));
	if (newnode == NULL)
	{
		perror("malloc fail\n");
		return;
	}
	newnode->data = x;
	newnode->next = NULL;
	if (pq->ptail == NULL)
	{
		assert(pq->phead == NULL);
		pq->phead = pq->ptail = newnode;
	}
	else
	{
		pq->ptail->next = newnode;
		pq->ptail = newnode;
	}
	pq->size++;
}

void QueuePop(Queue* pq)
{
	assert(pq);
	assert(!QueueEmpty(pq));
	if (pq->phead->next ==NULL)
	{
		QNode* head = pq->phead;
		free(head);
		pq->phead = pq->ptail = NULL;
		pq->size = 0;
	}
	else
	{
		QNode* head = pq->phead;
		pq->phead = pq->phead->next;
		free(head);
		pq->size--;
	}
}
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;
}
bool QueueEmpty(Queue* pq)
{
	assert(pq);
	return pq->size == 0;
}

一、队列的概念

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

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

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

 

 二、队列的实现

        队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低。

 

  三、代码实现以及详细解释

        1. 初步介绍

1. 初始化队列                   void QueueInit(Queue* pq);
2. 队列的销毁                   void QueueDestroy(Queue* pq);
3. 队列插入元素(尾插) void QueuePush(Queue* pq, QDataType x);
4. 删除队头元素               void QueuePop(Queue* pq);
5. 返回队头元素               QDataType QueueFront(Queue* pq);
6. 返回队尾元素               QDataType QueueBack(Queue* pq);
7. 求队列的长度               int QueueSize(Queue* pq);
8. 判断是否为空               bool QueueEmpty(Queue* pq);


        2.  定义结构体,以及栈内数据类型

代码:

#include<stdlib.h>
#include<assert.h>
#include<stdbool.h>

typedef int QDataType;
typedef struct QueueNode
{
	struct QueueNode* next;
	QDataType data;
}QNode;

typedef struct Queue
{
	QNode* phead;
	QNode* ptail;
	int size;
}Queue;

        3. 初始化队列

代码:

void QueueInit(Queue* pq)
{
	assert(pq);
	pq->phead = NULL;
	pq->ptail = NULL;
	pq->size = 0;
}

        4.队列的销毁

代码:

void QueueDestroy(Queue* pq)
{
	assert(pq);
	QNode* cur = pq->phead;
	while (cur)
	{
		QNode* next = cur->next;
		free(cur);
		cur = next;
	}
	pq->phead = pq->ptail = NULL;
	pq->size = 0;
}

        5. 队列插入元素(尾插)

代码:

void QueuePush(Queue* pq, QDataType x)
{
	assert(pq);
	QNode* newnode = (QNode*)malloc(sizeof(QNode));
	if (newnode == NULL)
	{
		perror("malloc fail\n");
		return;
	}
	newnode->data = x;
	newnode->next = NULL;
	if (pq->ptail == NULL)
	{
		assert(pq->phead == NULL);
		pq->phead = pq->ptail = newnode;
	}
	else
	{
		pq->ptail->next = newnode;
		pq->ptail = newnode;
	}
	pq->size++;
}

        6.删除队头元素

代码:

void QueuePop(Queue* pq)
{
	assert(pq);
	assert(!QueueEmpty(pq));
	if (pq->phead->next ==NULL)
	{
		QNode* head = pq->phead;
		free(head);
		pq->phead = pq->ptail = NULL;
		pq->size = 0;
	}
	else
	{
		QNode* head = pq->phead;
		pq->phead = pq->phead->next;
		free(head);
		pq->size--;
	}
}

        7.返回队头元素

代码:

QDataType QueueFront(Queue* pq)
{
	assert(pq);
	assert(!QueueEmpty(pq));
	return(pq->phead->data);
}

        8. 返回队尾元素 

代码:

QDataType QueueBack(Queue* pq)
{
	assert(pq);
	assert(!QueueEmpty(pq));
	return pq->ptail->data;
}

        9.求队列的长度   

代码:

int QueueSize(Queue* pq)
{
	assert(pq);
	return pq->size;
}

        10. 判断是否为空

代码:

bool QueueEmpty(Queue* pq)
{
	assert(pq);
	return pq->size == 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

队列的概念及结构(内有成型代码可供CV工程师参考) 的相关文章

  • DVWA - XSS DOM (low)

    low级别 XSS 全称Cross Site Scripting 即跨站脚本攻击 某种意义上也是一种注入攻击 是指攻击者在页面中注入恶意的脚本代码 当受害者访问该页面时 恶意代码会在其浏览器上执行 需要强调的是 XSS不仅仅限于JavaSc

随机推荐

  • 抖音 x-gorgon 03 免费生成接口 抖音6.3.0版本

    接口已经更新 请参考文章 https blog csdn net wql2014302721 article details 113737772 相关文章 抖音爬虫从0到1 第一弹 环境配置 抖音 x gorgon 03 免费生成接口 抖音
  • Markdown文档小技巧

    MarkDown文档现在可以说普及率原来越高 相对于其他的编辑 记得重点是如何输出内容 提供给你对应的 神秘代码 来完成一些如生成目录 数字符号 链接啊这些东西 更加关心文档的内容 0 推荐的的markdown文档编辑工具 我这里推荐Typ
  • android 关于mk如何引用其它so库

    通常 开发android的软件 常常需要编译so库 然编译的这个so库 需要调用多个其它的so库 这里主要记录一下 编译so库时 调用其它so库的mk 是怎么写的 这里讲的示例 需要编译出libtest3 so 它需要调用libtest1
  • Qt:QML:程序最大化最小化全屏之间的切换

    啥也不说了 直接上代码 import QtQuick 2 5 import QtQuick Controls 1 4 import QtQuick Window 2 0 ApplicationWindow id idMainWindow v
  • 美的年营收3412亿:净利286亿 何享健控制31.5%股权

    雷递网 雷建平 5月4日报道 美的日前公布年报 年报显示 美的2021年营收为3412亿元 较上年同期的2842亿元增长20 06 美的2021年净利为285 74亿元 较上年同期的272 23亿元增长4 96 扣非后净利为259 29亿元
  • oracle数据库中varchar类型字段中存放的有数字和汉字情况,比较大小问题解决

    如果你也正在为这种问题头疼 当你看到我这篇博客时 恭喜你 问题的解决方案来了 你头疼的问题可以解决了 这个问题是我在最近的项目中遇到的难题 上网查阅了很多资料 用什么平常使用的 lt lt gt gt 都没能解决问题 最后还是问了大牛 才解
  • SpringCloudGateway集成SpringDoc CORS问题

    SpringCloudGateway集成SpringDoc CORS问题 集成SpringDoc后 在gateway在线文档界面 请求具体的服务接口 报CORS问题 Failed to fetch Possible Reasons CORS
  • 2.5 使用SolidWorks转换STL格式为OBJ文件格式

    1 说明 使用SW进行三维模型建模 一般应用在机械工程领域中 将模型保存成STL格式后 转换为 obj文件 才能进一步转换为mesh文件 供QT中的3D控件进行使用 本文章记录一些格式转换步骤和关键点 以便参考 2 第一步 首先在SW软件界
  • easyui怎样实现textarea

    uqery easyui 本身没有实现textarea的封装 用的知识html元素 但是提供了textarea的验证器
  • cpp:State Pattern

    file Gold h brief State Pattern 状态模式 C 14 2023年5月29日 涂聚文 Geovin Du Visual Studio 2022 edit author geovindu date May 2023
  • PADS生成SMT坐标文件

    做SMT时 除了 gerber文件 外 还要提供 BOM文件 和 坐标文件 gerber文件 和 BOM文件 前面都有介绍过了 现在详细说一下生成 坐标文件 的方法 贴片厂家提供了操作教程 如下 所以 我们点开厂家的教程 按步骤操作即可 参
  • ImageMagick任意文件读取漏洞(CVE-2022-44268)

    0x00 前提 前几天爆出一个 ImageMagick 漏洞 可以造成一个任意文件读取的危害比较可观 最近有时间来复现学习一下 主要是影响的范围很大 很多地方都有这个问题 需要来学习一下 0x01 介绍 ImageMagick 是一个免费的
  • 粒子群算法(PSO)

    这几天看书的时候看到一个算法 叫粒子群算法 这个算法挺有意思的 下面说说我个人的理解 粒子群算法 PSO 是一种进化算法 是一种求得近似最优解的算法 这种算法的时间复杂度可能会达到O n 得到的结果不一定是最优解 往往已经很接近最优解了 最
  • 基于OFDM的水下图像传输通信系统matlab仿真

    目录 1 算法运行效果图预览 2 算法运行软件版本 3 部分核心程序 4 算法理论概述 5 算法完整程序工程 1 算法运行效果图预览 2 算法运行软件版本 matlab2022a 3 部分核心程序 function rx img func
  • 日本語 第二十二課

    森 毎晩 見 森先生每天晚上看电视 昨日 忙 昨天特别忙 簡単 电脑操作起来不简单 今日 曇 今天是阴天 明日 行 明天去打保龄球啊 明日 仕事 对不起 明天有工作啊 昨日 試験 昨天的考试怎么样啊 難 有一点难 但是都答上了 派手 这个领
  • 蓝桥杯题解 寻找2020 Java答案

    import java util ArrayList import java util Scanner public class Main static Scanner s new Scanner System in static Stri
  • QMap详解

    QMap详解 QMap是Qt的一个模板类 它是基于红黑树算法的一套字典 QMap
  • qml向Qt的C++传数组参数

    我们都知道qml和C 可以进行交互 但数据交互的过程中 一般只限于内置类型 比如int bool double等 如果是json或数组由C 传给qml qml是可以解析的 但如果是qml传数组给C 呢 该如何传参及解析数组参数呢 C 中通过
  • 【模板】高精度加高精度

    文章目录 1 数组 2 vector 推荐 下面这题是高精度加高精度的模板题 洛谷 P1601 A B Problem 高精 1 数组 include
  • 队列的概念及结构(内有成型代码可供CV工程师参考)

    目录 前言以及队列全部代码 CV工程师点这里 一 队列的概念 二 队列的实现 三 代码实现以及详细解释 1 初步介绍 2 定义结构体 以及栈内数据类型 3 初始化队列 4 队列的销毁 5 队列插入元素 尾插 6 删除队头元素 7 返回队头元