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

一、动态链表 - 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]];
	} 
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/983860.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【VUE2】第二期——生命周期及工程化

目录 1 生命周期 1.1 介绍 1.2 钩子 2 可视化图表库 3 脚手架Vue CLI 3.1 使用步骤 3.2 项目目录介绍 3.3 main.js入口文件代码介绍 4 组件化开发 4.1 组件 4.2 普通组件注册 4.2.1 局部注册 4.2.2 全局注册 1 生命周期 1.1 介绍 Vue生命周期&#xff1a;就是…

正则表达式梳理(基于python)

正则表达式&#xff08;regular expression&#xff09;是一种针对字符串匹配查找所定义的规则模式&#xff0c;独立于语言&#xff0c;但不同语言在实现上也会存在一些细微差别&#xff0c;下面基于python对常用的相关内容进行梳理。 文章目录 一、通用常识1.通配符ps.反义 2.…

《C++ 构造、拷贝构造与析构函数:对象的诞生、克隆与消逝之旅》

类的6个默认成员函数 构造函数 是对一个对象实例化时的初始化 例如在C语言中写的堆的时候要初始化StackInit&#xff0c;而c祖师爷写的构造函数本质上就是自动调用初始化。 构造函数默认构造函数自己写的&#xff08;符合规定的显示表达式&#xff09; 注&#xff1a;一般情况下…

使用服务器搭建无门槛ChatGPT WEB应用LobeChat

一、服务器实例配置 ‌实例选型‌ ‌推荐配置‌&#xff1a;‌2核4GB内存‌&#xff0c;保障AI推理和并发访问的流畅性‌67。‌操作系统‌&#xff1a;选择 ‌Ubuntu 22.04 LTS‌&#xff0c;适配Docker环境与LobeChat依赖库‌23。‌安全组规则‌&#xff1a;开放以下端口&…

C/S架构与B/S架构

一、定义与核心区别 C/S架构&#xff08;Client/Server&#xff0c;客户端/服务器&#xff09; 客户端需安装专用软件&#xff08;如QQ、企业ERP系统&#xff09;&#xff0c;直接与服务器通信。服务器端通常包括数据库和业务逻辑处理1。特点&#xff1a;客户端承担部分计算任务…

鸿蒙Next-应用检测、安装以及企业内部商店的实现

一、企业内部应用检测和更新升级 A应用检测是否安装B应用 canOpenApp():boolean{ try { let link schB://com.example.test/open; // 替换成你目标应用的link串儿 let canOpen bundleManager.canOpenLink(link); console.log("canOpen:"canOpen…

车载网络测试-DBC文件解读

目录 1 背景2 DBC结构2.1 Networks2.2 ECUs&#xff08;Electronic Control Units&#xff09;2.3 Network Nodes2.4 Message&#xff08;报文&#xff09;2.4.1 Message定义、作用、示例2.4.2 报文Attribute&#xff08;属性&#xff09;2.4.2.1 常见的报文Attributes2.4.2.2 …

《A++ 敏捷开发》- 18 软件需求

需求并不是关于需求 (Requirements are not really about requirements) 大家去公共图书馆寄存物品&#xff0c;以前都是扫二维码开箱&#xff0c;有些图书馆升级了使用指纹识别。 “是否新方法比以前好&#xff1f;”我问年轻的开发人员。 “当然用指纹识别好。新技术&#x…

SQL经典查询

查询不在表里的数据&#xff0c;一张学生表&#xff0c;一张学生的选课表&#xff0c;要求查出没有选课的学生&#xff1f; select students.student_name from students left join course_selection on students.student_idcourse_selection.student_id where course_selecti…

大语言模型进化论:从达尔文到AI的启示与展望

文章大纲 引言大语言模型中的“进化论”思想体现遗传变异过度繁殖和生存斗争大模型“过度繁殖”与“生存竞争”机制解析**一、过度繁殖:技术迭代的指数级爆发****二、生存竞争:计算资源的达尔文战场****三、生存竞争胜出关键要素****四、行业竞争格局演化趋势**核心结论自然选…

SSM架构 +Nginx+FFmpeg实现rtsp流转hls流,在前端html上实现视频播放

序言&#xff1a; 本文介绍通过SSM架构 NginxFFmpeg实现rtsp流转hls流&#xff0c;在前端html上实现视频播放功能。此方法可用于网络摄像头RTSP视频流WEB端实时播放。&#xff08;海康和大华都可以&#xff09;&#xff0c;我使用的是海康 步骤一&#xff1a;安装软件 FFmpeg…

Hadoop管理页看不到任务的问题

这个yarn分配任务了但是为空 在$HADOOP_HOME/conf/mapred-site.xml 原来的配置文件基础之上添加&#xff1a; <property><name>mapreduce.framework.name</name><value>yarn</value></property> 重启之后就好了

腾讯云TBDS获金融信创实验室全项适配认证 打造国产化大数据平台标杆

点击蓝字⬆ 关注我们 本文共计1605字 预计阅读时长5分钟 近日&#xff0c;腾讯云大数据套件软件TBDS V5.3、数据仓库TCHouse V3.0通过金融信创生态实验室&#xff08;以下简称“实验室”&#xff09;的适配验证。 本测试基于典型金融业务场景&#xff0c;在全信创环境下&#x…

人工智能神经网络基本原理

MP 神经元数学模型 MP 模型是神经网络领域的早期模型&#xff0c;它模仿了神经元的基本结构和工作原理。 人工神经元是一个多输入、单输出的信息处理单元&#xff0c;是对生物神经元的建模。建模方式可以有很多种&#xff0c;不同的建模方式就意味着不同的人工神经元结构。 比…

WSL + 4050 部署 Deepseek-7B 蒸馏模型

操作环境&#xff1a;WSL - Oracle Linux RTX 4050 Laptop edition 渣渣笔记本实在是跑不了更大模型了&#x1f602; 整体架构 WSL 配置显卡加速环境 总体流程 安装教程&#xff1a;https://zhuanlan.zhihu.com/p/681092042 总体流程&#xff1a; 优化 WSL 系统配置&#x…

C++入门——输入输出、缺省参数

C入门——输入输出、缺省参数 一、C标准库——命名空间 std C标准库std是一个命名空间&#xff0c;全称为"standard"&#xff0c;其中包括标准模板库&#xff08;STL&#xff09;&#xff0c;输入输出系统&#xff0c;文件系统库&#xff0c;智能指针与内存管理&am…

简单的二元语言模型bigram实现

内容总结归纳自视频&#xff1a;【珍藏】从头开始用代码构建GPT - 大神Andrej Karpathy 的“神经网络从Zero到Hero 系列”之七_哔哩哔哩_bilibili 项目&#xff1a;https://github.com/karpathy/ng-video-lecture Bigram模型是基于当前Token预测下一个Token的模型。例如&#x…

用Deepseek写一个五子棋微信小程序

在当今快节奏的生活中&#xff0c;休闲小游戏成为了许多人放松心情的好选择。五子棋作为一款经典的策略游戏&#xff0c;不仅规则简单&#xff0c;还能锻炼思维。最近&#xff0c;我借助 DeepSeek 的帮助&#xff0c;开发了一款五子棋微信小程序。在这篇文章中&#xff0c;我将…

【Raspberry Pi 5 测评】无显示器上手指南

【Raspberry Pi 5 测评】无显示器上手指南 一、硬件开箱二、系统安装2.1 安装 Raspberry Pi Imager2.2 安装 Rasberry Pi OS 三、系统登录3.1 ping测试3.2 SSH登录 四、远程桌面4.1 启用VNC服务4.2 使用VNC客户端 五、软件安装5.1 替换软件源5.2 安装常用软件 六、参考链接 摘要…

图像标注与OCR工具分析

图像标注和OCR&#xff08;光学字符识别&#xff09;工具的代码进行详细分析。该工具允许用户在图像上进行矩形标注&#xff0c;使用 OCR 对标注区域进行文本识别&#xff0c;并将结果保存为 Excel 文件。同时&#xff0c;用户可以保存和加载标注&#xff0c;清除标注&#xff…