有关栈的题目
来源:互联网 发布:淘宝店铺钻石号出售 编辑:程序博客网 时间:2024/05/16 16:08
设计包含min函数的栈。
定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。
要求函数min、push以及pop的时间复杂度都是O(1)。
结合链表一起做。容器vector代替链表
eg: 10,3,3,8,2,6
1.push() :如果push入栈A的元素小于栈B的栈顶所对应的的元素,则将该元素push入栈B中; 或者第一个元素也直接push入B中
栈A 辅助栈B( 存放最小值 )
6 2 min=2
2 2 min=2
8 3 min=3
3 3 min=3
3 3 min=3
10 10 min=10
2.pop() :栈A删去一个,栈B也删去一个
栈A 辅助栈B
6 min=2
2 min=2
8 2 min=3
3 3 min=3 //注意最小值相等的情况
3 3 min=3
10 10 min=10
3.min() :直接返回栈B中的最后一个元素
代码:
#include <iostream>#include <vector>#include <assert.h>using namespace std;template<typename T>class CStack //主要包含了min()功能,且时间复杂度为O(1){vector<T> m_data; //用容器来模拟栈vector<size_t> m_supply; //辅助栈public:void Push(T data){if(m_data.empty() || data <= m_data.back() )m_supply.push_back(data);m_data.push_back(data);}void Pop(){assert(!m_data.empty() && !m_supply.empty());if(m_data.back() == m_supply.back())m_supply.pop_back();m_data.pop_back();}T min(){return m_supply.back();}};int main() { CStack<int> stackObj;stackObj.Push(10);stackObj.Push(3);stackObj.Push(3);stackObj.Push(8);stackObj.Push(2);stackObj.Push(6);cout<<stackObj.min()<<endl;stackObj.Pop();stackObj.Pop();cout<<stackObj.min()<<endl;return 0;}
- 有关栈的题目
- 有关牌的题目
- 有关字符串的题目
- 链表有关的题目
- 数据库的有关练习题目
- 一道有关static的题目
- POJ有关搜索的题目
- 一道有关图论的题目
- 有关函数指针的小题目
- 一道与预处理有关的题目
- 有关于volatile的说明(含题目)
- 一些和期望有关的题目
- 数组和指针有关sizeof的题目
- 杭电acm有关string的题目
- 有关二维数组的PAT题目
- 一道与死锁有关的题目
- 数据结构中有关链表的题目
- POJ 有关动态规划的题目
- javaScript表单提交验证
- Eclipse 删除 空行
- 10M内存存储40亿整数
- poj1258--Agri-Net
- Linux性能分析工具之lsof
- 有关栈的题目
- 【android自定义控件】ProgressBar自定义
- Windows和Linux 行尾符(EndOfLine)的区别
- Android通过get,post方式体访问http服务器
- bat 保留7天备份文件
- Binary Tree Maximum Path Sum
- Android开发学习笔记--UI布局(1)
- WdatePicker.js的使用方法 帮助文档 使用说明(时间控件)
- <转> Java Socket常见异常处理