定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(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 }
**************************************************************
我喜欢程序员,他们单纯、固执、容易体会到成就感;面对困难,能够不休不眠;面对压力,能够迎接挑战。他们也会感到困惑与傍徨,但每个程序员的心中都有一个比尔盖茨或是乔布斯的梦想,用智慧把属于自己的事业开创。其实我是一个程序员[=.=]
我喜欢程序员,他们单纯、固执、容易体会到成就感;面对困难,能够不休不眠;面对压力,能够迎接挑战。他们也会感到困惑与傍徨,但每个程序员的心中都有一个比尔盖茨或是乔布斯的梦想,用智慧把属于自己的事业开创。其实我是一个程序员[=.=]