题目:
定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。
要求函数min、push以及pop的时间复杂度都是O(1)。
思路:
在栈结构体中添加一个min最小值的变量,可以随时读取。
1.存储结构
typedef int SElemType; //变量类型
typedef struct LinkStackNode
{
SElemType minData;
SElemType data;
struct LinkStackNode *next;
}LinkStackNode, *pLinkStackNode;
2.进栈运算
bool Push_LinkStack(LinkStackNode *stack, SElemType value)
{
LinkStackNode *stackNode;
stackNode = (LinkStackNode*)malloc(sizeof(LinkStackNode));
stackNode->data = value;
if(stack->next == NULL)
{
stackNode->minData = value;
}else
{
if(stack->next->minData > value)
{
stackNode->minData = value;
}else
{
stackNode->minData = stack->next->minData;
}
}
stackNode->next = stack->next;
stack->next = stackNode;
return true;
}
3.出栈运算
bool Pop_LinkStack(LinkStackNode *stack, SElemType *value)
{
if(IsEmpty_LinkStack(stack))
{
return false;
}
LinkStackNode *stackNode , *p;
p = stack;
stackNode = p->next;
p->next = p->next->next;
*value = stackNode->data;
free(stackNode);
return true;
}
4.查找栈的最小值
bool Min_LinkStack(LinkStackNode *stack, SElemType *value)
{
if(IsEmpty_LinkStack(stack))
{
return false;
}
*value = stack->next->minData;
return true;
}