这道题考查栈的知识点,要求实现一个栈,在对这个栈进行入栈和出栈以及返回最小栈元素时要求时间复杂度为O(1)。
方法一:
用两个栈,一个正常出入栈,另一个存最小栈,入栈的时候第一个站正常入,最小栈如果为空或者要入的data比最小栈的栈顶元素小的时候才给最小栈入栈。否则每次入栈的时候就将最小栈的栈顶元素再入。例如下图:
这样的话,出栈也是正常出,我们找最小元素的时候直接找最小栈的栈顶就ok了。代码如下:
#pragma once
#include"Stack.h"
typedef struct {
Stack s;
Stack m;
}MinStack;
void MinStackInit(MinStack *pMS)
{
StackInit(&(pMS->s));
StackInit(&(pMS->m));
}
void MinStackPush(MinStack *pMS,datatype data)
{
assert(pMS);
StackPush(&pMS->