1051 Pop Sequence (25 point(s))

本文详细解析了如何使用C++编程语言实现栈操作的模拟,通过具体的代码示例,展示了如何管理和验证栈在特定条件下的行为,确保其在一系列操作后能够达到预期状态。

Matter:

关键在于对栈的模拟。想想我们人是怎么模拟的,然后用机器语言模拟。记得最后的时候栈必须得是空的。

Code:

#include<iostream>
#include<stack>
using namespace std;

int main(){
	int M , N , K ;
	stack<int> s;//	这个放到外面来,手动清空一下 
	cin >> M >> N >> K; 
	for(int i = 1 ; i <= K ; i ++){
		
		//手动清空栈
		while(s.empty() == false){	 
			s.pop();
		} 
		
		//	Step1:保存数值 
		int d[1005] , index = 1;
		bool flag = true;
		for(int j = 1 ; j <= N ; j ++){
			scanf("%d" , &d[j]);	
		}
		
		// Step2:管理数据
		for(int j = 1 ; j <= N ; j ++){
			s.push(j);
			
			//如果超过了规定大小,错误 
			if(s.size() > M){
				flag = false;
				break;
			} 
			
			//当前元素的数值和当前位置的数值相同
			while(s.empty() == false && s.top() == d[index]) {
				s.pop();
				index ++;
			}
		} 
		
		//Step3: stack is empty and flag is true
		if(flag == true && s.empty() == true){
			cout << "YES" << endl; 
		}
		else{
			cout << "NO" << endl;
		}
	}	
	return 0;
} 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值