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

 template<typename T>
struct MinStackElement
{
T data;
T min;
}; template<typename T>
struct MinStack
{
MinStack() : pData(NULL), size(), top(){}
MinStackElement<T>* pData;
int size;
int top;
}; template<typename T>
void MinStackInitialize(MinStack<T>& s, int maxSize)
{
MinStackFree(s);
s.pData = (MinStackElement<T>*)malloc(maxSize*sizeof(MinStackElement<T>));
memset(s.pData, , maxSize*sizeof(MinStackElement<T>));
s.size = maxSize;
s.top = ;
} template<typename T>
void MinStackFree(MinStack<T>& s)
{
if (s.pData)
{
free(s.pData);
s.pData = nullptr;
} s.size = ;
s.top = ;
} template<typename T>
void MinStackPush(MinStack<T>& s, T data)
{
if (s.size == )
{
printf("Stack is not initialized.\n");
return;
} if (s.top == s.size)
{
printf("Stack is full.\n");
return;
} s.pData[s.top].data = data;
s.pData[s.top].min = (s.top == ? data : s.pData[s.top - ].min);
if (s.pData[s.top].min > data)
{
s.pData[s.top].min = data;
} wcout << L"stack push " << data << endl;
s.top++;
} template<typename T>
T MinStackPop(MinStack<T>& s)
{
if (s.top == )
{
printf("Stack is empty.\n");
return -;
} T data = s.pData[--s.top].data;
wcout << L"stack pop " << data << endl; return data;
} template<typename T>
T MinStackGetMin(const MinStack<T>& s)
{
if (s.top == )
{
printf("Stack is empty.\n");
return ;
} T min = s.pData[s.top - ].min;
printf("Min :%d\n", min); return min;
} int _tmain(int argc, _TCHAR* argv[])
{
int min = ;
MinStack<int> s; MinStackPush(s, ); MinStackInitialize(s, );
MinStackPush(s, );
MinStackPush(s, );
MinStackPush(s, );
MinStackPush(s, );
MinStackPop(s);
MinStackGetMin(s);
MinStackPush(s, );
MinStackPush(s, );
MinStackPush(s, ); MinStackPop(s); MinStackPush(s, );
MinStackPush(s, ); MinStackGetMin(s); MinStackPop(s);
MinStackGetMin(s);
MinStackPop(s);
MinStackGetMin(s);
MinStackPop(s);
MinStackGetMin(s);
MinStackPop(s);
MinStackGetMin(s);
MinStackPop(s);
MinStackGetMin(s);
MinStackPop(s);
MinStackPop(s);
MinStackPop(s);
MinStackGetMin(s); MinStackFree(s); return ;
}

>test.exe
Stack is not initialized.
stack push 9
stack push 5
stack push 6
stack push 4
stack pop 4
Min :5
stack push 3
stack push 8
stack push 2
stack pop 2
stack push 7
stack push 1
Min :1
stack pop 1
Min :3
stack pop 7
Min :3
stack pop 8
Min :3
stack pop 3
Min :5
stack pop 6
Min :5
stack pop 5
stack pop 9
Stack is empty.
Stack is empty.

MS - 2 - 设计包含 min 函数的栈的更多相关文章

  1. 【编程题目】设计包含 min 函数的栈

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

  2. 面试经典-设计包含min函数的栈

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

  3. 设计包含min()函数的栈

    题目:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素.要求函数min.push以及pop的时间复杂度都是O(1). 分析:这是去年google的一道面试题. 我看到这道题目时,第一反应 ...

  4. 2.设计包含 min 函数的栈[StackWithMinValue]

    [题目]: 定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素.要求函数min.push以及pop的时间复杂度都是O(1). [解法一]: 使用一个辅助栈来保存最小元素,其栈顶元素为当前栈 ...

  5. 设计包含min函数的栈

    stack<pair<int, int>> sta; void push(int x) { int min_i; if(sta.empty()) { min_i = x; } ...

  6. 面试题之堆栈队列系列一:设计包含min函数的栈

    编译环境 本系列文章所提供的算法均在以下环境下编译通过. [算法编译环境]Federa 8,linux 2.6.35.6-45.fc14.i686 [处理器] Intel(R) Core(TM)2 Q ...

  7. 41. 包含min函数的栈

    包含min函数的栈 描述 设计一个支持push,pop,top等操作并且可以在O(1)时间内检索出最小元素的堆栈. push(x)–将元素x插入栈中 pop()–移除栈顶元素 top()–得到栈顶元素 ...

  8. 剑指Offer面试题:19.包含Min函数的栈

    一.题目:包含Min函数的栈 题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数.在该栈中,调用min.push及pop的时间复杂度都是O(1). 这里我们要实现的就是min ...

  9. 【面试题021】包含min函数的栈

    [面试题021]包含min函数的栈  MinStack.cpp: 1234567891011121314151617181920212223242526272829303132333435363738 ...

随机推荐

  1. c++宏使用总结【转】

    C/C++中宏总结C程序的源代码中可包括各种编译指令,这些指令称为预处理命令.虽然它们实际上不是C语言的一部分,但却扩展了C程序设计的环境. ANSI标准定义的C语言预处理程序包括下列命令:  #de ...

  2. ayase系列

    [冒个泡]技能视觉效果の自定义 by ayase [11-09 V2.4]任务数量转换属性点的lua脚本 [335]瞎倒腾的item.dbc生成工具..

  3. 【HDU1257】最少拦截系统(贪心)

    最少拦截系统 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  4. 其他信息: 未找到源,不过,未能搜索部分或所有事件日志。 若要创建源,您需要用于读取所有事件日志的权限以确保新的源名称是唯一的。 不可访问的日志: Security。

    其他信息: 未找到源,不过,未能搜索部分或所有事件日志.  若要创建源,您需要用于读取所有事件日志的权限以确保新的源名称是唯一的.  不可访问的日志: Security. System.Diagnos ...

  5. 【深度学习】之Caffe的solver文件配置(转载自csdn)

    原文: http://blog.csdn.net/czp0322/article/details/52161759 今天在做FCN实验的时候,发现solver.prototxt文件一直用的都是mode ...

  6. Java 使用Memcache

    使用spymemcached.jar public class MemcachedJava { public static void main(String[] args) { try { // 连接 ...

  7. 让CSS布局更加直观:box-sizing

    让CSS布局更加直观:box-sizing 如果你写过CSS或者你接触过CSS,相信你一定对盒子模型一点都不陌生.CSS其中一个让人比较困惑的地方就在于它的盒子模型中关于高度和宽度的计算,别说那些初学 ...

  8. [PHP] - Laravel 5 的 Hello Wold

    吐槽一段 整了半天,Laravel下载麻烦得可以去死.先要安装composer,而composer又被共墙了,之后又要安装git,安装完git还要注册git,等等.... 最终放弃这种玩法,太恶心了. ...

  9. ubuntu 更换系统语言,Change System Language

    1.打开设置,打开“Language Support”. 2.如果列表中没有你的语言,点击“Install/Remove Language”,下拉选择你的语言,点击“Apply Changes”. 3 ...

  10. Python Q&A

    http://ilian.i-n-i.org/python-interview-question-and-answers/ http://www.geekinterview.com/Interview ...