设计一个有getMin功能的栈
【说明】:
本文是左程云老师所著的《程序员面试代码指南》第一章中“设计一个有getMin功能的栈”这一题目的C++复现。
本文只包含问题描述、C++代码的实现以及简单的思路,不包含解析说明,具体的问题解析请参考原书。
感谢左程云老师的支持。
【题目】:
实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。
【要求】:
1、pop、push、getMin操作的时间复杂度都是O(1)。
2、设计的栈类型可以使用现成的栈结构。
【思路】:
以空间换时间:总体设计上采用两个栈,一个栈保存元素,另一个栈保存每一步的最小值。
【编译环境】:
CentOS6.7(x86_64)
gcc 4.4.7
【实现】:
1、声明代码
/*
*文件名:
*作者:Stan
*摘要:设计一个具有O(1)复杂度的栈,并实现其基本操作
*/ #ifndef _GETMINSTACK_H
#define _GETMINSTACK_H
#include <stack>
using namespace std; class MyStack
{
public:
MyStack(){};
~MyStack(){};
void push(int data);
void pop();
int top();
int getMin();
bool empty();
private:
stack<int> sData;
stack<int> sMin; }; #endif
2、实现代码
/*
*文件名:
*作者:Stan
*摘要:MyStack.h中声明的实现
*/ #include "getMinStack.h"
#include <stdexcept>
#include <exception>
void MyStack::push(int data)
{
if(sMin.empty())
sMin.push(data);
else if(data < sMin.top())
sMin.push(data);
else
sMin.push(sMin.top());
sData.push(data);
return ;
} void MyStack::pop()
{
if(sData.empty())
throw runtime_error("Empty Stack!");
sMin.pop();
sData.pop();
} int MyStack::top()
{
if(sData.empty())
throw runtime_error("Empty Stack!");
return sData.top();
} int MyStack::getMin()
{
if(sMin.empty())
throw runtime_error("Empty Stack!");
return sMin.top();
} bool MyStack::empty()
{
if(sData.empty())
return true;
else
return false;
}
3、测试代码
/*
*文件名:
*作者:Stan
*摘要:测试函数
*/ #include "getMinStack.h"
#include <iostream>
using namespace std; int main()
{
int a[]={,,,,,};
MyStack s;
for(int i=;i<;i++)
{
s.push(a[i]);
cout << "s.top():" << s.top() << endl;
cout << "s.getMin():" << s.getMin() << endl;
}
cout << "The datum in the stack is:" << endl;
while (!s.empty())
{
cout << s.top() << endl;
s.pop();
}
return ;
}
注:
转载请注明出处;
转载请注明源思路来自于左程云老师的《程序员代码面试指南》。
设计一个有getMin功能的栈的更多相关文章
- 算法与数据结构题目的 PHP 实现:栈和队列 设计一个有 getMin 功能的栈
刚入手了一本<程序员代码面试指南>,书中题目的代码都是 Java 实现的,琢磨着把这些代码用 PHP 敲一遍,加深印象. 题目:设计一个有 getMin 功能的栈 —— 实现一个特殊的栈, ...
- 《程序员代码面试指南》第一章 栈和队列 设计一个有getMin功能的栈
题目 实现一个特殊的栈,在实现栈的基本功能上,再实现返回栈中最小的元素的操作 要求 1. pop.push.getMin操作时间复杂度都是O(1) 2. 设计的栈类型可以使用现成的栈结构 java代码 ...
- 栈和队列----设计一个有getMin功能的栈
设计一个有getMin功能的栈 设计一个具有getMin功能的栈,可以返回栈中的最小的元素,可以使用现有的栈的数据结构,要求pop/push/getMin操作的时间复杂度是O(1). package ...
- 栈和队列问题:设计一个有 getMin 功能的栈
[知识点] 栈是一个先进后出(FILO-First In Last Out)的数据结构,队列是一种先进先出(FIFO-First In First Out)的数据结构. [题目] 实现一个特殊的栈,在 ...
- 设计一个有getMin功能的栈(2)
题目: 实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作. 要求: 1.pop.push.getMin操作的时间复杂度都是O(1) 2.设计的栈类型可以输用现成的栈结构 解答 ...
- 设计一个有getMin功能的栈(1)
题目: 实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作. 要求: 1.pop.push.getMin操作的时间复杂度都是O(1) 2.设计的栈类型可以输用现成的栈结构 解答 ...
- 常见面试算法题JS实现-设计一个有getMin功能的栈
前言: 已经确定工作了-下周一正式入职,按理说应该是可以好好浪荡一周的,但是内心总是不安,总觉得自己这个水平真的太菜了,还是趁着现在有自己的时间,赶紧多看看书,多学习学习吧orz所以把之前校招买的书, ...
- 左神算法书籍《程序员代码面试指南》——1_01设计一个有getMin功能的栈
[题目] 实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作. [要求] 1.pop.push.getMin操作的时间复杂度都是O(1).2.设计的栈类型可以使用现成的栈结构. ...
- 设计一个带有getmin功能的栈,保证时间复杂度在O(1)
2017-06-22 20:56:10 需要得到最小值,最简单的思路就是遍历一遍求出最小值.但是这样的时间复杂度会是O(n),不满足O(1)的要求.于是想到在建立一个栈来保存最小值. 具体操作是建立 ...
随机推荐
- CentOS 七 vs CentOS 6的不同
CentOS 七 vs CentOS 6的不同 CentOS 7 vs CentOS 6的不同(1)桌面系统[CentOS6] GNOME 2.x[CentOS7] GNOME 3.x(GNOME ...
- c# 搭建服务端 byte[] 处理(3)
数据的传输中,为防止数据传输过程中被获取解析 造成数据的不安全,一般都会采取各类的方式对数据进行加密.压缩等操作,在客户端或服务端以相同的算法解析即可获得数据,一定程度上减小了数据在中间过程被获取数据 ...
- Hdu Binary Tree Traversals
Problem Description A binary tree is a finite set of vertices that is either empty or consis ...
- 使用my97datepicker控件实现日期范围选择
注:(2014-12-05内容修改:添加运行效果) 使用my97datepicker 控件,需要对日期的范围进行控制,本人自己写了一个js完成此功能,示例为当前日期到下一周周五之间的日期可选,其他日期 ...
- dataset 用法(3)
ReadXml 提供了只将数据或同时将数据和架构从 XML 文档读入 DataSet 的方式(若要同时读数据和架构,请使用包括 mode 参数的 ReadXML 重载之一,并将其值设置为 ReadSc ...
- JavaScript之获取和设置元素属性
1.与我前面的随笔获取元素的那些方法不同http://www.cnblogs.com/GreenLeaves/p/5689075.html 获取元素属性的方法getAttribute()不属于docu ...
- HTML5增加的几个新的标签
HTML5又2008年诞生,HTML5大致可以等同于=html+css3+javascriptapi.... so --->支持css3强大的选择器和动画以及javascript的新的函数 先来 ...
- Objective-C的hook方案(一): Method Swizzling
Objective-C的hook方案(一): Method Swizzling 转自:http://blog.csdn.net/yiyaaixuexi/article/details/9374411 ...
- iOS 16进制颜色转换10进制颜色
+(UIColor *)colorWithHexString:(NSString *)coloStr{ // 检索 去下空格和换行 转成大写 NSString *cString = [[col ...
- C++/C#结构体转化-二维数组-bytes To Strings
C++结构体 typedef struct VidyoClientRequestGetWindowsAndDesktops_ { /*! The number of application windo ...