#include<stdio.h> #include<stack> #include<queue> //返回是或者否,所以用bool类型 //形参数采用了引用的方式,更为高效 bool check_is_valid_order(std::queue<int> &order){ //建立模拟栈, 和序列头进行比较 std::stack<int> S; int n = order.size(); // 1到n的数字序列按顺序入栈 /* while(n){ printf("%d\n",order.front()); order.pop(); n--; }*/ for(int i = 1; i <= n; i++){ //按顺序写入 1~n // assert(!S.empty()); S.push(i); //pop之前一定要判断是否为空 //push之前一定要判断是否为满 while(!S.empty() && (S.top() == order.front() )){ //重复判断 printf("%d\n",i); printf("%d\n",S.top()); printf("%d\n",order.front()); S.pop(); order.pop(); } } //所有数据都判断完进行返回 if(!S.empty()){ return false; } return true; } int main(){ int n; int train; // scanf("%d", &n); while(n){ scanf("%d", &train); while(train){ std::queue<int> order; order.push(train); for(int i = 1; i < n; i++){ //提前写入了一位 scanf("%d", &train); order.push(train); } if(check_is_valid_order(order)){ printf("yes\n"); }else{ printf("no\n"); } scanf("%d", &train); //输入结束的标记 } scanf("%d", &n); //输入结束的标记 } return 0; }
使用栈和队列模拟出栈,入栈过程
猜你喜欢
转载自blog.csdn.net/liu_fei_er/article/details/80181113
今日推荐
周排行