当前位置: 首页 > news >正文

数据结构 - 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;}};

相关文章:

  • 《刺客信条:英灵殿》找不到emp.dll文件的多种解决方法,亲测有效
  • java 代码块
  • 【C++】main函数及返回值深度解析
  • antd中Select大数据分页触底刷新处理优化
  • 虚拟纪念展馆建设的重大意义:重新定义纪念活动的未来
  • C++——探索智能指针的设计原理
  • 深入Ruby缓存:掌握Memcached的使用艺术
  • 【ARM系列】GIC600AE功能安全
  • modify filename
  • 【有为己之心方能克己】
  • 推广旅游卡项目,一个月创收十几万,为何说旅游卡项目堪称盈利利器?
  • Oracle JDK 与 OpenJDK:如何选择及其区别
  • Echarts-饼图
  • BASH and SH in SHELL scripts
  • 【办公软件使用分享—Excel篇】实用技巧 一学就会
  • [case10]使用RSQL实现端到端的动态查询
  • 〔开发系列〕一次关于小程序开发的深度总结
  • Apache Pulsar 2.1 重磅发布
  • JS字符串转数字方法总结
  • PHP变量
  • 包装类对象
  • 观察者模式实现非直接耦合
  • 和 || 运算
  • 面试遇到的一些题
  • 我从编程教室毕业
  • ​你们这样子,耽误我的工作进度怎么办?
  • #APPINVENTOR学习记录
  • #if和#ifdef区别
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (12)Hive调优——count distinct去重优化
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (转)我也是一只IT小小鸟
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .net后端程序发布到nignx上,通过nginx访问
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • @FeignClient注解,fallback和fallbackFactory
  • @Service注解让spring找到你的Service bean
  • @我的前任是个极品 微博分析
  • [ element-ui:table ] 设置table中某些行数据禁止被选中,通过selectable 定义方法解决
  • [120_移动开发Android]008_android开发之Pull操作xml文件
  • [android]-如何在向服务器发送request时附加已保存的cookie数据
  • [BJDCTF2020]The mystery of ip1
  • [C# 网络编程系列]专题六:UDP编程
  • [go] 策略模式
  • [java后端研发]——文件上传与下载(2种方式)
  • [java进阶]——方法引用改写Lambda表达式
  • [LeetCode]: 145: Binary Tree Postorder Traversal
  • [linux] Key is stored in legacy trusted.gpg keyring
  • [NLP] LlaMa2模型运行在Mac机器
  • [OpenAI]继ChatGPT后发布的Sora模型原理与体验通道
  • [PHP] 算法-字符串的左循环的PHP实现