[LeetCode刷题笔记]155. Min Stack -最小栈的实现方法

最小栈

    • 1 题目要求
    • 2 算法思路
    • 3 算法实现

1 题目要求

https://leetcode-cn.com/problems/min-stack/[LeetCode刷题笔记]155. Min Stack -最小栈的实现方法_第1张图片

2 算法思路

由于题目要求在常数时间内检索到最小的元素,那么我们一定要有一个变量,这个变量里面一直存储着现有栈中的最小的元素.
1.可以每次入栈两次,分别存储当前的栈中元素,和当前栈中的最小元素.弹栈操作和这个入栈操作正好对应,每次弹栈弹出两个元素.
2.可以在栈的数据结构中增加一项专门记录最小元素的变量值.

3 算法实现

这里主要是根据思路1进行了实现,由于栈的操作相对比较简单易懂,这里不再做过多的介绍.

#include 
#include 
#define MAXSIZE 1600
typedef struct 
{
     
    int *data;
    int top;
} MinStack;
/** initialize your data structure here. */
MinStack* minStackCreate() 
{
     
    MinStack *obj=(MinStack *)malloc(sizeof(MinStack));
    obj->data=(int *)malloc(MAXSIZE*sizeof(int));
    obj->top=-1;    
    return obj;
}
void minStackPush(MinStack* obj, int x)
 {
       
    if(obj->top==MAXSIZE-1){
             }
    else if(obj->top==-1)
    {
     
          obj->top++;      
          obj->data[obj->top]=x;      
          obj->top++;      
          obj->data[obj->top]=x;  
    }
    else
    {
     
          int tmp=obj->data[obj->top];      
          obj->top++;      
          obj->data[obj->top]=x;      
          if(tmp<x)
          {
     
                  obj->top++;        
                  obj->data[obj->top]=tmp;      
          }
          else
          {
     
                  obj->top++;        
                  obj->data[obj->top]=x;      
          } 
     }
}
void minStackPop(MinStack* obj) 
{
     
   if(obj->top==-1){
             }
   else
   {
     
        obj->top--;
        obj->top--;  
    }
}
int minStackTop(MinStack* obj)
{
     
    if(obj->top==-1)
    {
           return;  }  
    return obj->data[obj->top-1];
}
int minStackGetMin(MinStack* obj) 
{
       
return obj->data[obj->top];
}
void minStackFree(MinStack* obj)
 {
     
     free(obj->data);
     obj->data=NULL;
     free(obj);
     obj=NULL;
}
/** 
* 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);*/

你可能感兴趣的:(LeetCode刷题总结,算法)