ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2021-07-15 01:31:53  阅读:158  来源: 互联网

标签:出栈 07 outseq 代码 元素 栈顶 C++ 栈内 入栈


如题,其实是两年前写的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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有