210816算法日记:模拟数据结构

  • 1、滑动窗口----模拟队列
int k;cin>>k;
q[++tt]=k;//push操作
hh++;//pop操作
cout<<q[hh]<<endl;//front操作
if(hh>tt)cout<<"YES"<<endl;
else cout<<"NO"<<endl;//empty操作
  • 单调队列
  • 同样解决线性问题,典型就是滑动窗口(有种双端队列的既视感)
    for(int i=1;i<=n;i++) cin>>a[i];
    for(int i=1;i<=n;i++)
    {
        if(hh<=tt&&i-m+1>q[hh])hh++;
        //维护窗口长度
        while(hh<=tt&&a[q[tt]]>a[i])tt--;
        q[++tt]=i;
        if(i>=m)cout<<a[q[hh]]<<' ';
        //省去前面不满足滑动窗口长度的一小段
    }
  • 2、单调栈----模拟栈
int k;cin>>k;
st[++tt]=k;//push操作
tt--;//pop操作
cout<<st[tt];//top操作
if(tt==-1)cout<<"YES"<<endl;
else cout<<"NO"<<endl;//empty操作
  • 单调栈
  • 解决线性问题全靠自己发现,典型是牛剪头那题
#include<iostream>
using namespace std;
const int N=1e5+10;
int stk[N],tt=-1;
int main()
{
    int n;cin>>n;
    while(n--)
    {
        int x;cin>>x;
        while(tt!=-1&&stk[tt]>=x)tt--;
        //知道满足单调栈为止,不满足一直删直到为空
        if(tt!=-1)cout<<stk[tt]<<' ';
        else cout<<-1<<' ';
        stk[++tt]=x;
    }
    return 0;
}
  • 3、模拟单双链表、邻接表
  • 我是不想写,太费手了
  • link<-----模拟双链表
  • link<-----模拟单链表
  • 模拟邻接表一般都是建图时使用(还有拉链法模拟哈希表时),一般支持添加操作就行了
e[idx]=x;ne[idx]=h[k];h[k]=idx++;
  • 4、模拟堆
  • 删除和修改第几个插入的数一般用不到,详见link<----
  • 堆hh用的最多的还是stl里面的堆,现在说一下
cout<<h[1]<<endl;//top操作
cin>>x;h[++size]=x;up(x);//push操作
swap(1,size);size--;down(1)//pop操作
  • 建堆以及up、down操作的实现
//建堆
for(int i=1;i<=n;i++) cin>>h[i]; int size=n;
for(int i=n/2;i;i--)down(i);
//down操作
void down(int u)
{
    int t=u;
    if(u*2<=size&&h[u*2]<h[t])t=u*2;
    if(u*2+1<=size&&h[u*2+1]<h[t])t=u*2+1;
    if(u!=t)
    {
        swap(h[u],h[t]);
        down(t);
    }
}
//up操作
void up(int u)
{
    while(u/2>0&&h[u/2]>h[u])
    {
        swap(u/2,u);
        u=u/2;
    }
}
  • 5、模拟哈希表(unordered_set/map)
  • 蹲坑法(更优)
  • find()函数在insert时找到第一个没人的坑位都是从他的模出发,在query时找是否存在该数据也是从他的模出发(查到空还没查到该数据,该数据一定不存在)
int find(int x)
{
    int k=(x%N+N)%N;
    while(h[k]!=null&&h[k]!=x)
    {
        k++;
        if(k==N)k=0;
    }
    return k;
}
  • 拉链法
  • 单链表存模相同存在同一个链中,尽量保证N是质数减少冲突
int h[N],e[N],ne[N],idx;
void insert(int x)
{
    int k=((x%N)+N)%N;
    e[idx]=x,ne[idx]=h[k],h[k]=idx++;
}
//insert操作
bool find(int x)
{
    int k=((x%N)+N)%N;
    for(int i=h[k];i!=-1;i=ne[i])
    if(e[i]==x)return true;
    return false;
}
//count操作
  • 210816完结
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园2.0是高校信息化建设的新阶段,它面对着外部环境变化和内生动力的双重影响。国家战略要求和信息技术的快速发展,如云计算、大数据、物联网等,为智慧校园建设提供了机遇,同时也带来了挑战。智慧校园2.0强调以服务至上的办学理念,推动了教育模式的创新,并对传统人才培养模式产生了重大影响。 智慧校园建设的解决之道是构建一个开放、共享的信息化生态系统,利用互联网思维,打造柔性灵活的基础设施和强大的基础服务能力。这种生态系统支持快速迭代的开发和持续运营交付能力,同时注重用户体验,推动服务创新和管理变革。智慧校园的核心思想是“大平台+微应用+开放生态”,通过解耦、重构和统一运维监控,实现服务复用和深度融合,促进业务的快速迭代和自我演化。 智慧校园的总体框架包括多端协同,即“端”,它强调以人为中心,全面感知和捕获行为数据。这涉及到智能感知设备、超级APP、校园融合门户等,实现一“码”或“脸”通行,提供线上线下服务端的无缝连接。此外,中台战略是智慧校园建设的关键,包括业务中台和数据中台,它们支持教育资源域、教学服务域等多个领域,实现业务的深度融合和数据的全面治理。 在技术层面,智慧校园的建设需要分期进行,逐步解耦应用,优先发展轻量级应用,并逐步覆盖更多业务场景。技术升级路径包括业务数据化、数据业务化、校园设施智联化等,利用IoT/5G等技术实现设备的泛在互联,并通过人工智能与物联网技术的结合,建设智联网。这将有助于实现线上线下一网通办,提升校园安全和学习生活体验,同时支持人才培养改革和后勤管理的精细化。 智慧校园的建设不仅仅是技术的升级,更是对教育模式和管理方式的全面革新。通过构建开放、共享的信息化生态系统,智慧校园能够更好地适应快速变化的教育需求,提供更加个性化和高效的服务,推动教育创新和人才培养的高质量发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值