蓝桥之链表

最近真的特别焦虑,体测、比赛和考试一个接一个,让人喘不过气来QAQ

甚至考试和比赛还有冲突,sad

最近因为看了牙,打了药的缘故,一直在吃素QAQ

本来今天还想写个知识点总结的,但是太晚了,现在已经快凌晨1点了,而且黑灯瞎火的坐在床上小心翼翼(怕打扰到舍友睡觉)的敲代码真的很痛苦,以后有时间就补上!

明天早上七点半还得到小操场集合,学校在搞社团文化活动QAQ


1.自行车停放

题目描述

有 n 辆自行车依次来到停车棚,除了第一辆自行车外,每辆自行车都会恰好停放在已经在停车棚里的某辆自行车的左边或右边。(e.g.停车棚里已经有 3辆自行车,从左到右编号为:3,5,1。现在编号为2的第4辆自行车要停在5 号自行车的左边,所以现在停车棚里的自行车编号是:3,2,5,1)。给定n辆自行车的停放情况,按顺序输出最后停车棚里的自行车编号。n < 100000。

输入描述

第一行一个整数 n 。第二行一个整数 x 。表示第一辆自行车的编号。 以下n -1行,每行3个整数x,y,z。z = 0 时,表示编号为 x 的自行车恰停放在编号为 y 的自行车的左边。z = 1时,表示编号为 x 的自行车恰停放在编号为 y 的自行车的右边。

输出描述

从左到右输出停车棚里的自行车编号

输入输出样例

示例

输入

4

3
1 3 1
2 1 0
5 2 1

输出

3 2 5 1 


按照书中的教程,应该是用个链表来做,但是为了省事,我用的vector数组

先把第一个给定的元素放到vector数组中,然后循环来判断每组给定的数据,用find找到编号为y的自行车,如果z = 0,就把x 插入insert()到y的左边,否则,插入到y的右边。最后按格式输出。


C++ 

#include <iostream>
#include<vector>
#include<algorithm>
using namespace std;
const int N = 100010;
vector<int> a(N);
int main()
{int n,x;cin>>n>>x;a[0] = x;for(int i = 1;i<n;i++){int y,z;cin>>x>>y>>z;auto it = find(a.begin(),a.end(),y);if(z == 0) a.insert(it,x);else a.insert(it + 1,x);   }cout<<a[0];for(int i = 1;i<n;i++)cout<<" "<<a[i];return 0;
}

2.小王子单链表

题目描述

小王子有一天迷上了排队的游戏,桌子上有标号为 1- 10 的 10 个玩具,现在小王子将他们排成一列,可小王子还是太小了,他不确定他到底想把那个玩具摆在哪里,直到最后才能排成一条直线,求玩具的编号。已知他排了M次,每次都是选取标号为 X 个放到最前面,求每次排完后玩具的编号序列。


要求一:采用单链表解决

输入描述

第一行是一个整数 M,表示小王子排玩具的次数。
随后 M 行每行包含一个整数 X,表示小王子要把编号为 X 的玩具放在最前面。

输出描述

共 M 行,第i行输出小王子第i次排完序后玩具的编号序列。

输入输出样例

示例 1

输入
 

5

3

2

3

4

2

输出

3 1 2 4 5 6 7 8 9 10

2 3 1 4 5 6 7 8 9 10

3 2 1 4 5 6 7 8 9 10

4 3 2 1 5 6 7 8 9 10

2 4 3 1 5 6 7 8 9 10 


按要求来哦~题目中说要采用单链表来完成

可以定义一个结构体,存放当前节点的data和指向下一个数据的指针。用数组来模拟~

对于单链表来说,如何找到它的前驱是个问题,所以你最好定义一个函数来查找前驱,通过for循环遍历链表中的每一个节点,并存储它的前驱,如果找到了x的前驱,就退出循环,返回x的前驱

最后在主函数中把x的指针指向改动一下,这个最好在纸上画画,思路会比较清晰,也不容易出错


C++ 

#include <iostream>
using namespace std;
const int N = 20;
struct Node{int data;int next;
}node[N];
int del(int x){int pre = 0;for(int it = node[0].next;it!=-1;){if(node[it].data == x) return pre;pre = it;it = node[it].next;}return pre;
}
int main(){int m;cin>>m;node[0].next = 1;for(int i = 1;i<=10;i++)//数据存放到单链表中{node[i].data = i;node[i].next = i + 1;}node[10].next = -1;while(m--){int x;cin>>x;int pre = del(x);node[pre].next = node[x].next;node[x].next = node[0].next;node[0].next = x;cout<<x;x = node[x].next;for(int i = 1;i<10;i++){cout<<" "<<x;x = node[x].next;}cout<<endl;}return 0;
}

 3.小王子双链表

题目描述

小王子有一天迷上了排队的游戏,桌子上有标号为1-10 的 10 个玩具,现在小王子将他们排成一列,可小王子还是太小了,他不确定他到底想把那个玩具摆在哪里,直到最后才能排成一条直线,求玩具的编号。已知他排了M次,每次都是选取标号为 X 个放到最前面,求每次排完后玩具的编号序列。

要求一:采用循环链表解决

输入描述

第一行是一个整数 M,表示小王子排玩具的次数。随后 M 行每行包含一个整数 X,表示小王子要把编号为 X 的玩具放在最前面。

输出描述

共 M 行,第i行输出小王子第i次排完序后玩具的编号序列。

输入输出样例

示例1

输入

5

3

2

3

4

2

输出

3 1 2 4 5 6 7 8 9 10

2 3 1 4 5 6 7 8 9 10

3 2 1 4 5 6 7 8 9 10

4 3 2 1 5 6 7 8 9 10

2 4 3 1 5 6 7 8 9 10 


按要求来哦~题目中说要采用双链表来完成,双链表的话,对于找前驱就不是很费劲啦~

比较容易出错的点就是指针的移动,如果你要删除x,x的前一个节点的next指针和后一个节点的pre指针都要改动,在着,你把x移动到最前面,鉴于本链表是个循环链表,所以你插入的位置的前一个位置的next要变,插入位置的后一个位置的pre指针也要变才可以 ^^


C++ 

#include <iostream>
using namespace std;
const int N = 20;
struct Node{int pre;int next;
}a[N];
int main()
{int m;cin>>m;a[0].next = 1;for(int i = 1;i<=10;i++){a[i].next = i + 1;a[i].pre = i - 1;}a[10].next = 1;a[1].pre = 10;while(m--){int x;cin>>x;int prev = a[x].pre;//x的前驱int nex = a[x].next;//x的后继//删除a[prev].next = a[x].next;a[nex].pre = a[x].pre;//插入int first = a[0].next;int end = a[0].pre;a[x].next = first;a[x].pre = end;a[first].pre = x;a[end].next = x;a[0].next = x;cout<<x;for(int i = 1;i<10;i++){cout<<" "<<a[x].next;x = a[x].next;}cout<<endl;}return 0;
}

4.约瑟夫环


题目描述


设有 n 个人围坐在圆桌周围,现从某个位置k上的人开始报数,报数到 m的人就站出来。下一个人,即原来的第 m +1个位置上的人,又从1开始报数,再报数到 m 的人站出来。依次重复下去,直到全部的人都站出来为止。试设计一个程序求出这 n 个人的出列顺序。 

要求一:采用循环链表解决。
要求二:可以使用模拟法,模拟循环链表。
要求三:可以不使用循环链表类的定义使用方式。


输入描述

输入只有一行且为用空格隔开的三个正整数 n,k,m,其含义如上所述。

输出描述

共 n 行,表示这 几 个人的出列顺序。

输入输出样例

示例 1

输入
 

3 5 8

输出

3

2


如果不是这道题,我写博客就不会这么晚

不过这道题也暴露了我指针学的不怎么踏实

这道题多亏有魏佬指点,才能够通过,在这里表示感谢,^^

最后又改进了一下

哈哈,一波三折的一道题

上面的题巩固了一下单链表,循环链表,所以这个题我用的STL的list做的,至于题目中说的三个要求,以后有时间再补上吧^^

先把这十个数字存到表里面,然后迭代器找到k所对应的位置,每次循环m次,找到要删除的位置,输出位置对应的值,最后用erase删除,循环结束的条件是表中再无数据


C++ 

#include<iostream>
#include<list>
using namespace std;
list<int> node;
int main(){int n,k,m;cin>>n>>k>>m;for(int i = 1;i<=n;i++)node.push_back(i);auto it = node.begin();for(int i = 1;i<k;i++){++it;if(it == node.end()) it = node.begin();}while(node.size()){for(int j = 1;j<m;j++){++it;if(it == node.end()) it = node.begin();}cout<<*it<<endl;it = node.erase(it);if(it == node.end()) it = node.begin();}return 0;
}

我以为我电脑能撑到我写完,结果关机了hh

这里附一下一波三折的过程~做下记录


一开始我写的代码(怎么都对不了):

#include<iostream>
#include<list>
using namespace std;
list<int> node;
int main(){int n,k,m;cin>>n>>k>>m;for(int i = 1;i<=n;i++)node.push_back(i);auto it = node.begin();for(int i = 1;i<k;i++){++it;if(it == node.end()) it = node.begin();}while(node.size()){for(int j = 1;j<m;j++){++it;if(it == node.end()) it = node.begin();}auto tt = it;cout<<*it<<endl;node.erase(it);it = ++tt;if(it == node.end()) it = node.begin();}return 0;
}

后来求助魏佬 ,大佬果然是大佬,一眼看出问题所在,这里附上截图~

后来我发现其实根本用不到tt,所以又改进了一下 ~才有了这最后的结果


ending~

今明两天准备计算机网络的期中考试QAQ 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

截图识别OCR怎么操作?一键精准识别工具分享

截图识别OCR怎么操作&#xff1f;截图识别OCR软件在现代办公和学习中扮演着越来越重要的角色&#xff0c;它们能够将图片中的文字内容快速准确地转换为可编辑的文本。无论是处理文档、整理笔记&#xff0c;还是进行学术研究、资料收集&#xff0c;这些软件都能快速、准确地将图…

鸿蒙开发接口Ability框架:【(AbilityContext)】

AbilityContext AbilityContext是Ability的上下文环境&#xff0c;继承自Context。 AbilityContext模块提供允许访问特定于ability的资源的能力&#xff0c;包括对Ability的启动、停止的设置、获取caller通信接口、拉起弹窗请求用户授权等。 说明&#xff1a; 本模块首批接口…

告别数据泥潭:PySpark性能调优的黄金法则

阿佑今天给大家带来个一张藏宝图——使用PySpark进行性能调优的黄金法则&#xff0c;从内存管理到执行计划&#xff0c;再到并行度设置&#xff0c;每一步都是提升数据处理速度的关键&#xff01; 文章目录 Python Spark 详解1. 引言2. 背景介绍2.1 大数据处理技术演变2.2 Apac…

2024最新商业视频打赏系统源码 多套模板 有代理后台 已对接支付

简介&#xff1a; 2024最新商业视频打赏系统源码 多套模板 有代理后台 已对接支付 图片&#xff1a; 源码下载

自存 js course 工厂函数

如图 就是 像工厂一样 生产对象 对象里的函数可以写成简下

Oracle11g账户频繁被锁定的3种解决办法

方法1&#xff1a;创建触发器 方法1&#xff1a;数据库中创建触发器(只记录失败)&#xff0c;但是需要开发同意或者开发自己创建。找到密码输入错误的服务器&#xff0c;进行数据源配置的更改。 该方法适用于要求找到密码错误用户所在服务器的场景下。 CREATE OR REPLACE TR…

【一键录音,轻松转换:用Python打造个性化音频记录工具】

在数字化时代,音频记录已成为日常学习、工作和娱乐不可或缺的一部分。想象一下,只需简单按下几个键,即可随时随地捕捉灵感,记录会议要点,或是珍藏孩子的童言稚语。本文将引领您步入Python编程的奇妙世界,展示如何借助几个强大的库,构建一个既简单又实用的音频录制及转换…

STM32快速入门(总线协议之I2C一主多从(软件实现 硬件实现))

STM32快速入门&#xff08;总线协议之I2C一主多从&#xff08;软件实现 & 硬件实现&#xff09;&#xff09; 前言 支持一对多&#xff08;一主多从&#xff09;、多对多传输&#xff08;多主多从&#xff09;&#xff0c;只支持半双工&#xff0c;一般有两根数据线&…

Android性能:高版本Android关闭硬件加速GPU渲染滑动卡顿掉帧

Android性能&#xff1a;高版本Android关闭硬件加速GPU渲染滑动卡顿掉帧 如果在Androidmanifest.xml配置&#xff1a; <application android:hardwareAccelerated"false" > 或者某个特点View使用代码&#xff1a; myView.setLayerType(View.LAYER_TYPE_SOFT…

合并连个有序链表(递归)

21. 合并两个有序链表 - 力扣&#xff08;LeetCode&#xff09; 2.讲解算法原理 2.1重复子问题 2.2只关心其中的一个子问题是如何解决的 2.3细节&#xff0c;递归出口 3.小总结 &#xff08;循环&#xff08;迭代&#xff09;VS 递归&#xff09;&#xff08;递归VS深搜&…

从零开始的软件测试学习之旅(九)jmeter直连数据库及jmeter断言,关联

jmeter直连数据库及断言,关联 jmeter直连数据库步骤jmeter断言jmeter逻辑控制器if控制器ForEach控制器循环控制器 Jmeter关联Jmeter关联XPath提取器Jmeter关联正则表达式提取器二者比较跨线程组关联 每日复习 jmeter直连数据库 概念 这不叫直连:Jmeter -> java/python 提供的…

一套MySQL读写分离分库分表的架构,被秀到了!

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 作者&#xff1a;IT邦德 中国DBA联盟(ACDU)成员&#xff0c;10余年DBA工作经验&#xff0c; Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主&#xff0c;全网粉丝10万 擅长主流Oracle、My…

数据增强,迁移学习,Resnet分类实战

目录 1. 数据增强&#xff08;Data Augmentation&#xff09; 2. 迁移学习 3. 模型保存 4. 102种类花分类实战 1. 数据集 2.导入包 3. 数据读取与预处理操作 4. Datasets制作输入数据 5.将标签的名字读出 6.展示原始数据 7.加载models中提供的模型 8.初始化…

Android Studio在android Emulator中运行的项目黑屏

前言&#xff1a; 最近在做一个Android相关的小项目&#xff0c;因为之前这方面的项目做的比较的少。今天在使用虚拟机调试的时候经常出现一些莫名其妙的问题&#xff0c;经过自己多次的尝试和搜索终于解决了这些问题。 问题&#xff1a; 每次run&#xff08;运行&#xff09…

【机器学习300问】88、什么是Batch Norm算法?

一、什么是Batch Norm&#xff1f; &#xff08;1&#xff09;Batch Norm的本质 神经网络中的Batch Normalization&#xff08;批量归一化&#xff0c;简称BatchNorm或BN&#xff09;是一种改进神经网络训练过程的规范化方法&#xff0c;BatchNorm的主要目的是加速神经网络的训…

构建教育新未来:智慧校园平台的深度解读与全景呈现

引言 在全球数字化转型的大潮中&#xff0c;智慧校园平台作为教育信息化的重要载体&#xff0c;正以前所未有的姿态颠覆传统的教育模式&#xff0c;引领教育行业步入一个崭新的时代。这个融合了大数据、人工智能、云计算、物联网等一系列前沿科技的平台&#xff0c;以其强大的功…

mybatis-plus使用指南(1)

快速开始 首先 我们 在创建了一个基本的springboot的基础框架以后&#xff0c;在 pom文件中 引入 mybatisplus的相关依赖 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5…

PyTorch的卷积和池化

卷积计算 input 表示输入的图像filter 表示卷积核, 也叫做滤波器input 经过 filter 的得到输出为最右侧的图像&#xff0c;该图叫做特征图 卷积的计算是将卷积核放入左上角&#xff0c;在局部区域间做点积&#xff0c;然后将卷积核在Input上面依次从左向右&#xff0c;从上到下…

免费证件照一键换底色

最近星期天在家搞了一个小工具&#xff0c;在这里分享下! 废话不多说看看效果&#xff1a; 效果还不错&#xff0c;需要的可以联系我!!!!!!!!! 别的网上可都是一次五块钱这种。太贵了。。&#xff01;&#xff01;

【Dash】开始学习dash

安装Dash 网上很多安装dash的教程&#xff0c;不再赘述 开始Dash 一个dash页面的基本写法 # dash 的基本写法 import dash from dash import html,dcc,callback,Input,Output# 创建一个 dash 应用 app dash.Dash()# 定义布局&#xff0c;定义一个输入框和一个输出框 app.l…