c/c++语言开发共享leadcode的Hot100系列–155. 最小栈

栈:先入后出,后入先出 像电梯一样,先进入电梯的,走到电梯最深处,后进入电梯的,站在电梯门口, 所以电梯打开的时候,后进入的会先走出来,先进入的会后走出来。 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); */

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/602834.html

(0)
上一篇 2021年5月11日
下一篇 2021年5月11日

精彩推荐