蓝桥之链表

最近真的特别焦虑,体测、比赛和考试一个接一个,让人喘不过气来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.xdnf.cn/news/1421201.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

https免费证书获取

获取免费证书的网址&#xff1a; Certbot 1. 进入你的linux系统&#xff0c;先安装snapd&#xff0c; yum install snapd 2. 启动snapd service snapd start 3.安装 Certbot snap install --classic certbot 注意如下出现此错误时&#xff0c;需要先建立snap 软连接后&am…

An 2024下载

An2024下载&#xff1a; 百度网盘下载https://pan.baidu.com/s/1cQQCFL16OUY1G6uQWgDbSg?pwdSIMS Adobe Animate 2024&#xff0c;作为Flash技术的进化顶点&#xff0c;是Adobe匠心打造的动画与交互内容创作的旗舰软件。这款工具赋予设计师与开发者前所未有的创意自由&#x…

CTF之love_math

这个题目简单看一下就知道要传参进行执行系统命令以达到找到flag的目的。 但是又可以发现过滤了很多东西。 这个题的绕过方法可以用到三个函数 base_convert(number,froombase,tobase)//分别为原始值&#xff0c;原来进制&#xff0c;要转换的进制dechex("十进制数"…

mysql的存储结构

一个表就是一个ibd文件 .ibd文件大小取决于数据和索引&#xff0c;在5.7之后才会为每个表生成一个独立表空间即一个ibd文件&#xff0c;在此之前&#xff0c;所有表默认下都会存储在“系统表空间”&#xff08;共享表空间&#xff09;&#xff0c;所有表都在一个ibd文件。 inn…

与 Apollo 共创生态:Apollo 七周年大会带我体会自动驾驶技术的发展

前言 自动驾驶技术作为当今科技领域的热门话题&#xff0c;吸引着无数开发者和企业的目光。而在这个风起云涌的行业中&#xff0c;Apollo开放平台作为自动驾驶领域的领军者之一&#xff0c;扮演着不可或缺的角色。七年前&#xff0c;当Apollo开放平台刚刚起步时&#xff0c;也…

Xshell 7官网免费版下载与安装详细教程!学校/家庭使用免费哦~

一、 安装 1 卸载之前安装的xshell, 未安装忽略此步骤 2 解压本地文件&#xff0c;双击运行xshell**.exe, 按照提示安装 等候引导完成 3 点击下一步 4接受下一步 5 选择安装的路径 改成你自己的安装路径 6程序文件夹选择默认 7 取消勾选&#xff0c;激活之后操作 8 激活&…

为什么推荐将 IoTDB 服务地址配置为 HostName 而非 IP?

设置主机名启动 IoTDB 可在不修改配置情况下&#xff0c;在不同环境运行 IoTDB 并实现多次部署。 01 前言 IoTDB 在配置启动时有两种方式&#xff1a; 1. 通过设置 HostName&#xff08;主机名&#xff09;的方式来启动 IoTDB&#xff08;推荐方式&#xff09;&#xff1b; 2. …

物联网设计竞赛_2_Ubuntu联网配置

采用nat配置 随便定义一个VMnet虚拟网络接口&#xff0c;定义成nat模式 如果主机用的校园网&#xff0c;那么虚拟机发送消息将通过nat转换&#xff0c;转换成用户校园网ip进行发送&#xff0c;发送到校园网路由器再经过nat转换成公网ip访问互联网 点击NAT设置和DHCP设置记录好…

【Mac】Perfectly Clear Workbench(智能图像清晰修复软件)安装教程

软件介绍 Perfectly Clear Workbench是由Athentech Imaging开发的一款图像处理软件&#xff0c;旨在帮助用户快速、轻松地优化和改善数字照片的质量。以下是Perfectly Clear Workbench的一些主要特点和功能&#xff1a; 1.自动图像优化 该软件采用先进的图像处理算法&#xf…

2024年如何选什么版本FL Studio才适合自己编曲?

fl studio是什么软件 水果编曲软件 FL Studio&#xff0c;全称为Fruity Loops Studio&#xff0c;是一款全能音乐制作环境或数字音频工作站&#xff08;DAW&#xff09;&#xff0c;集编曲、录音、剪辑、混音等多种功能于一身。 FL Studio最初名为Fruity Loops&#xff0c;因…

APP 脱壳处理

前言 一&#xff0c;加壳的原理 二&#xff0c;壳的分类 三&#xff0c;脱壳实践 3.1 一代壳&#xff1a;frida-dexdump 安装&#xff1a; pip install frida-dexdump运行&#xff1a; frida-dexdump -U -f com.jiuxianapk.ui这里的 com.jiuxianapk.ui 就是app的包名&#xf…

[Algorithm][回溯][全排列][子集] + 回溯原理 详细讲解

目录 0.原理讲解1.全排列1.题目链接2.算法原理详解3.代码实现 2.子集1.题目链接2.算法原理详解3.代码实现 0.原理讲解 回溯算法通常⽤于解决组合问题、排列问题和搜索问题等回溯算法的基本思想&#xff1a; 从⼀个初始状态开始&#xff0c;按照⼀定的规则向前搜索&#xff0c;…

14.CAS原理

文章目录 CAS原理1.什么是CAS2.Unsafe类中的CAS方法2.1.获取UnSafe实例2.2.调用UnSafe提供的CAS方法2.3.调用Unsafe提供的偏移量相关2.4.CAS无锁编程2.4.1.使用cas进行无锁安全自增案例 CAS原理 由于JVM的synchronized重量级锁设计操作系统内核态下的互斥锁的使用&#xff0c;其…

【CSP CCF记录】202112-1 序列查询

题目 过程 第一次提交 暴力求解&#xff0c;运行超时&#xff0c;50分 #include<bits/stdc.h> using namespace std; int n,N; int main() {cin>>n>>N;int A[n1];A[0]0;for(int i1;i<n;i){cin>>A[i];}int f[N];int sum0;for(int i0;i<N;i){fo…

HCIP-Datacom-ARST自选题库_07_割接【35道题】

一、单选题 1.在割接的测试阶段&#xff0c;符合以下哪一种情况的可以判断为割接成功? 网络承载的上层应用业务测试正常 网络设备的配置查看结果正常 网络流量路径正常 路由协议运行正常 2.在割接的测试阶段中&#xff0c;表明已经完成测试的标准是: IP设备的配置查看结…

Oracle 数据库

前言 今天开始学习 Oracle 数据库&#xff0c;这是实习公司要求的&#xff0c;虽然还没开始实习&#xff0c;但是事先熟练到岗之后就不需要再花费时间学习了。有了 MySQL 的基础&#xff0c;学习 Oracle 应该问题不大&#xff0c;不过 MySQL 一些进阶的内容依然需要再精进一下。…

【原创】nnUnet V1在win11下的安装与配置

安装之前可以先了解一下论文的主要内容&#xff0c;便于之后网络训练与推理&#xff0c;调试程序。 论文地址&#xff1a;nnU-Net: a self-configuring method for deep learning-based biomedical image segmentation | Nature Methods 也可以从其他博客快速浏览&#xff1a…

google test 使用指南

目录 测试项目 calculator.h calculator.cpp test01.cpp 创建新项目 选择Google Test 选择要测试的项目 pch.cpp 加入依赖 设为启动项目 ​编辑 运行 ​编辑 关键点 测试项目 calculator.h #ifndef __CALCULATOR_H__ #define __CALCULATOR_H__#include <i…

创新案例|为何农夫山泉创新战略升级为一家零售科技公司

农夫山泉上市的消息被公之于众后&#xff0c;几乎所有人都将目光投向了这家国内家喻户晓的饮料公司&#xff0c;谁都想第一时间内窥探它的庐山真面目。 当然&#xff0c;在此之前已经有多路消息通过旁敲侧击&#xff0c;从管窥中获取了一些农夫山泉的真实数据。 去年6月&…

【2024新版】龙年新版ui周易测算网站H5源码/在线起名网站源码/运势测算网站系统源码

>>>功能说明&#xff1a; 1、系统配置&#xff1a;系统基本配置、测算价格配置、在线预约配置、系统信息配置、代理分成配置、推广积分配置、VIP价格配置、账号管理 2、推广管理&#xff1a;我的信息、推广链接、订单管理、体现管理 3、付费应用&#xff0c;订单管…