定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)

  1.  

     1 #define STACK_LEN 50  
     2 
     3 typedef struct  
     4 {  
     5      int     data;  
     6 
     7      int     min;  
     8 } StackItem;  
     9 
    10 typedef struct  
    11 {  
    12      StackItem      data[ STACK_LEN ];  
    13      int   top;  
    14 } Stack;  
    15 
    16 void push( stack *S, int val )  
    17 { 
    18      S->data[ S->top ].data = val;  
    19      if ( ( S->top )> 0 )  // 保证栈顶元素中的min始终为当前栈中最小值
    20      {  
    21            if ( val < ( S->data[ S->top - 1 ].min ) ) // 如果当前push进的元素小于栈中最小元素值  
    22                 S->data[ S->top ].min = val;   // 把当前元素置为栈中最小元素值 
    23            else // 否则,不更新  
    24                 S->data[ S->top ].min = S->data[ S->top - 1 ].min;   
    25      } 
    26      else  
    27            S->data[ S->top ].min = val;  
    28 
    29     S->top++; 
    30 
    31 }  
    32 
    33 int pop( stack *S )  
    34 {  
    35      return S->data[ S->top-- ].data;  
    36 }  
    37   
    38 int min( stack *S )  
    39 {  
    40      return S->data[ S->top ].min;  
    41 }

posted on 2012-04-04 13:27  NLP新手  阅读(3282)  评论(0编辑  收藏  举报

导航