Google面试题之设计一个包含min函数的栈
来源:互联网 发布:银行家算法c语言代码 编辑:程序博客网 时间:2024/06/07 04:57
定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min,push,以及pop的时间复杂度都是O(1)。
算法思想:考虑增加一个辅助的堆栈,每次往原堆栈push数据时,同时将最小数据push到辅助堆栈中。具体原理如图所示:
首先定义一个栈结构题:
typedef struct{ int data[STACK_SIZE]; int top; int min;}MinStack;//建立一个辅助栈MinStack Side_Stack;//在push数据进入栈之前,需要对栈进行初始化void init(MinStack *s){ s->top=-1; s->min=-1; Side_Stack.top=-1;}//push数据进栈//原理很简单,先判断栈是否满。之后将数据push入栈,若数据小于最小值,则将数据push到辅助栈中void push(MinStack *s,int value){ if(full(s)) { printf("%s\n","stack is full"); if((s->min==-1)||(value<s->min)) { s->min=value; //将最小值push到辅助栈中,再push之前,辅助栈下标要+1 Side_Stack.data[++Side_Stack.top]=value; } ///将数据push到原数据栈中,再push之前,下标要+1 s->data[++s->top]=value;}//pop数据出栈//原理很简单,先判断栈是否为空。之后将原数据栈栈顶数据pop,pop之后将下标-1,判断当前pop出去的数据是否和辅助栈顶数据相同,若相同,则辅助栈下标-1,则留在辅助栈顶的依然是最小数据。若不相同,则依然保留上一次最小值作为此次的最小值int pop(MinStack *s){ int data; if(empty(s)) { printf("%s\n","stack is empty"); } data=s->data[s->top--]; if(Side_Stack.data[Side_Stack.top]==data) { s->min=Side_Stack.data[--Side_Stack.top]; } return data;}
//下面是最小函数 int min(Stack *s) { return s->min; } //判断栈是否空 bool empty(MinStack *s){ if(s->top==-1) { return true; } return false;}
//判断栈是否满bool full(MinStack *s){ if(s->top==STACK_SIZE-1) { return true; } return false;}
1 0
- Google面试题之设计一个包含min函数的栈
- 面试题---设计包含min函数的栈
- 《微软面试题》设计包含min函数的栈
- 面试题---设计包含min函数的栈
- 面试题三:设计包含 min 函数的栈。
- 面试题之堆栈队列系列一:设计包含min函数的栈
- 2. 微软面试题:设计包含min函数的栈(栈)
- 面试题系列-----数据结构(设计包含 min 函数的栈(栈))
- 程序员面试题精选(2):设计包含min函数的栈
- 程序员面试题精选100题(02)-设计包含min函数的栈
- 程序员面试题精选--(01)设计包含min函数的栈
- 经典面试题:设计包含min函数的栈,O(1)空间实现方法
- 程序员面试题精选(02)-设计包含min函数的栈
- 程序员面试题精选(02)-设计包含min函数的栈
- 程序员面试题精选100题(02)-设计包含min函数的栈
- 程序员面试题精选-设计包含min函数的栈
- 程序员面试题精选100题(02)-设计包含min函数的栈[数据结构]
- 【微软100面试题实现】第02题:设计包含min函数的栈
- ubuntu添加或删除PPA
- 搜索练习1/棋盘问题 dfs详解
- nginx做转发时,带'_'的header内容丢失
- 浅谈C++与C的一些不同
- 大量的QT控件及示例发放
- Google面试题之设计一个包含min函数的栈
- 数位DP模板
- Linux grub引导丢失修复
- 读取配置文件
- 从零开始写javaweb框架(第一章)—— 所遇到的问题 与 解决方法
- 从嵌入式到互联网
- 创建第一个小程序hello world!
- Kali Linux 2017.1脚本gerix.py修复
- ssm整合记录