news 2026/1/12 0:00:37

stack queue

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
stack queue

模拟实现:

namespace bit { #include<deque> template<class T, class Con = deque<T>> class stack { public: stack() {} void push(const T& x) { _c.push_back(x); } void pop() { _c.pop_back(); } T& top() { return _c.back(); } const T& top()const { return _c.back(); } size_t size()const { return _c.size(); } bool empty()const { return _c.empty(); } private: Con _c; }; template<class T, class Con = deque<T>> class queue { public: queue() {} void push(const T& x) { _c.push_back(x); } void pop() { _c.pop_front(); } T& back() { return _c.back(); } const T& back()const { return _c.back(); } T& front() { return _c.front(); } const T& front()const { return _c.front(); } size_t size()const { return _c.size(); } bool empty()const { return _c.empty(); } private: Con _c; }; };

priority_queue:

namespace bit { //函数对象 less template<class T> struct less { bool operator()(const T& left, const T& right) { return left < right; } }; //函数对象 greater template<class T> struct greater { bool operator()(const T& left, const T& right) { return left > right; } }; namespace bit { //函数对象 less template<class T> struct less { bool operator()(const T& left, const T& right) { return left < right; } }; //函数对象 greater template<class T> struct greater { bool operator()(const T& left, const T& right) { return left > right; } }; template <class T, class Container = std::vector<T>, class Compare = less<T> > class priority_queue { public: //创建空的优先级队列 priority_queue():c() {} template <class InputIterator> priority_queue(InputIterator first, InputIterator last) :c(first, last) { //将c中的元素调整为堆的结构,默认为大堆 int count = c.size(); int root = ((count - 2) >> 1); for (; root >= 0; root--) AdjustDown(root); } bool empty() const { return c.empty(); } size_t size() const { return c.size(); } // 堆顶元素不允许修改,因为:堆顶元素修改可以会破坏堆的特性 const T& top() const { return c.front(); } void push(const T& x) { c.push_back(x); //push_heap(c.begin(), c.end(), comp); AdjustUp(c.size() - 1); } void pop() { if (empty()) return; std:swap(c.front(), c.back()); c.pop_back(); AdjustDown(0); } private: //向上调整 void AdjustUp(int child) { int parent = ((child - 1) >> 1); while (child) { if (Com(c[parent], c[child])) { std::swap(c[child], c[parent]); child = parent; parent = ((child - 1) >> 1); } else return; } } //向下调整 void AdjustDown(int parent) { int child = parent * 2 + 1; while (child < c.size()) { // 找以parent为根的较大的孩子 if (child + 1 < c.size() && Com(c[child], c[child+1])) child += 1; // 检测双亲是否满足情况 if (Com(c[parent], c[child])) { std::swap(c[child], c[parent]); parent = child; child = parent * 2 + 1; } else return; } } private: Container c; Compare Com; }; };
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/25 21:15:08

Mac电脑往U盘拷贝文件有同名的“._”开头的文件,怎么避免?

在Mac电脑上往U盘拷贝文件时&#xff0c;操作系统自动创建一些“._”开头的文件。这些文件称为AppleDouble文件&#xff0c;是Mac OS在非Mac格式的磁盘上存储额外的文件属性、资源分支等信息。 避免产生这些文件的方法有&#xff1a; 使用CleanMyDrive或DotCleaner等第三方应用…

作者头像 李华
网站建设 2026/1/3 2:15:59

智能体完全指南:从理论到实践,适合小白和程序员的AI学习宝典

本文系统介绍了智能体的定义、类型及运行原理&#xff0c;详细阐述了从传统智能体到大语言模型驱动智能体的演进过程。通过PEAS模型和智能体循环解析了智能体的工作机制&#xff0c;并以智能旅行助手为例展示了实践方法。文章还探讨了智能体作为开发工具和自主协作者的两种应用…

作者头像 李华
网站建设 2025/12/27 8:35:41

如何用R语言完成高精度生态风险评估?这4个包你必须掌握

第一章&#xff1a;环境监测的 R 语言生态风险评估在环境科学领域&#xff0c;R 语言因其强大的统计分析与可视化能力&#xff0c;成为生态风险评估的重要工具。研究人员可利用其丰富的包生态系统对污染数据、物种分布及气候变量进行建模分析&#xff0c;从而识别潜在生态威胁。…

作者头像 李华
网站建设 2026/1/8 7:16:59

【Dify索引优化终极指南】:构建毫秒级视频帧检索系统的秘密武器

第一章&#xff1a;视频帧检索的 Dify 索引优化在处理大规模视频数据时&#xff0c;高效检索关键帧是构建智能视觉系统的基石。Dify 作为支持多模态索引与检索的框架&#xff0c;提供了对视频帧特征向量的结构化管理能力。通过对视频帧进行特征提取并建立分层索引结构&#xff…

作者头像 李华
网站建设 2026/1/4 11:54:30

Dify与Spring AI版本兼容性全解析(附官方支持矩阵+实测数据)

第一章&#xff1a;Dify与Spring AI版本兼容性概述 在构建现代化AI驱动的应用程序时&#xff0c;Dify与Spring AI的集成成为关键环节。两者之间的版本兼容性直接影响开发效率、系统稳定性以及功能完整性。由于Dify作为低代码AI应用开发平台&#xff0c;依赖于后端AI框架提供的语…

作者头像 李华