蒟蒻的数据结构乱谈(未完)

本文深入浅出地介绍了数据结构中的栈,包括栈的基本概念、典型应用实例以及如何使用C++实现栈。通过具体示例解释了单调栈的应用场景及其实现方法。

蒟蒻的辣鸡数据结构乱谈(不定时更新)

***我真是太弱了,什么也不会做,只好瞎谈一点简单的数据结构
注意:由于作者水平有限,前方将出现大量垃圾讲解,蒟蒻题目和指针***

1. 什么是数据结构
2. 简单的数据结构口胡
3. 简单数据结构模板
4. 蒟蒻题目乱做
大概要讲这些内容吧

什么是数据结构(Data Structure)

数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。

                                                                                                                                                                                                                             (

算了,这是我随便在网上粘的
反正看这个也看不太懂
说白了就是一种很屌的东西,把奇奇怪怪的数据组织起来,让它变得更高更快更强
我们下面就回来学习简单的数据结构(反正太难的我也不会)
我们从最简单的开始好了

栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。

好吧,这又是瞎粘的,还是用正常的语言翻译一下
就好比把盘子叠成一叠,显然为了不让盘子被打碎,每次都要从这一摞的顶部放盘子或者取盘子
栈就是这样的数据结构,每次都只在顶部操作
显然会看栈的人大多数是初学者,显然我需要写的详细一些

#include<iostream>
#include<cstdio>
using namespace std;
int s[100000],top;
void push(int x)//推入栈
{
  top++;
  s[top]=x;
}
void pop()//弹出栈顶元素
{
  top--;
}
int main()
{

}

你只需要维护一个栈顶的指针top,就可以乱搞了,每次调取都只调取s[top]就是栈顶元素了
这个东西也有stl来帮你实现

#include<iostream>
#include<stack>//栈的stl库
using namespace std;
stack<int>s;//定义一个int类型的栈s
int main()
{
  s.push(1);//推入元素1到栈顶
  s.push(-55);
  cout<<s.top()<<endl;//输出栈顶元素
  s.pop();//弹出栈顶元素
  cout<<s.top()<<endl;
}

s不需要像数组一样指明大小,stl已经帮你做好增大数组的操作了
大概常用的操作就是这些
还有常用的操作有empty(),size()等等,想要了解的可以上网查询。
好吧,这个栈看起来什么用都没有
实际上,我们用栈是在维护一个数列的处理顺序
例题什么的就算了吧
下面我们学习一项更高级的栈(这个东西更能体现栈的用处,否则栈除了存储数据之外没有算法上的帮助)

单调栈

单调递增或单调减的栈,跟单调队列差不多,但是只用到它的一端,利用它可以用来解决一些ACM/ICPC和OI的题目,如RQNOJ 的诺诺的队列等。

这个是网上莫名其妙的定义
显然我们也不知道什么是队列,所以这个定义对我们没有什么帮助
通俗地讲,单调栈就是指一些满足如下条件的栈

  • 从栈顶至栈底的元素单调递增或单调递减
  • 是个栈

    定义非常简单
    [Usaco2006 Nov]Bad Hair Day 乱发节 题目传送门
    题意
    这里写图片描述
    这个题目就是要我们大力找到每个牛所能看到的最远端点,然后大力一求和就可以了
    但是找最远端点不能太大力,O(n^2)肯定爆炸
    这时候使用单调栈就可以很好地解决问题
    维护一个从栈顶到栈底单调递增的单调栈
    怎么用呢?怎么维护呢?
    每次按顺序添加牛的身高,如果比栈顶元素大,则 栈顶的那头牛所能看见的最远端点就是新加的这头牛,也就是之间的牛他都能看见,记录一下,并且将栈顶元素弹出,重复该过程,直到栈为一个空栈或者小于栈顶元素。
    然后大力求和就可以了
    来一波die马

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define MAXN 80010
using namespace std;
long long ans;
struct fffff
{
  long long val,id;//结构体便于整体存储数据
}s[MAXN];
long long top,h[MAXN],n,maxx[MAXN];
int main()
{
  scanf("%lld",&n);
  for(int i=1;i<=n;i++)scanf("%lld",&h[i]);
  for(int i=1;i<=n;i++)
  {
    while(s[top].val<=h[i]&&top)
    {
      maxx[s[top].id]=i-1;
      top--;
    }
    s[++top].val=h[i];
    s[top].id=i;//大力插入
  }
  while(top)
  {
    maxx[s[top].id]=n;
    top--;
  }//剩下的牛是可以看见它之后的所有牛
  for(int i=1;i<=n;i++)ans+=(maxx[i]-i);//大力求和
  cout<<ans<<endl;
}

这个题就可以瞎写写过了
栈的知识大约就是这样,其他的简单习题可以到别的博主的博客里找一找学一学

队列

未完待续,不定时更新

基于TROPOMI高光谱遥感仪器获取的大气成分观测资料,本研究聚焦于大气污染物一氧化氮(NO₂)的空间分布与浓度定量反演问题。NO₂作为影响空气质量的关键指标,其精确监测对环境保护与大气科学研究具有显著价值。当前,利用卫星遥感数据结合先进算法实现NO₂浓度的高精度反演已成为该领域的重要研究方向。 本研究构建了一套以深度学习为核心的技术框架,整合了来自TROPOMI仪器的光谱辐射信息、观测几何参数以及辅助气象数据,形成多维度特征数据集。该数据集充分融合了不同来源的观测信息,为深入解析大气中NO₂的时空变化规律提供了数据基础,有助于提升反演模型的准确性与环境预测的可靠性。 在模型架构方面,项目设计了一种多分支神经网络,用于分别处理光谱特征与气象特征等多模态数据。各分支通过独立学习提取代表性特征,并在深层网络中进行特征融合,从而综合利用不同数据的互补信息,显著提高了NO₂浓度反演的整体精度。这种多源信息融合策略有效增强了模型对复杂大气环境的表征能力。 研究过程涵盖了系统的数据处理流程。前期预处理包括辐射定标、噪声抑制及数据标准化等步骤,以保障输入特征的质量与一致性;后期处理则涉及模型输出的物理量转换与结果验证,确保反演结果符合实际大气浓度范围,提升数据的实用价值。 此外,本研究进一步对不同功能区域(如城市建成区、工业带、郊区及自然背景区)的NO₂浓度分布进行了对比分析,揭示了人类活动与污染物空间格局的关联性。相关结论可为区域环境规划、污染管控政策的制定提供科学依据,助力大气环境治理与公共健康保护。 综上所述,本研究通过融合TROPOMI高光谱数据与多模态特征深度学习技术,发展了一套高效、准确的大气NO₂浓度遥感反演方法,不仅提升了卫星大气监测的技术水平,也为环境管理与决策支持提供了重要的技术工具。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值