-
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 }