蓝桥备赛(13)- 链表和 list(下)

news/2025/3/10 3:19:18/

一、动态链表 - list (了解)

new 和 delete 是非常耗时的操作
算法比赛中,一般不会使使用 new 和 delete 去模拟实现一个链表
而且STL 里面的 list 的底层就是动态实现的双向循环链表,增删会涉及 new 和 delete,效率不高,竞赛中一般不会使用,这里了解一下即可。

1.1 创建 list

包含头文件<list>  , 使用方法和vector 差不多

#include <iostream>
#include <cstdio>
#include <list>
using namespace std;int main()
{list<int> lt;//创建一个存储int 类型的链表 return 0;
}

1.2 push_front/push_back

1) push_front : 头插

2)push_back:尾插

时间复杂度:O(1)

#include <iostream>
#include <cstdio>
#include <list>
using namespace std;void print(list<int>& i)
{for(auto e:i){cout << e << " " ;}cout << endl;
}int main()
{list<int> lt;//创建一个存储int 类型的链表 //尾插for(int i = 1;i<=5 ;i++){lt.push_back(i); print(lt);} //头插for(int i = 1;i <= 5 ; i++){lt.push_front(i);print(lt); } return 0;
}

1.3 pop_front / pop_back

1)pop_front : 头删

2)pop_back:尾删

时间复杂度:O(1)

	  //头删for(int i = 1;i<=6 ; i++){lt.pop_front(); } print(lt);//尾删 for(int i = 1;i<=2;i++){lt.pop_back() ;}print(lt);

1.4 所有测试代码

#include <iostream>
#include <cstdio>
#include <list>
using namespace std;void print(list<int>& i)
{for(auto e:i){cout << e << " " ;}cout << endl;
}int main()
{list<int> lt;//创建一个存储int 类型的链表 //尾插for(int i = 1;i<=5 ;i++){lt.push_back(i); print(lt);} //头插for(int i = 1;i <= 5 ; i++){lt.push_front(i);print(lt); } //头删for(int i = 1;i<=6 ; i++){lt.pop_front(); } print(lt);//尾删 for(int i = 1;i<=2;i++){lt.pop_back() ;}print(lt);return 0;
}

二、算法

2.1 排列顺序

B3630 排队顺序 - 洛谷

#include <iostream>
#include <cstdio>
using namespace std;const int N = 1e6 + 10;
int n,h;
int ne[N];int main()
{cin >> n;for(int i = 1;i<= n ; i++){cin >> ne[i];}cin >> h;//遍历链表for(int i = h;i;i = ne[i]){cout << i << " ";} return 0;
}

2.2 单向链表

#include <iostream>
#include <cstdio>
using namespace std;const int N = 1e5 + 10;
const int M = 1e6 + 10;//链表
int h,id,e[N],ne[N];
int mp[M];//mp[i]用来标记i 这个元素存储再什么位置 
int main()
{int q; cin >> q;//初始化id++;e[id] = 1;mp[1] = id; while(q--){int op,x,y;cin >> op >> x;int p = mp[x];//x 存的位置 if(op == 1)//尾部插入 {cin >> y;id++;e[id] = y;ne[id] = ne[p];ne[p] = id;mp[y] = id;//标记 y 这个位置 }else if(op == 2){cout << e[ne[p]] << endl;}else//删除 x 后面的元素 {ne[p] = ne[ne[p]];}}return 0;
}

2.3 队列安排

P1160 队列安排 - 洛谷

#include <iostream>
#include <cstdio>
using namespace std;const int N = 1e5 + 10;
//双向链表 
int pre[N],ne[N],h;int n,m;
bool st[N];//st[i] 表示 i 这个同学是否出队 
int main()
{cin >> n;//初始化pre[1] = h;ne[h] = 1;for(int i = 2;i<=n ; i++){int k,p;cin >> k >> p;if(p == 0){//i 放在 k 的左边ne[i] = k;pre[i] = pre[k];ne[pre[k]]	= i;pre[k] = i;}else//i 放在 k 的右边 {pre[i] = k;ne[i] = ne[k];pre[ne[k]] = i;ne[k] = i;}}cin >> m;while(m--){int x;cin >> x;if(st[x]) continue;ne[pre[x]] = ne[x];pre[ne[x]] = pre[x];st[x] = true;//表示X已经删除 }for(int i = ne[h];i ; i = ne[i]){cout << i << " ";}return 0;
} 

 

2.4 约瑟夫问题

P1996 约瑟夫问题 - 洛谷

#include <iostream>
#include <cstdio>
using namespace std;const int N = 110;
int n,m,ne[N];int main()
{cin >> n >> m;//创建循环链表for(int i = 1 ; i < n ; i++){ne[i] = i + 1;	} ne[n] = 1;//模拟游戏过程int t = n;for(int i = 1;i<=n;i++)//执行n次出圈操作 {for(int j = 1; j < m ; j++){t = ne[t];}cout << ne[t] << " ";ne[t] = ne[ne[t]];} 
}


http://www.ppmy.cn/news/1577963.html

相关文章

LINUX网络基础 [五] - HTTP协议

目录 HTTP协议 预备知识 认识 URL 认识 urlencode 和 urldecode HTTP协议格式 HTTP请求协议格式 HTTP响应协议格式 HTTP的方法 HTTP的状态码 ​编辑HTTP常见Header HTTP实现代码 HttpServer.hpp HttpServer.cpp Socket.hpp log.hpp Makefile Web根目录 H…

【Java开发指南 | 第三十四篇】IDEA没有Java Enterprise——解决方法

读者可订阅专栏&#xff1a;Java开发指南 |【CSDN秋说】 文章目录 1、新建Java项目2、单击项目名&#xff0c;并连续按两次shift键3、在搜索栏搜索"添加框架支持"4、勾选Web应用程序5、最终界面6、添加Tomcat 1、新建Java项目 2、单击项目名&#xff0c;并连续按两次…

【五.LangChain技术与应用】【12.LangChain语言模型介绍:AI语言处理的核心技术】

(敲黑板)各位老铁坐稳了!今儿咱们要深扒LangChain里最硬核的语言模型模块,这玩意儿简直就是AI界的"翻译官+编剧+军师"三合一。我翻烂了官方文档,结合全网20+篇技术贴,给你们整出这篇万字脱水指南! 一、LangChain是啥?——给大模型装个USB接口 想象你要用Cha…

使用 Node.js 部署高性能应用:从入门到进阶

使用 Node.js 部署高性能应用:从入门到进阶 大家好,我是你们的运维伙伴Echo_Wish。今天我们来探讨如何使用Node.js部署高性能应用。Node.js因其异步非阻塞I/O模型、高效的事件驱动架构以及强大的包管理器npm,成为了现代Web开发的重要工具。我们将从简单的应用入手,逐步深入…

10.RabbitMQ集群

十、集群与高可用 RabbitMQ 的集群分两种模式,一种是默认集群模式,一种是镜像集群模式&#xff1b; 在RabbitMQ集群中所有的节点(一个节点就是一个RabbitMQ的broker服务器) 被归为两类:一类是磁盘节点,一类是内存节点&#xff1b; 磁盘节点会把集群的所有信息(比如交换机、绑…

计算机三级网络技术知识点汇总【7】

第七章 路由器配置及使用 1. 路由器的基础知识 1.1 路由器的基本概念 路由器是工作在网络层的设备&#xff0c;负责将数据分组从源端主机经最佳路径传送到目的端主机&#xff0c;实现在网络层的互联。路由器工作在 TCP/IP 网络模型的网络层&#xff0c;对应于 OSI 网络参考模…

RuoYi框架添加自己的模块(学生管理系统CRUD)

RuoYi框架添加自己的模块&#xff08;学生管理系统&#xff09; 框架顺利运行 首先肯定要顺利运行框架了&#xff0c;这个我不多说了 设计数据库表 在ry数据库中添加表tb_student 表字段如图所示 如图所示 注意id字段是自增的 注释部分是后面成功后前端要展示的部分 导入…

【后端开发】go-zero微服务框架实践(goland框架对比,go-zero开发实践,文件上传问题优化等等)

【后端开发】go-zero微服务框架实践&#xff08;goland框架对比&#xff0c;go-zero开发实践&#xff0c;文件上传问题优化等&#xff09; 文章目录 1、go框架对比介绍2、go-zero 微服务开发实践3、go-zero 文件上传问题优化 1、go框架对比介绍 国内开源goland框架对比 1 go-…