转自 http://blog.csdn.net/v_JULY_v/article/details/6278484
设计包含min函数的栈
定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。
要求函数min、push以及pop的时间复杂度都是O(1)。
- #define STACK_LEN 50
- typedef struct
- {
- int val;
- int min;
- } stack_item;
- typedef struct
- {
- stack_item data[STACK_LEN];
- int top;
- } stack;
- void push(stack *stk, int val)
- {
- stk->data[++stk->top].val = val;
- if (stk->top > 0)
- {
- if (val < stk->data[stk->top - 1].min)
- //如果当前push进的元素小于栈中最小元素
- stk->data[stk->top].min = val; //把当前元素置为栈中最小元素
- else
- //否则,不更新
- stk->data[stk->top].min = stk->data[stk->top - 1].min;
- }
- else
- stk->data[stk->top].min = val;
- }
- int pop(stack *stk)
- {
- return stk->data[stk->top--].val;
- }
- int min(stack *stk)
- {
- return stk->data[stk->top].min;
- }