设计包含min或max功能的栈
来源:互联网 发布:淘宝云建站不能用了吗 编辑:程序博客网 时间:2024/06/04 01:32
问题:对Stack(栈)数据结构进行改进,加一个min()或max()功能,使之能在常数,即O(1),时间内给出栈中的最小值。可对push()和pop()函数进行修改,但要求其时间复杂度都只能是O(1)。
以下只对如何求min进行阐述,max类似处理。
解题思路:
用min数组记录当前最小值。当有新数值x进栈时,就前一次的最小值进行比较,如果小于就将min值进行替换,否则保留。、
详见代码:
#include<iostream>#define MAX 5using namespace std;struct stack{int data[MAX];int top;int min[MAX];};void init(stack* s)//初始化{s->top=0;}int push(stack* s,int x){if(s->top==MAX){cout<<"Stack is full!"<<endl;return -1;}if(s->top==0){ s->data[s->top]=x; s->min[s->top]=x; s->top++;}else{ s->data[s->top]=x; if(x<s->min[s->top -1])//比min小就替换 { s->min[s->top]=x; } else//否则和上一个最小值一样 { s->min[s->top]=s->min[s->top-1]; } s->top++;} return 0;}int pop(stack* s){ if(s->top<0) { cout<<"Null!"<<endl; return -1; } int x; x=s->data[s->top--]; return x;}int minValue(stack* s,int x){x=s->min[s->top];return x;}int main(){int i;int x;stack* a=new stack;init(a); cout<<"Please input five numbers."<<endl; for (i=1; i<=MAX; i++) { cin>>x; push(a,x); cout<<"第"<<i<<"个数="<<x<<", min = "<<a->min[a->top-1]<<endl; } a->top--;cout<<"当前栈的最小值:"<<a->min[a->top]<<endl;for(int k = 0; k< 5; k++) // 测试,说明入栈之后data里面确实是输入的5个数,而且后输入的在栈的上部cout<<a->data[k]<<' '; cout<<endl; for (i=1; i<=MAX; i++) { cout<<pop(a)<<" "; cout<<"出栈后,栈的最小值:"<<a->min[a->top]<<endl; }return 0;}
0 0
- 设计包含min或max功能的栈
- 包含min、max函数的栈
- 包含max(min)的栈及队列
- 实现一个包含Min,Max函数的栈
- 实现包含min,max,push,pop函数的栈
- 设计包含min函数的栈
- 设计包含min函数的栈
- 转载 设计包含min函数的栈
- 设计包含min函数的栈
- 设计包含min函数的栈
- 设计包含 min 函数的栈
- 设计包含min函数的栈
- 2.设计包含min函数的栈
- 2、设计包含min 函数的栈
- 设计包含min函数的栈---Algorithms
- 设计包含min函数的栈
- 设计包含min函数的栈
- 设计包含min函数的栈
- LeetCode:Sum Root to Leaf Numbers
- POJ 2965-The Pilots Brothers' refrigerator
- 安装WebLogic的详细步骤
- 手把手教你:win7下的python+django项目移植到虚拟机的Ubuntu下网页无法显示的解决方法
- android launchmode(四种启动模式)应用场景及实例
- 设计包含min或max功能的栈
- NEUQ 1256: 核电站问题
- 黑马程序员----集合类
- 黑马程序员——反射调用方法
- 黑马程序员——高新技术 反射(2)
- 二叉树的非递归遍历
- 用递归函数计算厄密多项式
- js函数调用执行顺序
- SDUT3131(多重背包)