如何做出栈的合法性,有大神解答吗

hnust_scx 2017-03-24 06:26:36

已知自然数1,2,...,N(1<=N<=100)依次入栈,请问序列C1,C2,...,CN是否为合法的出栈序列。

输入包含多组测试数据。
每组测试数据的第一行为整数N(1<=N<=100),当N=0时,输入结束。

对于每组输入,输出结果为一行字符串。
如给出的序列是合法的出栈序列,则输出Yes,否则输出No。
样例输入
5
3 4 2 1 5
5
3 5 1 4 2
0
样例输出
Yes
No
如何来完成呢,用了很多方法都不对
没人告诉我吗
...全文
162 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
yi19861209 2017-03-26
  • 打赏
  • 举报
回复
gaozeng851998821 2017-03-24
  • 打赏
  • 举报
回复
用一个辅助栈,按照数据进栈的顺序模拟数据压入,和出栈数据进行比较 bool IsPopOrder(vector<int> pushV,vector<int> popV) { stack<int> temp; vector<int>::const_iterator itPush = pushV.begin(); vector<int>::const_iterator itPop = popV.begin(); for(;itPop!=popV.end();++itPop){ if(!temp.empty() && temp.top()==*itPop){ temp.pop(); continue; } for(;itPush != pushV.end(); ++itPush){ if(*itPush == *itPop){ break; } else{ temp.push(*itPush); } } if(itPush == pushV.end()) return false; ++itPush; } return true; }

69,370

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧