news 2026/6/12 17:49:47

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进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 13:15:46

从开发到生产:构建全链路可信Agent的镜像签名体系

第一章&#xff1a;从开发到生产&#xff1a;构建全链路可信Agent的镜像签名体系在现代云原生架构中&#xff0c;Agent作为连接控制平面与工作负载的核心组件&#xff0c;其安全性直接影响整个系统的可信边界。为确保从开发、构建到部署全流程中Agent镜像的完整性与来源可信&am…

作者头像 李华
网站建设 2026/6/12 16:53:25

R语言农业产量模型评估,掌握这4个关键步骤让你少走10年弯路

第一章&#xff1a;R语言农业产量模型评估概述在现代农业数据分析中&#xff0c;利用统计建模预测作物产量已成为优化资源配置与提升生产效率的关键手段。R语言凭借其强大的统计计算能力和丰富的可视化工具&#xff0c;成为农业科研人员构建和评估产量模型的首选平台。通过整合…

作者头像 李华
网站建设 2026/6/10 23:28:48

第15章 标准IO:重定向和管道

从一开始&#xff0c;Unix 命令行就具备一些特殊的东西&#xff0c;使其区别与其他操作系统&#xff0c;即所谓的的 Unix工具箱&#xff1a;每种 Unix 和 Linux 系统都拥有的大量程序。本章将解释 Unix 工具箱之后隐藏的设计准则&#xff0c;然后师范如何将基本的构建块组合成适…

作者头像 李华
网站建设 2026/6/10 16:50:53

BGP实验基础配置

实验拓扑实验要求 1、AS1中存在两个环回&#xff0c;一个地址为192.168.1.0/24&#xff0c;该地址不能在任何协议中宣告AS3中存在两个环回&#xff0c;一个地址为192.168.2.0/24&#xff0c;该地址不能在任何协议中宣告&#xff0c;最终要求这两个环回可以ping通2、R1-R8的建邻…

作者头像 李华
网站建设 2026/6/2 17:50:28

揭秘空间转录组批次效应:如何用R语言实现精准校正与可视化

第一章&#xff1a;揭秘空间转录组批次效应&#xff1a;挑战与意义空间转录组技术的快速发展为研究基因表达在组织空间中的分布提供了前所未有的分辨率。然而&#xff0c;实验过程中不可避免地引入批次效应——即不同实验批次间的技术变异&#xff0c;可能掩盖真实的生物学差异…

作者头像 李华
网站建设 2026/6/12 8:43:17

好写作AI|告别格式炼狱:你的论文如何一秒切换“学术皮肤”

在APA、MLA、国标间反复横跳&#xff1f;被参考文献格式逼疯&#xff1f;你的“智能排版师”已就位&#xff01;各位在格式深渊里挣扎的学术人&#xff0c;是否经历过这样的绝望&#xff1a;论文内容明明不错&#xff0c;却因格式问题被导师打回重改&#xff1b;投稿前夜还在手…

作者头像 李华