浙大数据结构线性结构4 Pop Sequence(个人学习笔记)

参考思路博客(我认为最简洁,但他代码略显复杂)

https://blog.youkuaiyun.com/solitarycccc/article/details/102874048

首先看题

题目大致意思

有一段从1开始到N的连续的数 ,可以通一个大小为M的栈弹出,形成上述顺序的输出,给定K组测试数据,注意所有的数必须通过栈来弹出,如样例第五个,6>5,不可以理解为栈里放5个数(2~6),7直接不入栈输出。坑了我好久。

思路:用数组模拟一个栈,如果栈顶的数等于输入的数(假设为n),栈顶数出栈,top--;如果不等于,则一直入栈,从1开始的数,直到栈顶数为n或者栈满。

以第五测试样例为例。

刚开始栈为空,top指向0,初始化Stack[top]==0;接收n=1,Satck【top】!=1;入栈从(1开始的到7自然数),top++,变为1;Stack【1】==1==n;top--,top=0;接收n=7,Stack【top】==0!=7,一直入栈,此处省略,Stack【5】=6;top==5;还是不等于7,但是栈已满,不行,为NO。

代码如下


#include <iostream>
using namespace std;
int Stack[1005] = { 0 };
int top = 0;
int M, N;
int Judge(int* Stack)
{
	top = 0;
	int n;
	int j = 1;
	int flag = 1;
	for (int i = 1; i <= N; i++)
	{
		scanf("%d", &n);
		if (Stack[top] != n)//栈顶不等于n
		{
			while (Stack[top] != n&&top<M)//一直入栈直到栈顶等于n,或者栈满
			{
				top++;
				Stack[top] = j;
				j++;
			}
			if (Stack[top] != n)//如果是栈满,凉凉,结果为No
				flag = 0;
			else//如果栈顶等于n,出栈
				top--;
		}
		else//栈顶相等出栈
		{
			top--;
		}
	}
	return flag;
}
int main()
{
	int  T;
	cin >> M >> N >> T;
	for (int k = 1; k <= T; k++)
	{
		if (Judge(Stack))
			printf("YES\n");
		else
			printf("NO\n");
	}
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值