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

队列-链式描述(C++)

定义

使用链表描述队列时,通常包含以下几个基本要素:

  1. 队头指针(Front Pointer):指向队列中第一个(即最早进入队列的)元素的节点。
  2. 队尾指针(Rear Pointer):指向队列中最后一个(即最近进入队列的)元素的节点。
  3. 节点(Node):每个节点包含数据域和指向下一个节点的指针。

队列的基本操作包括:

  • 入队:在队尾添加新元素。
  • 出队:移除队头元素。
  • 查看队头元素:获取队头元素但不移除它。
  • 检查队列是否为空:判断队头指针是否为空或者判断size是否为0。

抽象类queue

template<typename T>
class queue
{
public:virtual   ~queue(){}virtual bool empty() const = 0;virtual int size() const = 0;virtual T& font() const = 0;virtual T& back() const = 0;virtual void push(const T& theElement) const = 0;virtual void pop() = 0;
};

派生类linkQueue

template<typename T>
class linkQueue : public queue<T>
{
public:linkQueue();~linkQueue();bool empty() const;int size() const;T &font() const;T &back() const;void push(const T &theElement);void pop();private:linkNode<T>* fontNode;linkNode<T>* backNode;int queueSize;
};
template<typename T>
linkQueue<T>::linkQueue()
{fontNode = nullptr;backNode = nullptr;queueSize = 0;
}template<typename T>
linkQueue<T>::~linkQueue()
{while(!empty()){pop();}
}template<typename T>
bool linkQueue<T>::empty() const
{return queueSize == 0;
}template<typename T>
int linkQueue<T>::size() const
{return queueSize;
}template<typename T>
T &linkQueue<T>::font() const
{assert(fontNode != nullptr);return *fontNode;
}template<typename T>
T &linkQueue<T>::back() const
{assert(backNode != nullptr);return *backNode;
}template<typename T>
void linkQueue<T>::push(const T &theElement)
{auto newNode = new linkNode<T>(theElement,nullptr);if(queueSize == 0){fontNode = newNode;}else{backNode->next = newNode;}backNode = newNode;queueSize++;}template<typename T>
void linkQueue<T>::pop()
{assert(queueSize > 0);auto nextNode = fontNode->next;delete  fontNode;fontNode = nextNode;queueSize--;
}

http://www.lryc.cn/news/495551.html

相关文章:

  • Kali Linux使用Netdiscover工具的详细教程
  • arkTS:使用ArkUI实现用户信息的持久化管理与自动填充(PersistentStorage)
  • IntelliJ+SpringBoot项目实战(二十)--基于SpringSecurity实现Oauth2服务端和客户端
  • 如何实现剪裁功能
  • LeetCode 动态规划 爬楼梯
  • Java 工厂模式:深度解析与应用指南
  • HTML5系列(5)-- SVG 集成详解
  • 深度学习常见数据集处理方法
  • 1180 - 【入门】数字出现次数
  • C++20: 像Python一样split字符串
  • Unity3D UI 嵌套滚动视图
  • 你还没有将 Siri 接入GPT对话功能吗?
  • _C#_串口助手_字符串拼接缺失问题(未知原理)
  • 浅析大数据时代下的网络安全
  • Mysql数据库基础篇笔记
  • rabbitmq原理及命令
  • React进阶面试题(四)
  • 24/12/1 算法笔记<强化学习> 创建Maze交互
  • Linux驱动开发(10):I2C子系统–mpu6050驱动实验
  • 《装甲车内气体检测“神器”:上海松柏 K-5S 电化学传感器模组详解》
  • 如何将多个JS文件打包成一个JS文件?
  • 100个python经典面试题详解(新版)
  • C#初阶概念理解
  • node.js基础学习-url模块-url地址处理(二)
  • 算法与数据结构(1)
  • FTP介绍与配置
  • SQL面试题——抖音SQL面试题 最近一笔有效订单
  • 【线程】Java多线程代码案例(1)
  • go使用mysql实现增删改查操作
  • 【Rust】unsafe rust入门