C++使用两个栈实现一个可以获取栈中最大值和最小值的栈
来源:互联网 发布:php tp框架分页源代码 编辑:程序博客网 时间:2024/06/16 15:18
#include <iostream>
#include <stack>
struct stack_pro {
std::stack<int> stk_data;
std::stack<int> stk_min;
};
void push(stack_pro &stk, const int &num);
void pop(stack_pro &stk, int & tag);
void getmin(stack_pro &stk, int &getmin_tag, int &min);
int main()
{
stack_pro stk;
int tag = 0;
int getmin_tag = 0;
int min;
int arr[8] = { 3, 5, 6, 7, 1 };
for (int i = 0; i < 5; ++i)
{
push(stk, arr[i]);
getmin(stk, getmin_tag, min);
if (getmin_tag == 0)
{
std::cout << min << std::endl;
}
}
std::cout << std::endl;
for (int i = 0; i < 5; ++i)
{
getmin(stk, getmin_tag, min);
if (getmin_tag == 0)
{
std::cout << min << std::endl;
}
pop(stk, tag);
}
system("pause");
return 0;
}
void push(stack_pro &stk, const int &num)
{
if (stk.stk_data.empty())
{
stk.stk_data.push(num);
stk.stk_min.push(num);
}
else
{
stk.stk_data.push(num);
if (num <= stk.stk_min.top())
{
stk.stk_min.push(num);
}
}
}
void pop(stack_pro &stk, int & tag)
{
if (stk.stk_data.empty())
{
tag = -1; //tag = -1,无法弹出栈顶元素
}
else if (stk.stk_data.top() == stk.stk_min.top())
{
stk.stk_data.pop();
stk.stk_min.pop();
}
else
stk.stk_data.pop();
}
void getmin(stack_pro &stk, int &getmin_tag,int &min)
{
if (stk.stk_data.empty())
{
getmin_tag = -1;
}
else
{
getmin_tag = 0;
min = stk.stk_min.top();
}
}
#include <stack>
struct stack_pro {
std::stack<int> stk_data;
std::stack<int> stk_min;
};
void push(stack_pro &stk, const int &num);
void pop(stack_pro &stk, int & tag);
void getmin(stack_pro &stk, int &getmin_tag, int &min);
int main()
{
stack_pro stk;
int tag = 0;
int getmin_tag = 0;
int min;
int arr[8] = { 3, 5, 6, 7, 1 };
for (int i = 0; i < 5; ++i)
{
push(stk, arr[i]);
getmin(stk, getmin_tag, min);
if (getmin_tag == 0)
{
std::cout << min << std::endl;
}
}
std::cout << std::endl;
for (int i = 0; i < 5; ++i)
{
getmin(stk, getmin_tag, min);
if (getmin_tag == 0)
{
std::cout << min << std::endl;
}
pop(stk, tag);
}
system("pause");
return 0;
}
void push(stack_pro &stk, const int &num)
{
if (stk.stk_data.empty())
{
stk.stk_data.push(num);
stk.stk_min.push(num);
}
else
{
stk.stk_data.push(num);
if (num <= stk.stk_min.top())
{
stk.stk_min.push(num);
}
}
}
void pop(stack_pro &stk, int & tag)
{
if (stk.stk_data.empty())
{
tag = -1; //tag = -1,无法弹出栈顶元素
}
else if (stk.stk_data.top() == stk.stk_min.top())
{
stk.stk_data.pop();
stk.stk_min.pop();
}
else
stk.stk_data.pop();
}
void getmin(stack_pro &stk, int &getmin_tag,int &min)
{
if (stk.stk_data.empty())
{
getmin_tag = -1;
}
else
{
getmin_tag = 0;
min = stk.stk_min.top();
}
}
阅读全文
0 0
- C++使用两个栈实现一个可以获取栈中最大值和最小值的栈
- 实现可以获取最小值的栈
- 【题目6】如何设计一个可以获取最小值的栈
- 设计一个可以获取最小值功能的栈
- 双栈队列实现快速获取队列最大值最小值
- c 获取数组最大值和最小值
- Javascript中获取数组最大值和最小值的方法
- 两个数的最大值和最小值*
- Javascript获取数组中最大值和最小值
- 获取数组中最大值和最小值
- 如何实现具有最大值、最小值和中间值的栈和队列
- 如何实现具有最大值、最小值和中间值的栈和队列
- 不使用比较运算就可以求出两个数的最大值与最小值
- C中各种类型的最大值和最小值
- 有趣的题目系列一:实现具有最大值、最小值、中间值的栈和队列
- java 获取数组的最大值和最小值
- 查找一个序列的最大值和最小值
- Java中Integer的最大值和最小值
- Xamarin.Forms 用户界面——控件
- Aandroid中https请求的单向认证
- android获取屏幕宽高和状态栏高度
- Java基本数据类型
- 双链表
- C++使用两个栈实现一个可以获取栈中最大值和最小值的栈
- 51nod 1119 机器人走方格 V2
- tensorflow(Python)多线程程序
- 大数据应用程序最佳选择:SQL还是NoSQL
- Aandroid中https请求的双向认证
- 计算某时间段含有假期的天数
- 【译】Android Architecture Components
- printf 参数
- FFmpeg曝任意文件读取漏洞