数据结构 - C/C++ - 队列

  • 公开视频 -> 链接点击跳转公开课程
  • 博客首页 -> 链接点击跳转博客主页

结构特性

  • 队列是一种特殊的线性表,限制在表的一端进行插入、在表的另一端进行删除。

    • 表中允许插入的一端称为队尾(rear) - 进队 | 入队

    • 表中允许删除的一端称为队头(front) - 退队 | 出队

  • 先进先出(first in first out - FIFO) - 队列中先进入的元素最先出队。

        

结构实现

  • 静态队列 - 基于数组 - 顺序存储

  • 动态队列 - 基于链表 - 链式存储
     

结构容器

  • queue

  • deque

结构设计

  • 顺序存储

  • 链式存储

class Node
{
public:int value;Node* Next;Node(int Num) : value(Num), Next(nullptr) {}
};class Queue
{
public:Node* front;Node* rear;int size;public:Queue() : front(nullptr) , rear(nullptr), size(0) {}~Queue(){Clear();}public:int GetSize(){return size;}bool IsEmpty(){return size == 0;}void Clear(){Node* node = front;while (node){Node* temp = node;node = node->Next;delete temp;}}public:void Push(int value){Node* node = new Node(value);if (front == nullptr){front = node;rear = node;}else{rear->Next = node;rear = node;}size++;}int Pop(){if (IsEmpty()) return 0;int RetValue = GetFront();Node* node = front;front = front->Next;delete node;size--;return RetValue;}int GetFront(){if (this->front){return this->front->value;}return -1;}int GetRear(){if (this->rear){return this->rear->value;}return - 1;}
};
  • 双端队列
#include <iostream>class Node
{
public:int value;Node* Prev;Node* Next;Node(int value) : value(value), Prev(nullptr), Next(nullptr) {}
};class Deque
{
public:Node* front;Node* rear;int size;public:Deque(): front(nullptr), rear(nullptr), size(0) {}~Deque(){Node* node = front;while (node){Node* temp = node;node = node->Next;delete temp;}}public:int GetSize(){return this->size;}bool IsEmpty(){return this->size == 0;}public:void PushFornt(int value){Node* node = new Node(value);if (IsEmpty()){front = rear = node;}else{node->Prev = nullptr;node->Next = front;front->Prev = node;front = node;}size++;}void PushRear(int value){Node* node = new Node(value);if (IsEmpty()){front = rear = node;}else{node->Next = nullptr;node->Prev = rear;rear->Next = node;          rear = node;}size++;}int PopFront(){int Ret = 0;if (IsEmpty()){return -1;}else{Ret = this->front->value;Node* node = this->front->Next;if (node != nullptr){node->Prev = nullptr;}delete front;front = node;}size--;return Ret;}int PopRear(){int Ret = 0;if (IsEmpty()){return -1;}else{Ret = this->rear->value;Node* node = this->rear->Prev;if (node != nullptr){node->Next = nullptr;}delete rear;rear = node;}size--;return Ret;}int GetFront(){if (IsEmpty()){return -1;}return front->value;}int GetRear(){if (IsEmpty()){return -1;}return rear->value;}};

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

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

相关文章

C++ 快速行进方法(二维)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 假设给你一个将一个区域与另一个区域分开的界面,以及告诉你如何移动界面上每个点的速度F。下图中,黑色曲线将内部深蓝色与外部浅蓝色分开,黑色曲线的每个点都给出了速度F。此外,假设速度F始终为正,即前端始终向…

java面试课程-SpringIOC部分源码解析

1.SpringIOC的refresh源码解析 核心&#xff1a; 核心使用的是&#xff1a; 需要完成配置类的解析&#xff0c;各种BeanFactoryProcessor的注册。还有写国际化配置的初始化。Web容器的内部构造。 上面几个方法是refresh方法的内容。注意可以与applicationContext里的内容一起…

第十四章 路由器 OSPF 动态路由配置

实验目的 掌握 OSPF 协议的配置方法&#xff1a; 掌握查看通过动态路由协议 OSPF 学习产生的路由&#xff1b; 熟悉广域网线缆的链接方式&#xff1b; 实验背景 假设校园网通过一台三层交换机连到校园网出口路由器上&#xff0c; 路由器再和校园外的另一台路由器连接。…

LLVM-编译器结构

一&#xff1a;前端 #include <iostream> #include <algorithm> #include "llvm/ADT/StringRef.h" #include "llvm/Support/MemoryBuffer.h"class Lexer;class Token{friend class Lexer; public:enum TokenKind: unsigned short{eoi, //end …

【0299】Postgres内核之哈希表(Hash Tables)

0. 哈希表(Hash Tables) 哈希表是 一种用于存储键值对的数据结构。与使用索引号访问元素的基本数组不同,哈希表使用键来查找表条目。这使得数据管理对于用户来说更易于管理,因为按属性对数据条目进行分类比按它们在一个巨大的列表中的数量更容易。 在 C++ 中,我们将哈希…

B站大课堂-自动化精品视频(个人存档)

基础知识 工业通信协议 Modbus 施耐德研发&#xff0c;有基于以太网的 ModbusTCP 协议和使用 485/232 串口通信的 ModbusRTU/ASCII。 Modbus 协议面世较早、协议简洁高效、商用免费、功能灵活、实现简单&#xff0c;是目前应用最广泛的现场总线协议。 我的笔记里边有一些推荐…

89.格雷编码

题目描述 89. 格雷编码 n 位格雷码序列 是一个由 2n 个整数组成的序列&#xff0c;其中&#xff1a; 每个整数都在范围 [0, 2n - 1] 内&#xff08;含 0 和 2n - 1&#xff09;第一个整数是 0一个整数在序列中出现 不超过一次每对 相邻 整数的二进制表示 恰好一位不同 &…

【error】针对Windows 11家庭版用户启用组策略编辑器

启用组策略编辑器&#xff1a; 如果使用的是Windows 11家庭版&#xff0c;可以通过以下步骤启用组策略编辑器&#xff1a; 新建一个文本文件&#xff0c;将扩展名改为**.bat**&#xff08;如EnableGPEdit.bat&#xff09;。 在文件中输入以下批处理代码&#xff08;根据系统实际…

Linux源码阅读笔记10-进程NICE案例分析2

set_user_nice set_user_nice函数功能&#xff1a;设置某一进程的NICE值&#xff0c;其NICE值的计算是根据进程的静态优先级&#xff08;task_struct->static_prio&#xff09;&#xff0c;直接通过set_user_nice函数更改进程的静态优先级。 内核源码 void set_user_nice…

wpf界面和net web界面的相同和不同点

WPF&#xff08;Windows Presentation Foundation&#xff09;界面和.NET Web界面的相同点和不同点可以从多个维度来进行分析和归纳。以下是对这两个界面技术的详细比较&#xff1a; 相同点 .NET框架支持&#xff1a; WPF和.NET Web界面&#xff08;如ASP.NET&#xff09;都构建…

黄子韬vs徐艺洋卫生间风波

【热搜爆点】黄子韬VS徐艺洋&#xff1a;卫生间风波背后的职场与友情界限探讨在这个充满欢笑与意外的综艺时代&#xff0c;《跟我出游吧》再次以它独有的魅力&#xff0c;引爆了一个既尴尬又引人深思的话题——“黄子韬要上徐艺洋的卫生间&#xff1f;”这不仅仅是一句简单的调…

汽车IVI中控开发入门及进阶(三十四):i.MX linux BSP

开发板: 汽车IVI中控开发入门及进阶(三十三):i.MX linux开发之开发板-CSDN博客 linux 开发项目: 汽车IVI中控开发入门及进阶(三十二):i.MX linux开发之Yocto-CSDN博客 前言: 有了开发板,linux BSP编译项目yocto,接下来就可以在i.MX平台上构建和安装i.MX Linux …

[Labview] Excel读表 输出表单中选中的单元格内容

简而言之 循环外 是读取excel文件&#xff0c;并写入labview表格 循环内 会输出表格中被选中的单元格内容 调用节点&#xff1a;点到行列 事件结构中的另两个事件 如果需要改写单元格内容并储存替换Excel&#xff0c;可见这篇&#xff1a;[Labview] 改写表格内容并储存覆盖Ex…

k8s 中间件

1. zookeeper 是的&#xff0c;Zookeeper 和 Kafka 经常一起使用&#xff0c;Zookeeper 在 Kafka 中扮演了关键角色。以下是 Zookeeper 和 Kafka 在实际项目中的结合使用及其作用的详细说明。 项目背景 假设我们有一个分布式数据处理系统&#xff0c;该系统需要高吞吐量的实…

Java知识点整理 17 — 消灭魔法值

一. 什么是魔法值 魔法值通常是指在编写代码时凭空出现的数字或字符串&#xff0c;如果没有注释&#xff0c;无法直接判断其代表的含义&#xff0c;必须通过分析代码上下文才能明白。 魔法值会严重降低代码可读性与可维护性。在一个周期相对较长的项目中&#xff0c;很可能后…

隐私信息管理体系认证:守护个人信息,筑牢隐私防线

在数字化浪潮汹涌的当下&#xff0c;个人信息安全问题愈发凸显其重要性。随着互联网技术的飞速发展&#xff0c;我们的隐私信息如同裸露在阳光下的沙滩&#xff0c;稍有不慎就可能被不法分子窃取或滥用。因此&#xff0c;构建一个完善的隐私信息管理体系&#xff0c;成为了保障…

UI(四)布局

文章目录 10、Navigator——路由器组件11、Pannel——可滑动面板12、Refresh——刷新组件13、RelativeContainer——相对布局组件14、Scroll——可滚动容器15、SideBarContainer——侧边栏容器16、Stack——堆叠容器17、Swiper——滑动块视图容器18、Tabs和TabContent——页签和…

vue为啥监听不了@scroll

哈喽 大家好 我在vue中写了一个滚动scroll监听事件 然后滚动鼠标 发现进不来我的方法断点 原因&#xff1a; 事件绑定错误&#xff1a;确保你使用scroll正确绑定到了可滚动容器上。 事件冒泡&#xff1a;滚动事件可能被封装在某些组件内部&#xff0c;导致不会冒泡到父元素上…

鸿蒙开发Ability Kit(程序访问控制):【使用粘贴控件】

使用粘贴控件 粘贴控件是一种特殊的系统安全控件&#xff0c;它允许应用在用户的授权下无提示地读取剪贴板数据。 在应用集成粘贴控件后&#xff0c;用户点击该控件&#xff0c;应用读取剪贴板数据时不会弹窗提示。可以用于任何应用需要读取剪贴板的场景&#xff0c;避免弹窗…

Android中的适配器,你知道是做什么的吗?

&#x1f604;作者简介&#xff1a; 小曾同学.com,一个致力于测试开发的博主⛽️&#xff0c;主要职责&#xff1a;测试开发、CI/CD&#xff0c;日常还会涉及Android开发工作。 如果文章知识点有错误的地方&#xff0c;还请大家指正&#xff0c;让我们一起学习&#xff0c;一起…