设计包含 min 函数的栈(栈)
定义栈的数据结构,要求添加一个 min 函数,能够得到栈的最小元素。
要求函数 min、push 以及 pop 的时间复杂度都是 O(1)。

 #include <algorithm>
#include <iostream>
#include <exception>
#include <string> class illegalParameterValue
{
public:
illegalParameterValue():errorMessage("Illegal parameter value"){}
illegalParameterValue(const char* theMessage){ errorMessage = theMessage;}
std::string errorMessage;
}; template<typename T>
struct minStackElement{
T element;
T min;
}; template<typename T>
class minStack{
private:
int top;
int size;
minStackElement<T>* arrayStack;
public:
minStack(int initCapacity)
{
try{
if(initCapacity < )
throw illegalParameterValue("initCapacity must greater than 0");
}catch(illegalParameterValue& e){
std::cout << "initCapacity has been made to be 1" << std::endl;
initCapacity = ;
}
arrayStack = new minStackElement<T>[initCapacity];
size = initCapacity;
top = -;
}
~minStack()
{
delete [] arrayStack;
}
void push(T x)
{
minStackElement<T> e;
e.element = x;
if(top == -){
e.min = x;
}else if(x < arrayStack[top].min){
e.min = x;
}else{
e.min = arrayStack[top].min;
}
if(top == size-)
{
minStackElement<T>* temp = arrayStack;
arrayStack = new minStackElement<T>[*size];
std::copy(temp,temp+size-,arrayStack);
delete [] temp;
}
arrayStack[++top] = e;
} void pop()
{
if(top == -)
throw illegalParameterValue("the stack is empty");
top--;
} T min()
{
return arrayStack[top].min;
}
};

minStack实现的更多相关文章

  1. LintCode MinStack

    Implement a stack with min() function, which will return the smallest number in the stack. It should ...

  2. MinStack

    Design a stack that supports push, pop, top, and retrieving the minimum element in constant time. pu ...

  3. leetcode算法学习----155. 最小栈(MinStack )

    下面题目是LeetCode算法155题: https://leetcode.com/problems/min-stack/ 题目1:最小函数min()栈 设计一个支持 push,pop,top 操作, ...

  4. [LeetCode] 155. minStack 设计最小栈

    注意:getMin()时间复杂度为O(1) 最原始的方法: class MinStack(object): def __init__(self): """ initial ...

  5. [LeetCode] Min Stack 最小栈

    Design a stack that supports push, pop, top, and retrieving the minimum element in constant time. pu ...

  6. BUG-FREE-For Dream

    一直直到bug-free.不能错任何一点. 思路不清晰:刷两天. 做错了,刷一天. 直到bug-free.高亮,标红. 185,OA(YAMAXUN)--- (1) findFirstDuplicat ...

  7. 二刷Cracking the Coding Interview(CC150第五版)

    第18章---高度难题 1,-------另类加法.实现加法. 另类加法 参与人数:327时间限制:3秒空间限制:32768K 算法知识视频讲解 题目描述 请编写一个函数,将两个数字相加.不得使用+或 ...

  8. (lintcode全部题目解答之)九章算法之算法班题目全解(附容易犯的错误)

    --------------------------------------------------------------- 本文使用方法:所有题目,只需要把标题输入lintcode就能找到.主要是 ...

  9. [ACM训练] 算法初级 之 数据结构 之 栈stack+队列queue (基础+进阶+POJ 1338+2442+1442)

    再次面对像栈和队列这样的相当基础的数据结构的学习,应该从多个方面,多维度去学习. 首先,这两个数据结构都是比较常用的,在标准库中都有对应的结构能够直接使用,所以第一个阶段应该是先学习直接来使用,下一个 ...

随机推荐

  1. python中GUI使用小结

    1 先来个简单的 import wx app = wx.App() frm = wx.Frame(None, title="Hello World") frm.Show() app ...

  2. TSQL--使用CTE完成递归查询

    CREATE TABLE TB001( CategoryId INT PRIMARY KEY, ParentCategoryId INT, CategoryName NVARCHAR(200))GO ...

  3. 今天踩过的坑——structs和mysql

    1 在action中写了interceptor-ref就不会用defaultStack啦.得自己补上2 继承CookiesAware是不够的,得在action中配置一下 <interceptor ...

  4. 使用Hbuilder将自己app发布到App Store(一)

    1.如果你有mac系统那请看第二步. 首先需要一台虚拟机,还需要个插件要不没法装,都在这链接里面了 链接:https://pan.baidu.com/s/1N_pWJWFk-EJILTXuFr6w5g ...

  5. 【Unity】Domina-Game总结与反思

    [Unity]Domina-Game总结与反思 2018/6/15 我总算是把物理课作业--Domina-Game给赶完了,这也算是我用Unity做的第一个游戏吧(不得不说我的脚本写的超烂的)...纪 ...

  6. 接口和抽象类的使用场景以及多类继承存在的问题(c#)

    我们首先来看下抽象class能发挥优势的使用场景. 假设有一个Cars基类,具体型号的Car继承该基类,并实现自己独有的属性或方法. public class Cars { public string ...

  7. NPOI 设置excel 边框

    https://blog.csdn.net/xxs77ch/article/details/50232343

  8. pageadmin CMS Sql Server2008 R2数据库安装教程

    sql sever数据库建议安装sql2008或以上版本,如果电脑上没有安装数据库,参考下面步骤安装. sql2008 r2下载地址:点击下载   提取码: wfb4 下载后点击安装文件,安装步骤如下 ...

  9. Android Preferences: How to load the default values when the user hasn't used the preferences-screen?

    在启动 preferences 之前,默认值并不能生效.第一次运行程序时候,默认值没生效,然后获取的 preferences 的值就是错误的. 解决办法是在程序开始时加一行代码使默认值生效. Pref ...

  10. Gogland使用 - 非常简单查看Go语言源代码全貌!

    Go语言也支持面向对象开发,不过和以往我们所使用的面向对象开发还是有不同,Go语言主张组合方式形成类的概念,在Go语言中,结构起到很大作用,如果用结构组合字段和方法,那么单纯在源代码中看,真的是费时费 ...