leadcode的Hot100系列--155. 最小栈
程序员文章站
2022-05-26 14:42:32
栈:先入后出,后入先出 像电梯一样,先进入电梯的,走到电梯最深处,后进入电梯的,站在电梯门口, 所以电梯打开的时候,后进入的会先走出来,先进入的会后走出来。 push,对应入电梯,把数据往里面压 pop, 对应出电梯,把数据往外拿 栈顶,对应电梯门口 栈底,对应电梯最深处 这里使用链表实现栈。 先创 ......
栈:先入后出,后入先出
像电梯一样,先进入电梯的,走到电梯最深处,后进入电梯的,站在电梯门口,
所以电梯打开的时候,后进入的会先走出来,先进入的会后走出来。
- 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); */
上一篇: 页面返回上一页浏览位置
下一篇: for 循环
推荐阅读
-
leadcode的Hot100系列--155. 最小栈
-
leadcode的Hot100系列--64. 最小路径和--权值最小的动态规划
-
leadcode的Hot100系列--136. 只出现一次的数字
-
leadcode的Hot100系列--461. 汉明距离
-
leadcode的Hot100系列--62. 不同路径--简单的动态规划
-
leadcode的Hot100系列--347. 前 K 个高频元素--hash表+直接选择排序
-
leadcode的Hot100系列--78. 子集--回溯
-
leadcode的Hot100系列--617. 合并二叉树
-
leadcode的Hot100系列--二叉树创建和遍历
-
leadcode的Hot100系列--226. 翻转二叉树