队列的实现(使用C语言)

完整代码链接:DataStructure: 基本数据结构的实现。 (gitee.com)

目录

一、队列的概念:

二、队列的实现:

使用链表实现队列: 

1.结构体设计:

2.初始化:

3.销毁:

4.入队:

5.出队:

6.获取队头数据:

7.获取队尾数据:

8.判空:

9.查看队列长度:


一、队列的概念:

队列是一种特殊的线性表,其只允许在一端执行插入数据操作,在另一端执行删除数据操作。队列中的数据元素遵循先进先出 FIFO(First In First Out) 原则

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

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

二、队列的实现:

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

使用链表实现队列: 

1.结构体设计:

typedef int QueueDataType;typedef struct QueueNode//队列里单个结点的设计
{struct QueueNode* _next;QueueDataType _data;
}QueueNode;typedef struct Queue//队列结构体的设计
{QueueNode* _head;QueueNode* _tail;
}Queue;

2.初始化:

void QueueInit(Queue* pq)
{assert(pq);//队列内还没有数据pq->_head = NULL;pq->_tail = NULL;
}

3.销毁:

void QueueDestory(Queue* pq)
{assert(pq);QueueDataType* tmp = NULL;//指向要被释放的结点while (pq->_head != NULL){tmp = pq->_head;pq->_head = pq->_head->_next;free(tmp);}pq->_tail = NULL;//当队列里所有结点都被释放时,pq->_tail所指向的结点也被释放了
}

4.入队:

void QueuePush(Queue* pq, QueueDataType x)
{assert(pq);QueueNode* newNode = (QueueNode*)malloc(sizeof(QueueNode));if (newNode == NULL){printf("内存不足\n");exit(-1);}newNode->_data = x;newNode->_next = NULL;if (pq->_head == NULL)//队列里没有数据{pq->_head = pq->_tail = newNode;}else{pq->_tail->_next = newNode;pq->_tail = newNode;}
}

5.出队:

void QueuePop(Queue* pq)
{assert(pq);assert(pq->_head);QueueNode* next = pq->_head->_next;free(pq->_head);pq->_head = next;if (pq->_head == NULL)//当没有了数据{pq->_tail = NULL;}
}

6.获取队头数据:

QueueDataType QueueFront(Queue* pq)
{assert(pq);assert(pq->_head);return pq->_head->_data;
}

7.获取队尾数据:

QueueDataType QueueBack(Queue* pq)
{assert(pq);assert(pq->_tail);return pq->_tail->_data;
}

8.判空:

bool QueueEmpty(Queue* pq)
{assert(pq);return pq->_head == NULL ? 1 : 0;
}

9.查看队列长度:

int QueueSize(Queue* pq)
{assert(pq);QueueNode* cur = pq->_head;int size = 0;while (cur != NULL){size++;cur = cur->_next;}return size;
}

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

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

相关文章

【数据结构】顺序表专题详解(带图解析)

最好的时光,在路上;最好的生活,在别处。独自上路去看看这个世界,你终将与最好的自己相遇。💓💓💓 目录 •🌙说在前面 🍋知识点一:什么是数据结构 • 🌰1.什…

【MySQL】SQL基本知识点DDL(1)

目录 1.SQL分类: 2.DDL-数据库操作 3.DDL-表操作-创建 4.DDL-表操作-查询 5.DDL-表操作-数据类型 6.DDL-表操作-修改 1.SQL分类: 2.DDL-数据库操作 3.DDL-表操作-创建 注意:里面的符号全部要切换为英文状态 4.DDL-表操作-查询 5.DDL…

NLP算法工程师技术栈

NLP算法工程师技术栈全览 随着人工智能和机器学习的迅猛发展,自然语言处理(NLP)成为了当下最为热门的领域之一。作为NLP算法工程师,掌握一套完整的技术栈对于高效、准确地完成NLP任务至关重要。本文将为你详细介绍NLP算法工程师需…

『SD』零基础快速搭建Stable Diffusion(Windows版)(附安装包)

点赞 关注 收藏 学会了 本文简介 本文介绍如何在 Windows 安装 Stable Diffusion WebUI,不需要懂代码,只要跟着本文一步步操作就能在你电脑用AI绘画了。 只需3步: 安装 Python ,版本需要大于 3.10安装 Stable Diffusion We…

GA-CNN-LSTM多输入时序预测|遗传算法-卷积-长短期神经网络|Matlab

目录 一、程序及算法内容介绍: 基本内容: 亮点与优势: 二、实际运行效果: 三、算法介绍: 四、完整程序下载: 一、程序及算法内容介绍: 基本内容: 本代码基于Matlab平台编译&am…

3月笔记本电脑行业线上市场销售数据分析

笔记本电脑市场在过去几年中经历了起伏,但总体上呈现出稳定增长的态势。特别是随着远程办公、在线学习等需求的增加,以及消费者对于便携性、高性能等方面的追求,笔记本电脑市场得到了进一步的发展。 据鲸参谋数据统计,线上平台&a…

力扣HOT100 - 739. 每日温度

解题思路&#xff1a; 单调栈 class Solution {public int[] dailyTemperatures(int[] temperatures) {int length temperatures.length;int[] ans new int[length];Deque<Integer> stack new LinkedList<>();for (int i 0; i < length; i) {int temperatu…

七、Redis三种高级数据结构-HyperLogLog

Redis HyperLogLog是用来做基数统计的算法&#xff0c;HyperLogLog在优点是&#xff0c;在输入的元素的数量或者体积非常大时&#xff0c;计算基数占用的空间总是固定的、并且非常小。在Redis里每个HyperLogLog键只需花费12KB内存&#xff0c;就可以计算接近 264 个元素的基数。…

【Centos7 】Centos7yum报错:another app is currently holding the yum lock;解决方案

Centos7 yum报错:another app is currently holding the yum lock;waiting for it to exit 大家好 我是寸铁&#x1f44a; 总结了一篇Centos7 yum报错:another app is currently holding the yum lock;waiting for it to exit✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 报错 解…

【JVM】从三种认知角度重识JVM

目录 JVM概述 JVM主要功能 虚拟机是Java平台无关的保障 JVM概述 JVM&#xff1a;Java Virtual Machine,也就是Java虚拟机。 虚拟机&#xff1a;通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的计算机系统&#xff08;物理上不存在&#xff09;。 JVM通…

书生作业:XTuner

作业链接&#xff1a; https://github.com/InternLM/Tutorial/blob/camp2/xtuner/homework.md xtuner: https://github.com/InternLM/xtuner 环境配置 首先&#xff0c;按照xtuner的指令依次完成conda环境安装&#xff0c;以及xtuner库的安装。 然后&#xff0c;我们开始尝试…

Android解放双手的利器之ViewBinding

文章目录 1. 背景2. ViewBinding是什么3. 开启ViewBinding功能4. 生成绑定类5. 使用ViewBinding5.1Activity 中使用5.2 Fragment 中使用5.3 ViewHolder 中使用 6. ViewBinding的优点7. 与 dataBinding 对比 1. 背景 写代码最繁琐的是什么&#xff1f;重复的机械操作。我们刚接…