C语言实现包含min函数的栈操作
- 思路:简单的栈很容易实现,重点是如何维护min最小值,最简单的想法,每次计算栈元素最小值存放到一个地方,显然时间复杂度成本过高。使用额外的栈来实现,比如说我依次入栈 5 7 8 6 3 2 4,那么设置记录最小值的栈存放 5 3 2。每次入栈时和最小值栈顶比较,判断是否需要记录。出栈同样比较是否需要弹出。
- 重点:双栈实现 辅助栈只记录降序元素
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param value int整型
* @return 无
*
* C语言声明定义全局变量请加上static,防止重复定义
*/
//
static int stack[300],min_s[300];
static int s_top=0,m_top=0;
void push(int value ) {
// write code here
//第一次入栈 该值作为最小值
if(m_top==0){
min_s[m_top++]=value;
}
else{
//小于之前的值 入最小维护栈
if(value<=min_s[m_top-1]){
min_s[m_top++]=value;
}
}
stack[s_top++]=value;
}
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param 无
* @return 无
*/
void pop() {
// write code here
if(stack[s_top-1]==min_s[m_top-1])
{
m_top--;
}
s_top--;
}
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param 无
* @return int整型
*/
int top() {
// write code here
return stack[s_top-1];
}
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param 无
* @return int整型
*/
int min() {
// write code here
return min_s[m_top-1];
}