/////////////////////////////////////////////////////////////////////////////////////

// 3. 题目21  包含Min函数的栈

template <typename TYPE>
class CMinInStack
{
public:
void Push(const TYPE& value);
const TYPE Pop();
const TYPE& GetMinValue() const; private:
stack<TYPE> m_stDataStack;
stack<TYPE> m_stMinStack;
}; template <typename TYPE>
const TYPE& CMinInStack<TYPE>::GetMinValue() const
{
assert(!m_stDataStack.empty() && !m_stMinStack.empty()); return m_stMinStack.top();
} template <typename TYPE>
const TYPE CMinInStack<TYPE>::Pop()
{
assert(!m_stDataStack.empty() && !m_stMinStack.empty()); TYPE value = m_stDataStack.top();
m_stDataStack.pop();
m_stMinStack.pop(); return value;
} template <typename TYPE>
void CMinInStack<TYPE>::Push(const TYPE& value)
{
// 1.向栈中添加元素
m_stDataStack.push(value); // 2.往辅助栈中添加最小元素
if (m_stMinStack.empty() || value < m_stMinStack.top())
{
m_stMinStack.push(value);
}
else
{
m_stMinStack.push(m_stMinStack.top());
}
} void MinInStackTestFunc()
{
cout << "\n\n --------------- MinInStackTestFunc Start -------------->" << endl; int aiArray[] = {3, 4, 5, 8, 9, 1, 4, 45, 89};
int iLen = sizeof(aiArray) / sizeof(int);
TRAVERSAL_ARRAY(aiArray, iLen); CMinInStack<int> stMinStack; for (int i = 0; i < iLen; i++)
{
stMinStack.Push(aiArray[i]);
} printf("最小栈 最小元素: %d\n", stMinStack.GetMinValue()); printf("最小栈 弹出元素: %d\n", stMinStack.Pop());
printf("最小栈 弹出元素: %d\n", stMinStack.Pop());
printf("最小栈 最小元素: %d\n", stMinStack.GetMinValue()); printf("最小栈 弹出元素: %d\n", stMinStack.Pop());
printf("最小栈 最小元素: %d\n", stMinStack.GetMinValue()); printf("最小栈 弹出元素: %d\n", stMinStack.Pop());
printf("最小栈 弹出元素: %d\n", stMinStack.Pop());
printf("最小栈 弹出元素: %d\n", stMinStack.Pop());
printf("最小栈 最小元素: %d\n", stMinStack.GetMinValue()); cout << "\n\n --------------- MinInStackTestFunc End -------------->" << endl; }

题目21 包含Min函数的栈的更多相关文章

  1. 【算法题目】包含min函数的栈

    题目来源:<剑指offer>面试题21 题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数.在该栈中,调用min,push以及pop的时间复杂度都是O(1). 分 ...

  2. 剑指Offer:面试题21——包含min函数的栈(java实现)

    问题描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数.在该栈中,调用min,push及pop的时间复杂度都是O(1). 思路:加入一个辅助栈用来存储最小值集合 (这里要注 ...

  3. 剑指offer-面试题21.包含min函数的栈

    题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数. 在该栈中,调用min,push及pop的时间复杂度都是O(1). 这一题实际上需要一个辅助栈存储最小值: 1.在模板类定 ...

  4. 《剑指offer》面试题21—包含min函数的栈

    题目:定义栈数据结构,并在该数据结构中实现一个能获得栈最小元素的函数min.要求push,min,pop时间都是O(1). 思路:要用一个辅助栈,每次有新元素压栈时辅助栈压入当前最小元素:min函数直 ...

  5. 《剑指offer》面试题21 包含min函数的栈 Java版

    (min函数的作用是返回栈内最小值) 首先这个栈要具有普通栈所具有的push()和pop()方法,那么内部一定包含一个Stack.至于还要能实现min函数,而且还是在O(1)时间复杂度内,我们不得不考 ...

  6. 21 包含min函数的栈

    定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. C++: class Solution { private: stack<int> dataStack ; stac ...

  7. 剑指Offer面试题:19.包含Min函数的栈

    一.题目:包含Min函数的栈 题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数.在该栈中,调用min.push及pop的时间复杂度都是O(1). 这里我们要实现的就是min ...

  8. 栈二:包含min函数的栈

    /** * 题目:包含min函数的栈 * 描述:  定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数.  *  注:用data来保存数据,用另一个栈min保存依次入栈最小的数 *  ...

  9. 【编程题目】设计包含 min 函数的栈

    2.设计包含 min 函数的栈(栈)定义栈的数据结构,要求添加一个 min 函数,能够得到栈的最小元素.要求函数 min.push 以及 pop 的时间复杂度都是 O(1). 我的思路: 用一个额外的 ...

随机推荐

  1. python3编程基础之一:程序结构

    程序从程序入口进入,到程序执行结束,大体是按照顺序结构执行语句.函数或代码块,掌握程序的结构,有利于把握程序的主体框架. 1.顺序结构--最常见的结构 顺序结构的程序设计是最简单的,只要按照解决问题的 ...

  2. NOIP1998提高组 题解报告

    T1 进制位 题目大意:自己看吧 首先让我们来看两个引理: 如果有解,则进制一定为\(n - 1\) 如果有解,则字母一定表示\(0\) 至 \(n - 1\) 的数 证明如下: 因为有 \(n - ...

  3. BZOJ3262陌上花开

    三维偏序的模板. 当然各种树套树都可以搞,这里用CDQ分治弄一下. 首先利用排序使第一维有序,然后利用cdq函数开始执行类似归并排序的操作,由于左区间的第一维一定小于右区间的第一维,所以我们在归并过程 ...

  4. Lucene4.2源码解析之fdt和fdx文件的读写——fdx文件存储一个个的Block,每个Block管理着一批Chunk,通过docID读取到document需要完成Segment、Block、Chunk、document四级查询,引入了LZ4算法对fdt的chunk docs进行了实时压缩/解压

    前言 通常在搜索打分完毕后,IndexSearcher会返回一个docID序列,但是仅仅有docID我们是无法看到存储在索引中的document,这时候就需要通过docID来得到完整Document信 ...

  5. PL/SQL配置和连接远端数据库

    1. 安装与配置 (1) 安装 因为是免安装的绿色版,所以解压到目录就可以了,保证目录中没有空格.下划线和中文字符. 还有一点,PL/SQL需要和Oracle的版本一致,都是32位或者都是64位,否则 ...

  6. java集合类型源码解析之PriorityQueue

    本来第二篇想解析一下LinkedList,不过扫了一下源码后,觉得LinkedList的实现比较简单,没有什么意思,于是移步PriorityQueue. PriorityQueue通过数组实现了一个堆 ...

  7. Java 程序流程语句

    顺序结构 什么是顺序结构:一行一行的执行代码 选择结构 if 什么是选择结构:通过判断条件来做选择的语句,我们称为选择语句或分支语句 定义方式:if语句使用boolean表达式或boolean值作为选 ...

  8. C++中的函数库

    函数库是由系统建立的具有一定功能的函数的集合. 库中存放函数的名称和对应的目标代码,以及连接过程中所需的重定位信息.用户也可以根据自己的需要建立自己的用户函数库. "cstdlib" ...

  9. Leetcode: Find First and Last Position of Element in Sorted Array

    Given a sorted array of integers, find the starting and ending position of a given target value. You ...

  10. Kafka Connect Architecture

    Kafka Connect's goal of copying data between systems has been tackled by a variety of frameworks, ma ...