栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

设计一个有getMin和getMax功能的栈(C++实现)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

设计一个有getMin和getMax功能的栈(C++实现)

#include 
#include 
#include
#include 
using namespace std;

class ProStack {
public:
	ProStack() {//栈的构造函数,构造的同时标记最大值和最小值
		int in;//用来接收用户输入元素
		cout << "please input the element of stack:" << endl;
		while (cin >> in) {//结束输入:CTRL+D然后回车
			dominate.push(in);//存入主栈
			if (MaxSubsidiary.empty() || MaxSubsidiary.top() < in|| MaxSubsidiary.top() == in)
				MaxSubsidiary.push(in);
			if (MinSubsidiary.empty() || MinSubsidiary.top() > in || MinSubsidiary.top() == in)
				MinSubsidiary.push(in);
		}

	}
	void push(int in) {
		dominate.push(in);//存入主栈
		if (MaxSubsidiary.empty() || MaxSubsidiary.top() < in || MaxSubsidiary.top() == in)
			MaxSubsidiary.push(in);
		if (MinSubsidiary.empty() || MinSubsidiary.top() > in || MinSubsidiary.top() == in)
			MinSubsidiary.push(in);
	}
	void pop() {
		
		if (MaxSubsidiary.top()==dominate.top())
			MaxSubsidiary.pop();
		if (MinSubsidiary.top() == dominate.top())
			MinSubsidiary.pop();
		dominate.pop();//存入主栈
	}
	int MaxofStack() {
		return MaxSubsidiary.top();
	}
	int MinofStack() {
		return MinSubsidiary.top();
	}
private:
	stack dominate;//主栈,存放栈内的元素
	stack MaxSubsidiary;//辅栈,用来计算栈的最大值
	stack MinSubsidiary;//辅栈,用来计算栈的最小值
};

int main()
{  
	
	ProStack star;
	star.push(-1);
	star.push(100);
	cout << "Push(-1)&&push(100)后:" << endl;
	cout<<"最小值:" << star.MinofStack(); 
	cout << "   最大值:" << star.MaxofStack() << endl;
	star.pop();
	cout << "Pop()后:" << endl;
	cout << "最大值:" << star.MaxofStack() << endl;
	return 0;

}




思路:在创建栈的时候每输入一个元素便标记好当前的最大值和最小值,分别用两个栈进行记录。

方法一(如上述代码所示):当且仅当输入元素比最大(小)值的栈中的栈顶元素更大(小)或相等时,才将该输入元素压入最大(小)值栈中。

 

方法二:不论当前元素为何值,都要对最大(小)值栈进行入栈操作。只是,如果输入值比最大(小)栈中的栈顶元素大(小),则将输入值压入栈;反之,则将最大(小)值的栈顶元素重复压入栈内。

 

方案一和方案二其实都是用 MaxSubsidiary和MinSubsidiary 栈保存着 dominate栈 每一步的最小值和最大值。共同点是所有操作的时间复杂度都为O(1)、空间复杂度都为O(n)。区别是:方案一中stackMin压入时稍省空间,但是弹出操作稍费时间;方案二中stackMin压入时稍费空间,但是弹出操作稍省时间。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/648261.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号