编程语言
首页 > 编程语言> > 给出C++代码,编撰这份代码的题目(有点意思(╯﹏╰))(2021/07/15)

给出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