给出C++代码,编撰这份代码的题目(有点意思(╯﹏╰))(2021/07/15)
作者:互联网
如题,其实是两年前写的C++代码,但是我忘记了当时的代码思路,现在整理了一下,痛苦(╬ ̄皿 ̄)=○
【建议放缩浏览器的页面比例,看代码方便,复习自用】
#include <iostream>
using namespace std;
//可以确定了,当前代码是,
//给定多组测试输入数据:每组的输入结构:栈总元素n 和 出栈顺序数组outseq[n]
//输出:判断每组的出栈顺序是否正确,输入完所有测试组的数据,按每组出栈数据正确输出"Yes\n",错误输出"No\n",最后一组结果输出完无"\n";
int main(){
int b[]={0};//存储判断每一条测试数据中是否栈内有元素"无:1","有:2"的数组
for(int i=0;;i++){ //循环
int n;
b[i]={0};//重置储存当前测试数据判断有无元素的数组元素b[i]=0;
cin>>n;//输入数值到 n(栈内总个数)
if(n==0){ //判断 0,则检查栈内是否有元素
int j=0;
while(b[j]){ //开始循环b[]数组元素
if(b[j]==1){ //判断最后一位元素值的是否为 1
if(b[j+1]) cout<<"Yes"<<endl;
else cout<<"Yes";
}
if(b[j]==2){ //判断最后一位元素值的是否为 2
if(b[j+1]) cout<<"No"<<endl;
else cout<<"No";
}
j++;
}
break; //结束for的大循环
}
int outseq[n];//出栈顺序数组
for(int j=0;j<n;j++)cin>>outseq[j]; //循环输入数值到outseq数组内,//保存当次的测试数据,
int Stack[n];//入栈数组,默认入栈顺序:1=>2=>3=>4...与
int top=-1, //栈顶默认-1起始点(0位置==第一的元素位置)
outindex=0, //记录出栈序列
innum=1; //记录入栈序列
while(outindex<n){//栈出记录数小于栈内总个数
if(top>=0 && Stack[top]==outseq[outindex]){ //匹配出栈元素
//(条件:
//1、栈内有元素 (栈顶位置>=0)
//且 2、栈顶位置的元素值等于outseq[出栈记录数位置数(判断成功时出栈数才能自加一,就定死了outseq[outindex]侧条件 ]的值)
//等价于循环判断Stack入栈数组的栈顶元素与outseq出栈表是否匹配,不匹配继续入栈,直到匹配则出栈,继续循环判断,直至outindex指完outseq数组或入栈爆仓)
top--; //栈顶减一
outindex++; //出栈记录数加一
}else{
if(innum>n)break; //无元素入栈,跳出while循环 (入栈爆仓,中断循环)
top++; //栈顶位置加一
Stack[top]=innum; //栈数组填充入栈记录数,即按默认入栈顺序:1=>2=>3=>4...入栈
innum++; //入栈记录数加一
}
}
if(outindex>=n){ //判断出栈记录数是否大于等于栈的总个数,即判断栈内元素是否出栈完毕
b[i]=1;//栈内无元素
}else{
b[i]=2;//栈内有元素
}
}
}
好了,整理出来了,代码核心思路是:模拟入栈操作,边入栈,边匹配给定的出栈表元素,不正确继续入栈,直到匹配成功,后继续判断下一个栈顶是否匹配出账表,循环往复,直到入栈爆仓无法继续入栈(入栈记录数大于栈内总数【默认入栈顺序:1=>2=>3=>4......】),保存本次测试出栈表数据是否正确的数据,接下组测试数据,直到无测试数据,按要求完成输出出栈表正确与否的判断数据。
标签:出栈,07,outseq,代码,元素,栈顶,C++,栈内,入栈 来源: https://www.cnblogs.com/linger18/p/15013678.html