【PAT甲级 stack queue的使用】1051 Pop Sequence (25 分) C++ 全部AC

题目

在这里插入图片描述


思路

维护三个集合:核心栈、数字队列、目标队列

详细思路见注释
在这里插入图片描述


题解 C++

#include<iostream>
#include<stack>
#include<queue>
using namespace std;
int main() {
	int stackSize, len, total;
	cin >> stackSize >> len >> total;

	for (int i = 0; i < total; i++) {
		stack<int> ss;//核心栈
		queue<int> in;//数字队列
		queue<int> out;//目标队列

		//输入数字队列
		for (int i = 1; i <= len; i++) {
			in.push(i);
		}
		//输入目标队列
		for (int i = 0; i < len; i++) {
			int t;
			cin >> t;
			out.push(t);
		}
		//模拟栈:判断目标序列是否成立
		while (true) {
			if (ss.size() > stackSize) {//核心栈溢出:失败
				cout << "NO\n";
				break;
			}
			else if (ss.size() == 0) {//核心栈为空,则从数字队列中取出一个放进去
				ss.push(in.front());
				in.pop();
			}

			if (ss.top() == out.front()) {//核心栈顶元素=目标队列头元素
				ss.pop();//核心栈出栈
				out.pop();//目标队列出队
			}
			else {//栈顶元素不等于目标元素
				if (in.size() == 0) {//数字队列已空:失败
					cout << "NO\n";
					break;
				}
				ss.push(in.front());//核心栈入栈
				in.pop();//数字序列出栈
			}

			if (out.size() == 0) {//目标队列为空: 成功
				cout << "YES\n";
				break;
			}
		}
	}
	system("pause");
}

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章