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 ...
随机推荐
- cps变换
网上看了很多内容,很少有给出一个准确的概念,它的英文全称是continuous passing style, 直译为连续传递样式,那么cps transform就是将一些原本不是continuous ...
- delegate用法
一般来说 delegate 可以申明一个delegate类型 比如 public delegate funa(object b) 然后使用的时候申明 funa 作为类型 new funa(回调函数 ...
- linux显示器常见设置
1. 设置系统默认的分辨率 xrandr 命令: > xrandr Screen 0: minimum 1 x 1, current 1920 x 1080, maximum 8192 x 8 ...
- Ubuntu14.04用apt在线/离线安装CDH5.1.2[Apache Hadoop 2.3.0]-old
用markdown重写,请稳步这里http://www.cnblogs.com/lion.net/p/5477899.html
- ORACLE 简化拼接
and (in_sample.TEAM_GROUP = p_teamGroup or p_teamGroup is null);
- VMware安装centos虚拟机
vm中安装虚拟机,步骤,图片截取 VM中 --> 文件 --> 新建虚拟机 此处若是提示CPU不支持虚拟机安装 重启计算机,进入BIOS,修改cpu配置 点击next 下一步 .... 等 ...
- springmvc+spring-security+mybatis +redis +solar框架抽取
参考文章:Spring MVC 3 深入总结: 第二章 Spring MVC入门 —— 跟开涛学SpringMVC 参考博客:http://www.cnblogs.com/liukemng/categ ...
- linux 添加静态ip dns
/etc/network 下:interfaces auto loiface lo inet loopbackauto eth0iface eth0 inet staticaddress 192.16 ...
- LINUX 下Open cv练习使用小记(1)
首先肯定离不开选一张自己喜欢的图像来显示 #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp ...
- Java借助Runtime调用外部程序阻塞的代码
有时候在java代码中会调用一些外部程序,比如SwfTools来转换swf.ffmpeg来转换视频等.如果你的代码这样写:Runtime.getRuntime().exec(command),会发现程 ...