每日一题——数字游戏(栈)

学习目标:

每天睡前是否感到浑浑噩噩,一天又在不知不觉中过去,回想我今天都干了什么呢?

啊~我这一天又什么也没干,好有罪恶感啊,不行,我明天一定要好好学算法(手动狗头)。

明日复明日,明日何其多?不要等明天啦,和小编一起,每天睡前一道算法题,不仅解决你一天的空虚,更能助你安心入眠,远离熬夜。还能学到一点算法知识。不要小看这些知识哦,不积跬步无以至千里,不积小流无以成江海。每位大佬都不是一夜成名,都是从小白做起,日积月累,终成大佬,和小编一起,每日一题,走向大佬之路吧!


学习内容:

我们的题基本都是一些较为基础,适合日(睡)常(前)看的题,不会让你一眼就看出答案,是稍稍一点脚就能摸到头绪,但是在想的过程中又一时不知如何实现,再一想,又柳暗花明,最终跟着小编的思路一起解决问题,有不同思路可以发在评论区,一起讨论。“你若在,我必回”。


我们今天的题目是关于栈的应用的一道题。先看题目:

 

现在有n个数字依次进入一个栈,每个数字a进入栈的时候,如果栈顶元素小于a,则会将栈顶元素弹出,新的栈顶元素如果仍然小于a,则会将新的栈顶元素继续弹出,直到栈顶元素大于等于a为止,a才会加入栈。 问n个数字依次进入后,最后栈里的数字依次是?

输入

输入第一行一个整数n(n<=100000),表示有n个数字依次进入栈。 接下来n行,每行一个整数,表示第i个数字。

输出

若干行,表示最后栈中的数字。

示例输入

5
5
3
2 
4
1

示例输出

5
4
1

首先,让我们回顾一下栈的特点,先进后出,后进先出。 用结构体来表示栈,小编喜欢用一个数组和一个栈顶指针来表示。在这道题中,就是定义一个100000的数组表示栈的存储空间和一个整型top表示栈顶指针。

接下来就是简单的一个循环加判断,大家应该都能写出来,就不在这里赘叙。直接看代码,不明白的可以在评论区留言讨论。

#include<stdio.h>
struct stk {
	int num[100000];
	int top;
};
int main() {
	int n,i;
	struct stk s;
	s.top=0;
	for(i=0; i<100000; i++) {
		s.num[i]=0;
	}
	scanf("%d",&n);
	int num[n];
	for(i=0; i<n; i++) {
		scanf("%d",&num[i]);
	}
	s.num[s.top]=num[0];
	for(i=1; i<n; i++) {
		if(s.num[s.top]>num[i]) {
			s.num[++s.top]=num[i];
		} else {
			while(s.num[s.top]<num[i] && s.top>=0) {
				s.num[s.top--]=0;
			}
			s.num[++s.top]=num[i];
		}
	}
	for(i=0; i<=s.top; i++) {
		printf("%d\n",s.num[i]);
	}
	return 0;
}

每天坚持是一件很累的事,即使很慢,但也不要停止。小编今天没时间写太多了,但也要坚持写,即使是一道很简单的题,大家一起加油! 

大家记得点赞收藏,防止找不到哦。


欢迎大家订阅小编的每日一题专栏,会每天更新,都是用心准备的哦!

若有不同思路,欢迎评论区留言,看到必回,Goodnight!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我的代码no摆烂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值