java逻辑控制,洛谷题(验证栈序列)(学习)

今天学习了java语法中的逻辑控制部分。洛谷题解了一道验证栈序列。

下面总结一下:

java逻辑控制要点

1.大体逻辑上其实和C语言大差不差,就是选择结构,循环结构等等。

2.注意一下switch语句中()内部只能是整型,并且不能是复杂表达式

3.java的取模操作与C语言有点差别。C语言取模的两个数只能是整型(只能是byte和int)(long也不可以!!!),但是java中取模的两个数可以是浮点型

4.还有要注意的是,在需要条件判断的语句中,如if(),while(),for()等等,括号内部必须都是布尔表达式。例如:int a=1;while(a){ };这种是不合法的。可以写成while(a==1)这种判断,才能有用。

5.还有要熟练掌握的部分是java中的输入与输出。输出简单,这里提一下输入。

一般需要先写一个类----->>   Scanner scanner = new Scanner(System.in)

在类写好之后,我们可以写输入操作:

int a = scanner.nextInt();    (这里注意的就是,如果要输入不同数据类型的数据,那改一下nextInt就好,例如要输入浮点型就是double a = scanner.nextDouble即可)

这样我们就可以进行输入操作了


验证栈序列

这道题也是用到栈解决

解题思路需要总结复习一下:

输入两个序列,一个是入栈序列pushed(这个是自己输入并且确定的),一个是出栈序列poped(这个是自己输入,但需要判断是否正确的)

我们建一个栈stack,一个栈顶指针top这两个基本使用的东西。

我们需要做的是将pushed序列全部入栈,就可以写stack[ ++top ] = pushed[ i ]

然后判断poped序列的值的顺序是否和stack[ top ]从栈顶往下一一对应。

stack[ top] ==poped[ head ],由先进栈的后出栈就可以写出这个对应的语句

如果成立,top--,head++,继续找下一个是否对应

这样的话,如果全部符合,top就会指向栈底,那我们就判断top是否在循环结束后指向了栈底,如果成功,就是Yes

以上就是代码的核心逻辑部分。

以下是代码:

#include<stdio.h>
int main() {
	int q = 0;
	int n = 0;
	
	scanf("%d", &q);
	
	while (q--) {
		int top = -1;
		int head = 0;
		int pushed[100000];
		int poped[100000];
		int stack[100000];
		scanf("%d", &n);
		for (int i = 0; i < n; i++) {
			scanf("%d", &pushed[i]);
		}
		for (int i = 0; i < n; i++) {
			scanf("%d", &poped[i]);
		}
		for (int i = 0; i < n; i++) {
			//入栈
			stack[++top] = pushed[i];
			//如果入栈序列栈顶元素与对应顺序的出栈序列相同,就将入栈序列的栈顶元素弹出
			while (top>-1&&stack[top] == poped[head]) {
				top--;
				head++;
			}
			
		}
		if (top == -1)
			printf("Yes\n");
		else
			printf("No\n");
		
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值