【说明】:

  本文是左程云老师所著的《程序员面试代码指南》第一章中“设计一个有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功能的栈的更多相关文章

  1. 算法与数据结构题目的 PHP 实现:栈和队列 设计一个有 getMin 功能的栈

    刚入手了一本<程序员代码面试指南>,书中题目的代码都是 Java 实现的,琢磨着把这些代码用 PHP 敲一遍,加深印象. 题目:设计一个有 getMin 功能的栈 —— 实现一个特殊的栈, ...

  2. 《程序员代码面试指南》第一章 栈和队列 设计一个有getMin功能的栈

    题目 实现一个特殊的栈,在实现栈的基本功能上,再实现返回栈中最小的元素的操作 要求 1. pop.push.getMin操作时间复杂度都是O(1) 2. 设计的栈类型可以使用现成的栈结构 java代码 ...

  3. 栈和队列----设计一个有getMin功能的栈

    设计一个有getMin功能的栈 设计一个具有getMin功能的栈,可以返回栈中的最小的元素,可以使用现有的栈的数据结构,要求pop/push/getMin操作的时间复杂度是O(1). package ...

  4. 栈和队列问题:设计一个有 getMin 功能的栈

    [知识点] 栈是一个先进后出(FILO-First In Last Out)的数据结构,队列是一种先进先出(FIFO-First In First Out)的数据结构. [题目] 实现一个特殊的栈,在 ...

  5. 设计一个有getMin功能的栈(2)

    题目: 实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作. 要求: 1.pop.push.getMin操作的时间复杂度都是O(1) 2.设计的栈类型可以输用现成的栈结构 解答 ...

  6. 设计一个有getMin功能的栈(1)

    题目: 实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作. 要求: 1.pop.push.getMin操作的时间复杂度都是O(1) 2.设计的栈类型可以输用现成的栈结构 解答 ...

  7. 常见面试算法题JS实现-设计一个有getMin功能的栈

    前言: 已经确定工作了-下周一正式入职,按理说应该是可以好好浪荡一周的,但是内心总是不安,总觉得自己这个水平真的太菜了,还是趁着现在有自己的时间,赶紧多看看书,多学习学习吧orz所以把之前校招买的书, ...

  8. 左神算法书籍《程序员代码面试指南》——1_01设计一个有getMin功能的栈

    [题目] 实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作. [要求] 1.pop.push.getMin操作的时间复杂度都是O(1).2.设计的栈类型可以使用现成的栈结构. ...

  9. 设计一个带有getmin功能的栈,保证时间复杂度在O(1)

    2017-06-22  20:56:10 需要得到最小值,最简单的思路就是遍历一遍求出最小值.但是这样的时间复杂度会是O(n),不满足O(1)的要求.于是想到在建立一个栈来保存最小值. 具体操作是建立 ...

随机推荐

  1. cygwin在Windows8.1中设置ssh的问题解决

    为了在Windows 8.1上直接使用Linux环境和hadoop开发,装了cygwin,同时设置ssh无密码登录.   但正常ssh-keygen后复制到authorised_keys后登录出现提示 ...

  2. UberX及以上级别车奖励政策(优步北京第四组)

    优步北京第四组: 定义为2015年7月20日至今激活的司机(以优步后台数据显示为准) 滴滴快车单单2.5倍,注册地址:http://www.udache.com/如何注册Uber司机(全国版最新最详细 ...

  3. _sortBy用法

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. S3C6410嵌入式应用平台构建(六)——linux-3.14.4移植到OK6410-(Yaffs2文件制作)

    本文主要讲怎用利用yaffs2工具和busybox制作yaffs2文件系统镜像.大多数都是参照网上的,目的在于记录学习,不做任何用途. 一.制作mkyaffs2image工具 进入yaffs2源码目录 ...

  5. lighttpd配置虚拟主机/php等WEB环境

    lighttpd(1.4.37)配置如下 server.document-root = "/var/www/lighttpd/" server.port = 8888 server ...

  6. 通过案例掌握Spring 管理事务的步骤及配置

    案例描述  通过完成生成订单业务,掌握事务处理.  需要d_order表和d_item表  订单生成时的业务逻辑:向d_order插入1条数据的同时,向t_item中插入若干条数据  这就是一个独立的 ...

  7. 未能找到类型名称"MembershipProvider"

    将用户管理程序部署到SharePoint 2013平台上,系统编译报错:未能找到类型名称"MembershipProvider",此类型已转发到程序集System.web.Appl ...

  8. jquery + ajax调用后台方法

    前台js: var parameter = ""; $.ajax({ type: "POST", //提交方式 url: "Default.aspx/ ...

  9. js 模拟java 中 的map

    //js模拟map Map = { obj : {}, put : function(key , value){ this.obj[key] = value; }, get : function(ke ...

  10. [转载]VMWare网络连接透析

    http://blog.csdn.net/struggleyb/article/details/1102214 以前在学校,VMWare里面的Gentoo Linux是采用network bridge ...