7-6 最小栈设计并实现一个MinStack类分数 10

最小栈设计并实现一个MinStack类,要求至少含有以下三种方法

一、push方法:将一个整数进行压栈

二、pop方法:弹出栈顶元素

三、getmin方法:输出栈内最小元素

输入格式:

第一行输入一个N,表示接下来要操作的数量

随后N行表示操作:

push方法后跟要压栈的元素

pop方法、getmin方法后不跟任何元素

说明:假设不包含其他无效输入,以及在执行getmin、pop方法时栈不为空

样例:">样例:">样例:">样例:">样例:">输出样例:

输出栈内最小元素

输入样例:

5
push 2
push 3
push 1
pop
getmin

输出样例:

2

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

这道题其实没必要按题目定义一个MinStack类,直接栈,系统也给你判对,就完事了

方法一:
#include<bits/stdc++.h>
using namespace std;

void  getmin(stack<int>c)  
{
	stack<int>d;     //辅助栈,用于储存最小值
	d.push(c.top()); //将c栈中的栈顶元素放入d栈中,用于比较
	while(c.size()>0) //防止溢出
	{
		if(c.top()<d.top())
			d.push(c.top()); //将更小的数字存入d栈中,c栈中删除该元素         
		c.pop();           //比较一次就删除该元素
	}
	cout<< d.top()<<endl;     //注意队列和栈的区别,队列是从尾插入,而栈是从头插入,所以此时b栈的栈首就是最小的; 
}

int main ()
{
	stack<int>s;      
	char  zl[10];    //用来判断输入的是push还是pop 
	int n,x;
	cin>>n;
	while(n--)
	{
		cin>>zl;          //输入push或pop 
		if(zl[1]=='u')      //push和pop第二个字符不同,我们就选择这两个字符来区分这两个单词 
		{
			cin>>x;
			s.push(x);
		}
		else if(zl[1]=='o')
			s.pop();
		else
		    {
		    	getmin(s);

	        }
    }
	return 0;
}

这就没必要写类了,甚至你可以选择一个主函数写完,但是如果你想知道用类怎么写的话,那就看下面的这个代码 ,其实跟上面没差多少,就加上class minstack操作一波就ok了  ^0^

方法二:
#include<bits/stdc++.h>
using namespace std;
class minstack{
	private:
		stack<int> c;                   //名为c的栈 
public:
	minstack(stack<int>k)                  //构造 
	{
		c=k;                            //用于主函数的栈s传进来 
	}
void  getmin()  
{
	stack<int>d;     //辅助栈,用于储存最小值
	d.push(c.top()); //将c栈中的栈顶元素放入d栈中,用于比较
	while(c.size()>0) //防止溢出
	{
		if(c.top()<d.top())
			d.push(c.top()); //将更小的数字存入d栈中,c栈中删除该元素         
		c.pop();           //比较一次就删除该元素
	}
	cout<< d.top()<<endl;     //注意队列和栈的区别,队列是从尾插入,而栈是从头插入,所以此时b栈的栈首就是最小的; 
}

};

int main ()
{
	stack<int>s;      
	char  zl[10];    //用来判断输入的是push还是pop 
	int n,x;
	cin>>n;
	while(n--)
	{
		cin>>zl;          //输入push或pop 
		if(zl[1]=='u')      //push和pop第二个字符不同,我们就选择这两个字符来区分这两个单词 
		{
			cin>>x;
			s.push(x);
		}
		else if(zl[1]=='o')
			s.pop();
		else
		    {
		    	  minstack m(s);          //把栈s传到minstack类; 
				  m.getmin();              //调用最小栈函数求最小 
	        }
    }
	return 0;
}

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值