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

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; }; };
http://www.cnnetsun.cn/news/90111.html

相关文章:

  • 【安全专家亲授】私有化Dify的SSL配置秘诀:保障数据传输不被窃取
  • Vue3+JS 高级前端面试题
  • 海康威视智能工厂,是如何走向“领航”的?
  • 《深入昇腾底层:Ascend C 编程模型与高性能算子开发实战》
  • 实战 Ascend C:从零实现高性能自定义算子
  • 掌握这3种R包,轻松完成空间转录组细胞轨迹建模!
  • 【Dify Tesseract字体适配终极指南】:破解OCR识别失败的9大字体陷阱
  • Docker + 智能Agent日志管理新思路(仅限高级工程师掌握的3种架构模式)
  • 揭秘空间转录组细胞类型注释:如何用R语言精准识别每一种细胞
  • [吾爱大神原创工具] 电话号码过滤,号码排序-乱序,清除非手机号,消重,导出(依旧颜值高)
  • Dify平台Agent版本管理全解析:从入门到高可用架构设计
  • 为什么90%的生物信息分析师都在用R做RNA结构研究?真相令人震惊
  • 【稀缺资源】Dify + Tesseract 5.3多语言支持实现路径首次公开
  • 还在手动写Dify用例?Agent驱动自动化测试已成主流!
  • RSA 加密体制及其安全性分析
  • 【视频帧提取效率翻倍秘籍】:Dify帧率设置背后的黄金参数揭秘
  • 在C#上运行YOLOv11模型---CPU版
  • 关于uniapp vue2 canvas重绘元素节点时,提示cos of null相关异常警告,导致js线程崩溃,vue响应式丢失的问题
  • 【微服务稳定性提升利器】:基于Dify与Spring AI的异常熔断与恢复策略
  • concurrent hashmap原理,扩容,扩容时怎么保证线程安全?
  • 空间转录组降维必杀技:5步用R语言完成PCA、t-SNE与UMAP优化
  • 【R语言与量子计算加速新突破】:GPU如何将量子模拟效率提升10倍?
  • AWS专家Greg Coquillo提出的 6种LLM ORCHESTRATION PATTERNS解析
  • “.商标”不等同于商标权:企业做知识产权保护,别把“后缀名”当“确权证”
  • 面向削峰填谷的电动汽车多目标优化调度策略
  • 如何在30分钟内完成Dify与Spring AI的无缝部署?资深架构师亲授秘诀
  • 【Vue知识点总结】Vue中的namespaced命名空间详解
  • 告别单一生态限制,构建R-Python一体化可视化工作流
  • 论基于REST服务的Web应用系统设计
  • R语言在气象数据分析中的应用(相关性建模全攻略)