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 ...
随机推荐
- 关系与导航属性(摘自微软MSDN)
关系与导航属性 本主题概述实体框架如何管理实体间的关系.还对如何映射和操作关系提供了一些指南. 关系.导航属性和外键 在关系数据库中,表之间的关系(也称为关联)是通过外键定义的.外键 (FK) 是用于 ...
- maven2 com.jhlabs.imaging 01012005 maven安装jar包imaging命令
com.jhlabs:imaging:jar:01012005 所在仓库+captcha验证码maven依赖 maven 安装jar包 到本地仓库 命令maven 3.0安装jar包 到本地仓库 co ...
- pm2使用
简单教程 首先需要安装pm2: npm install -g pm2 运行: pm2 start app.js 初次安装并运行,会有一个高大上的界面: 高大上的界面 直接我们介绍过forever,那么 ...
- sqlalchemy 实体属性提前加载
在flask里需要给视图传送数据,肯定需要把模型的实体属性提前加载,可以使用 sqlalchemy.orm.subqueryload 或 sqlalchemy.orm.joinedload 示例: @ ...
- eclipse svn插件地址
http://subclipse.tigris.org/servlets/ProjectDocumentList?folderID=2240
- [Linux] - 阿里云CentOS 6.5 安装Docker
因为阿里云的CentOS 6.5版本默认内核kernel版本是2.6的,比较低.安装docker的后,运行不了. 步骤: 1.使用命令更新: yum update 2.安装Docker.这里忽略500 ...
- open office操作word文档
前段时间工作需要使用open office往word中写文件,写图片,以及向footer也就是页尾中插入图片,已经封装成了类,直接调用即可,代码如下: package com.test.common. ...
- ListView 中含有 EditText 导致焦点丢失的问题
ListView 中的 item 中有 EditText 时. 如果activity的输入法选项设置为 android:windowSoftInputMode="adjustResize&q ...
- Netty服务端与客户端(源码一)
首先,整理NIO进行服务端开发的步骤: (1)创建ServerSocketChannel,配置它为非阻塞模式. (2)绑定监听,配置TCP参数,backlog的大小. (3)创建一个独立的I/O线程, ...
- ylbtech-Miscellaneos
ylbtech-Miscellaneos: A,返回顶部 1, 2, B返回顶部 1, 2 作者:ylbtech出处:http://ylbtech.cnblogs.com/本文版权归作者和博客园共有, ...