MS - 2 - 设计包含 min 函数的栈
定义栈的数据结构,要求添加一个 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 函数的栈的更多相关文章
- 【编程题目】设计包含 min 函数的栈
2.设计包含 min 函数的栈(栈)定义栈的数据结构,要求添加一个 min 函数,能够得到栈的最小元素.要求函数 min.push 以及 pop 的时间复杂度都是 O(1). 我的思路: 用一个额外的 ...
- 面试经典-设计包含min函数的栈
问题:设计包含min函数的栈(栈) 定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素. 要求函数min.push以及pop的时间复杂度都是O(1). 解答:push 和pop的时间复杂度 ...
- 设计包含min()函数的栈
题目:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素.要求函数min.push以及pop的时间复杂度都是O(1). 分析:这是去年google的一道面试题. 我看到这道题目时,第一反应 ...
- 2.设计包含 min 函数的栈[StackWithMinValue]
[题目]: 定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素.要求函数min.push以及pop的时间复杂度都是O(1). [解法一]: 使用一个辅助栈来保存最小元素,其栈顶元素为当前栈 ...
- 设计包含min函数的栈
stack<pair<int, int>> sta; void push(int x) { int min_i; if(sta.empty()) { min_i = x; } ...
- 面试题之堆栈队列系列一:设计包含min函数的栈
编译环境 本系列文章所提供的算法均在以下环境下编译通过. [算法编译环境]Federa 8,linux 2.6.35.6-45.fc14.i686 [处理器] Intel(R) Core(TM)2 Q ...
- 41. 包含min函数的栈
包含min函数的栈 描述 设计一个支持push,pop,top等操作并且可以在O(1)时间内检索出最小元素的堆栈. push(x)–将元素x插入栈中 pop()–移除栈顶元素 top()–得到栈顶元素 ...
- 剑指Offer面试题:19.包含Min函数的栈
一.题目:包含Min函数的栈 题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数.在该栈中,调用min.push及pop的时间复杂度都是O(1). 这里我们要实现的就是min ...
- 【面试题021】包含min函数的栈
[面试题021]包含min函数的栈 MinStack.cpp: 1234567891011121314151617181920212223242526272829303132333435363738 ...
随机推荐
- [原创]cocos2d-x研习录-第三阶 特性之动作
在前面的Cocos2D-x的概念类中,我们了解到节点类CCNode.导演类CCDirector.场景类CCScene.布景层类CCLayer和精灵类CCSprite等,这些类都是构成游戏画面的基本元素 ...
- Android单元测试实践
为什么要写单元测试 首先要介绍为什么蘑菇街支付金融这边会采用单元测试的实践.说起来比较巧,刚开始的时候,只是我一个人会写单元测试.后来老板们知道了,觉得这是件 很有价值的事情,于是就叫我负责我们组的单 ...
- cxxnet在windows下配置遇到的问题
I compiled the dmlc-core and rabbit. When I compile the new version of CXXNET, there are compile err ...
- 动态sql语句基本语法--Exec与Exec sp_executesql 的区别
http://www.cnblogs.com/goody9807/archive/2010/10/19/1855697.html 动态sql语句基本语法 1 :普通SQL语句可以用Exec执行 ...
- Delphi、C C++、Visual Basic数据类型的对照 转
Delphi.C C++.Visual Basic数据类型的对照 变量类型 Delphi C/C++ Visual Basic 位有符号整数 ShortInt char -- 位无符号整数 Byte ...
- Rails :布局和视图渲染
原文地址: http://guides.ruby-china.org/layouts_and_rendering.html Rails 布局和视图渲染 本文介绍 Action Controller 和 ...
- HoloLens模拟器仿真器与文档现已向开发者们开放
HoloLens仿真器与文档现已向开发者们开放 直接上链接吧:http://mt.sohu.com/20160301/n438961462.shtml
- Best Practices for Performance_1、2 memory、Tips 性能和小的优化点、 onTrimMemory
http://developer.android.com/training/articles/memory.htmlhttp://developer.android.com/tools/debuggi ...
- Ehcache和Spring整合
Ehcache是使用Java编写的缓存框架,比较常用的是,整合在Hibernate和MyBatis这种关系型数据库持久框架. 不过现在用NoSQL也比较盛行,要应用Ehcache,整合起来就没法按照那 ...
- Easyui 小脚本
function addTab(subtitle, url, icon) { if (!$('#tabs').tabs('exists', subtitle)) { $('#tabs').tabs(' ...