博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《剑指offer》第三十题(包含min函数的栈)
阅读量:4655 次
发布时间:2019-06-09

本文共 2064 字,大约阅读时间需要 6 分钟。

// 面试题30:包含min函数的栈// 题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min// 函数。在该栈中,调用min、push及pop的时间复杂度都是O(1)。#include 
#include
#include
//定义一个模板类///template
class StackWithMin{public: StackWithMin() {} virtual ~StackWithMin() {}//虚析构函数 //T& top(); const T& top() const; void push(const T& value); void pop(); const T& min() const; bool empty() const; size_t size() const;private: std::stack
m_data; // 数据栈,存放栈的所有元素 std::stack
m_min; // 辅助栈,存放栈的最小元素};template
void StackWithMin
::push(const T& value)//模板类的构造函数,好好看看这一行怎么写的{ // 把新元素添加到辅助栈 m_data.push(value); // 当新元素比之前的最小元素小时,把新元素插入辅助栈里; // 否则把之前的最小元素重复插入辅助栈里 if (m_min.size() == 0 || value < m_min.top()) m_min.push(value); else m_min.push(m_min.top());}template
void StackWithMin
::pop()//删除顶节点{ assert(m_data.size() > 0 && m_min.size() > 0);//检测括号中的话是真的不 m_data.pop(); m_min.pop();}template
const T& StackWithMin
::min() const//返回辅助栈的顶点{ assert(m_data.size() > 0 && m_min.size() > 0); return m_min.top();}//template
T& StackWithMin
::top()//{// return m_data.top();//}template
const T& StackWithMin
::top() const//返回数据栈的顶点{ return m_data.top();}template
bool StackWithMin
::empty() const//检测数据栈空否{ return m_data.empty();}template
size_t StackWithMin
::size() const//返回数据栈size{ return m_data.size();}//测试代码///void Test(const char* testName, const StackWithMin
& stack, int expected){ if (testName != nullptr) printf("%s begins: ", testName); if (stack.min() == expected) printf("Passed.\n"); else printf("Failed.\n");}int main(int argc, char* argv[]){ StackWithMin
stack; stack.push(3); Test("Test1", stack, 3); stack.push(4); Test("Test2", stack, 3); stack.push(2); Test("Test3", stack, 2); stack.push(3); Test("Test4", stack, 2); stack.pop(); Test("Test5", stack, 2); stack.pop(); Test("Test6", stack, 3); stack.pop(); Test("Test7", stack, 3); stack.push(0); Test("Test8", stack, 0); system("pause"); return 0;}

 

转载于:https://www.cnblogs.com/CJT-blog/p/10492129.html

你可能感兴趣的文章
再看《操作系统》--处理机管理
查看>>
亚马逊的负载均衡(Amazon Load Balancing)
查看>>
Java学习之Comparable与Comparator的区别
查看>>
ASP:Checkbox验证非空的一种方法
查看>>
[CQOI2013]新Nim游戏 线性基
查看>>
我的成就故事
查看>>
VB6.0 API 累计
查看>>
第十周学习进度博客
查看>>
Ecshop 最小起订量如何设置
查看>>
不使用其他变量实现两变量互换
查看>>
bcp功能
查看>>
xcode项目打不开:incompatible project version问题
查看>>
学习网站
查看>>
C#4.0新特性dynamic\可选参数、命名参数
查看>>
使用免费SSL证书让网站支持HTTPS访问
查看>>
第5章 使用MUI与H5+构建移动端app
查看>>
poj 2528 Mayor's posters (线段树+染色)
查看>>
eclipse中跳转到其它函数方法后如何快速返回原处
查看>>
第三次作业
查看>>
javascript相关知识
查看>>