实现一个栈,要求实现Push(入栈)、Pop(出栈)、Min(返回最小值)的时间复杂度为O(1)
程序员文章站
2022-06-03 13:32:33
...
- st入栈
- 如果minst为空,则入栈minst;
- 如果minst非空,或者minst的栈顶元素大于等于下一个入栈元素,minst也入栈该元素
- 如果st与minst站定元素相等,则出栈minst;无论怎样,st每次都需要出栈
MinStack.h
#pragma once
#include"Stack.h"
typedef struct MinStack
{
Stack st;
Stack minst;
}MinStack;
void MinStackInit(MinStack *ms);
void MinStackDestory(MinStack *ms);
void MinStackPush(MinStack *ms, DataType x);
void MinStackPop(MinStack *ms);
DataType MinStackTop(MinStack *ms);
int MinStackEmpty(MinStack *ms);
int MinStackSize(MinStack *ms);
int MinStackMin(MinStack *ms);
MinStack.c
#include "MinStack.h"
void MinStackInit(MinStack * ms)//初始化栈
{
assert(ms);
StackInit(&ms->st);
StackInit(&ms->minst);
}
void MinStackDestory(MinStack * ms)//销毁栈
{
assert(ms);
StackDestory(&ms->st);
StackDestory(&ms->minst);
}
void MinStackPush(MinStack * ms, DataType x)//入栈
{
assert(ms);
StackPush(&ms->st, x);
if (StackEmpty(&ms->minst) == 0
|| StackTop(&ms->minst) >= x)
{
StackPush(&ms->minst, x);
}
}
void MinStackPop(MinStack * ms)//出栈
{
assert(ms);
if (StackTop(&ms->st) == StackTop(&ms->minst))
{
StackPop(&ms->minst);
}
StackPop(&ms->st);
}
DataType MinStackTop(MinStack * ms)//获取栈顶元素
{
assert(ms);
return StackTop(&ms->st);
}
int MinStackEmpty(MinStack * ms)//判断栈空
{
assert(ms);
return StackEmpty(&ms->st);
}
int MinStackSize(MinStack * ms)//获取栈大小
{
assert(ms);
return StackSize(&ms->st);
}
int MinStackMin(MinStack * ms)//返回最小值
{
assert(ms);
return StackTop(&ms->minst);
}
下一篇: php并发对MYSQL造成压力的解决方法
推荐阅读
-
实现一个栈,要求pop,push,Min,时间复杂度为O(1)
-
算法————双栈实现队列、双队列实现栈、实现一个栈Push(出栈)Pop(入栈)Min(返回最小值的操作)的时间复杂度为O(1)
-
【每日一题】实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)
-
实现一个栈,要求实现Push(入栈)、Pop(出栈)、Min(返回最小值)的时间 复杂度为O(1)
-
O1的时间复杂度内实现栈的Push、Pop和min
-
实现一个出栈,入栈,返回最小值的操作的时间复杂度为O(1)的栈
-
实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值)的时间复杂度为O(1)
-
实现一个栈,要求实现出栈,入栈,返回最小值的操作,时间复杂度为O(1)
-
实现一个栈,push、pop、求栈中最小值min的时间复杂度为O(1)
-
实现一个栈:取栈中的最小值的时间复杂度为O(1)