Files
Harmon ec0bab599b ok
2022-05-11 19:11:24 +08:00

98 lines
1.7 KiB
C++

#include <iostream>
using namespace std;
#define MAXSIZE 100
//定义栈结构
typedef struct
{
int data[MAXSIZE]; //保存普通元素
int data_min[MAXSIZE]; //保存当前栈最小值
int top = -1; //栈针
int top_min = -1;
} Stack;
//判断栈是否为空
bool EmptyStack(Stack s)
{
if (s.top == -1)
{
return true;
}
return false;
}
//判断栈是否溢出
bool FullEmpty(Stack s)
{
if (s.top == MAXSIZE)
{
return true;
}
return false;
}
//压栈
void Push(Stack &s, int x)
{
if (!FullEmpty(s))
{
//如果最小值栈为空,直接将当前元素压栈
if (s.top_min == -1)
{
s.data_min[++s.top_min] = x;
}
//如果当前值小于辅助栈的栈顶元素,将其压入辅助栈
else if (x < s.data_min[s.top_min])
{
s.data_min[++s.top_min] = x;
}
//将当前值压入主栈
s.data[++s.top] = x;
}
}
//弹栈
int Pop(Stack &s)
{
if (!EmptyStack(s))
{
//如果辅助栈的栈顶元素等于主栈的栈顶元素,二者全部弹出
if (s.data[s.top] == s.data_min[s.top_min])
{
s.top--;
s.top_min--;
return s.data[s.top];
}
//否则将主栈元素弹出
else
{
return s.data[s.top--];
}
}
exit(0);
}
//获得栈中最小值
int min(Stack s)
{
if (s.top_min == -1)
{
cout << "当前栈为空" << endl;
exit(0);
}
//返回辅助栈的栈顶元素
return s.data_min[s.top_min];
}
int main()
{
Stack s;
Push(s, 2);
Push(s, 3);
cout << min(s) << endl;
Push(s, 1);
cout << min(s) << endl;
Pop(s);
cout << min(s) << endl;
Pop(s);
cout << min(s) << endl;
}