leadcode的Hot100系列--155. 最小栈
栈:先入后出,后入先出
像电梯一样,先进入电梯的,走到电梯最深处,后进入电梯的,站在电梯门口,
所以电梯打开的时候,后进入的会先走出来,先进入的会后走出来。
- push,对应入电梯,把数据往里面压
- pop, 对应出电梯,把数据往外拿
- 栈顶,对应电梯门口
- 栈底,对应电梯最深处
这里使用链表实现栈。
先创建一个MinStack头,
入栈:直接把结构体挂在MinStack头后面,
出栈:直接拿出MinStack头后面的结构体。
取最小值:对链表进行一次遍历,返回最小值。
typedef struct minstack{
struct minstack *pNext;
int val;
} MinStack;
/** initialize your data structure here. */
MinStack* minStackCreate() { // 创建一个 minStack 头
MinStack *pstTemp = NULL;
pstTemp = (MinStack *)calloc(1, sizeof(MinStack));
if (NULL == pstTemp)
return NULL;
pstTemp->pNext = NULL;
return pstTemp;
}
void minStackPush(MinStack* obj, int x) { // 入栈
MinStack *pstTemp = NULL;
if (NULL == obj)
return;
pstTemp = (MinStack *)calloc(1, sizeof(MinStack));
if (NULL == pstTemp)
return;
pstTemp->val = x;
pstTemp->pNext = obj->pNext;
obj->pNext = pstTemp;
return;
}
void minStackPop(MinStack* obj) { // 出栈
MinStack *pstTemp = NULL;
if ((NULL == obj) || (NULL == obj->pNext))
return;
pstTemp = obj->pNext;
obj->pNext = pstTemp->pNext;
free(pstTemp);
pstTemp = NULL;
return;
}
int minStackTop(MinStack* obj) {
MinStack *pstTemp = NULL;
if ((NULL == obj) || (NULL == obj->pNext))
return;
pstTemp = obj->pNext;
return pstTemp->val;
}
int minStackGetMin(MinStack* obj) {
MinStack *pstTemp = NULL;
int iMin = 0;
if ((NULL == obj) || (NULL == obj->pNext)) // 这里如果确实是一个空链表的话,返回0的话好像也不太对
return iMin;
else
{
pstTemp = obj->pNext;
iMin = pstTemp->val; // 这里需要使用栈里面值初始化一下iMin,万一栈里面所有的值都大于0,就会返回最小值为0,就错了
pstTemp = pstTemp->pNext;
}
while(NULL != pstTemp)
{
if (pstTemp->val < iMin)
iMin = pstTemp->val;
pstTemp = pstTemp->pNext;
}
return iMin;
}
void minStackFree(MinStack* obj) {
MinStack *pstNow = NULL;
MinStack *pstNext = NULL;
if ((NULL == obj) || (NULL == obj->pNext))
return;
pstNow = obj->pNext;
while(NULL != pstNow)
{
pstNext = pstNow->pNext;
free(pstNow);
pstNow = NULL;
pstNow = pstNext;
}
return;
}
/**
* Your MinStack struct will be instantiated and called as such:
* MinStack* obj = minStackCreate();
* minStackPush(obj, x);
* minStackPop(obj);
* int param_3 = minStackTop(obj);
* int param_4 = minStackGetMin(obj);
* minStackFree(obj);
*/
leadcode的Hot100系列--155. 最小栈的更多相关文章
- leadcode的Hot100系列--64. 最小路径和--权值最小的动态规划
如果这个: leadcode的Hot100系列--62. 不同路径--简单的动态规划 看懂的话,那这题基本上是一样的, 不同点在于: 1.这里每条路径相当于多了一个权值 2.结论不再固定,而是要比较不 ...
- leadcode的Hot100系列--17. 电话号码的字母组合--回溯的另一种想法的应用
提交leetcode的时候遇到了问题,一直说访问越界,但仔仔细细检查n多遍,就是检查不出来. 因为我用到了count全局变量,自加一来表明当前数组访问的位置, 后来突然想到,是不是在leetcode在 ...
- Java实现 LeetCode 155 最小栈
155. 最小栈 设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈. push(x) – 将元素 x 推入栈中. pop() – 删除栈顶的元素. top() – 获取 ...
- 【LeetCode】155. 最小栈
155. 最小栈 知识点:栈:单调 题目描述 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈. push(x) -- 将元素 x 推入栈中. pop() -- 删 ...
- leetcode算法学习----155. 最小栈(MinStack )
下面题目是LeetCode算法155题: https://leetcode.com/problems/min-stack/ 题目1:最小函数min()栈 设计一个支持 push,pop,top 操作, ...
- LeetCode 155 - 最小栈 - [数组模拟栈]
题目链接:https://leetcode-cn.com/problems/min-stack/description/ 设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的 ...
- LeetCode 刷题笔记 155. 最小栈(Min Stack)
tag: 栈(stack) 题目描述 设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈. push(x) -- 将元素 x 推入栈中. pop() -- 删除栈顶的元素 ...
- Leetcode题目155.最小栈(简单)
题目描述: 设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈. push(x) -- 将元素 x 推入栈中.pop() -- 删除栈顶的元素.top() -- 获取栈顶 ...
- leetcode 155. 最小栈(c++)
设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈. push(x) -- 将元素 x 推入栈中.pop() -- 删除栈顶的元素.top() -- 获取栈顶元素.get ...
随机推荐
- 基于Android开发的天气预报app(源码下载)
原文:基于Android开发的天气预报app(源码下载) 基于AndroidStudio环境开发的天气app -系统总体介绍:本天气app使用AndroidStudio这个IDE工具在Windows1 ...
- WPF异常捕获,并使程序不崩溃!
原文:WPF异常捕获,并使程序不崩溃! 在.NET中,我们使用try-catch-finally来处理异常.但,当一个Exception抛出,抛出Exception的代码又没有被try包围时,程序就崩 ...
- JS-LINQ
JS中使用LINQ 详细使用方法可找相关资料 文件在这里 引用: <script type="text/javascript" src="@Url.Content( ...
- ASP 用隐藏域解决Http无状态问题
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head> < ...
- Delphi I/O Errors(几百种不同的错误)
The following are the Windows API (and former DOS) IO errors, which are also the IO errors often ret ...
- QString转换为LPTSTR(使用了reinterpret_cast,真是叹为观止,但是也开阔了思路),三篇文章合起来的各种转换方法
醉了,windows下宏定义了很多char类型 LPTSTR .今天,直接使用,qt报错,真TM费事. 将“CPU”转化为wcha_t * QString str = "CPU"; ...
- 微信小程序把玩(三十一)wx.uploadFile(object), wx.downloadFile(object) API
原文:微信小程序把玩(三十一)wx.uploadFile(object), wx.downloadFile(object) API 反正我是没有测通这两个API!!!!不知道用的方式不对还是其他的!! ...
- Java Web系列:Spring Boot 基础 Spring Security基本使用
@OneToOne or @ManyToOne Caused by: org.hibernate.AnnotationException: @OneToOne or @ManyToOne on com ...
- 瑞芯微RK3399宣布系统开源,进入百余种行业市场!
集微网消息,2月24日瑞芯微官方突然宣布, Rockchip RK3399Linux系统开源!作为Rockchip旗舰级芯片,RK3399具有高性能.高扩展.全能型应用特性. 这一重磅消息立马刷爆朋友 ...
- How to Capture the Integer-Divide-By-Zero Error in C++(提前定义信号)
How to Capture the Integer-Divide-By-Zero Error in C++? MANUAL CAPTURE The simple and straightforwar ...