当前位置: 首页 > ds >正文

小猴子摆玩具

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

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

把1~10这10个数据存到10个节点toy[1]~toy[10]

小技巧:toy[0]始终是链表的头,但是不用它存数据,真正的数据在它的后面。当链表的时候,直接从toy[0]开始即可。

 

#include <bits/stdc++.h>

using namespace std;

struct node{

    //int id; //没用到

    int data;

    int nextid;

}toy[20];

void init(){ //初始化链表

    toy[0].nextid = 1; //节点0是链表头,它指向下一个节点1

    toy[10].nextid = -1; //最后的节点10指向 -1,表示没有后续节点

    for (int i = 1; i <= 10; i++) {

        toy[i].data = i; //节点的值

        toy[i].nextid = i + 1; //指针,指向下一个节点

    }

}

void tohead(int x){ //把x放到最前面

    int p = 0; //p是x的前一个节点

}

while(toy[p].nextid != -1){ //遍历链表,查找x的前一个节点p

    if (toy[toy[p].nextid].data == x) break;

    p = toy[p].nextid;

}

int now = toy[p].nextid; //now是x所在的节点

toy[p].nextid = toy[now].nextid; //删除x节点

toy[now].nextid = toy[0].nextid; 

toy[0].nextid = now; //把x放到最前面

}

void out(){ //输出链表,就是题目的编号序列

    int head = toy[0].nextid; //toy[0]始终是链表头,并且不用来存编号

    for (int i = 1; i <= 10; i++){

        cout << toy[head].data << ' ';

        head = toy[head].nextid;

    }

    cout << endl;

}

int main(){

    init();

    int m;

    cin >> m;

    while (m--){

        int x;

        cin >> x;

        tohead(x);

        out();

    }

    return 0;

}

http://www.xdnf.cn/news/9665.html

相关文章:

  • 计算机网络第一章计算机网络概述(竟成)
  • 小白成长之路-Linux操作系统-进程管理
  • 【机器人编程基础】python中的常用数据类型
  • ElasticSearch查询指定时间内出现的次数/2秒内出现的次数
  • 我们来学mysql -- 输出一份“数据备份还原”sh脚本
  • 手写字魔法消除1:数据集说明(含下载链接)
  • Kruskal算法剖析与py/cpp/Java语言实现
  • linux中基础IO(上)
  • 浅谈 JavaScript 性能优化
  • 深度解析 Nginx 配置:从性能优化到 HTTPS 安全实践
  • YOLOv8性能提升:引入华为GhostNetv1特征提取网络
  • 第五章 宽松内存一致性模型 A Primer on Memory Consistency and Cache Coherence - 2nd Edition
  • Houdini learning Record
  • Python中的跨域资源共享(CORS)处理
  • CRTP学习笔记与指南
  • MySQL8.4主从复制
  • Mysql学习笔记之事务
  • 大数据未来发展的趋势与挑战
  • 深入详解(0020,0052) Frame of Reference UID在序列空间定位中的定义与作用
  • 【机器学习基础】机器学习入门核心算法:GBDT(Gradient Boosting Decision Tree)
  • 20250528-C#知识:强制类型转换
  • PostgreSQL 数据完整性检查工具对比:amcheck 与 pg_checksums
  • TCP连接数统计脚本
  • 【系统架构设计师】2025年上半年真题论文回忆版: 论系统负载均衡设计方法(包括解题思路和参考素材)
  • 电子电路:压降的定义与原理
  • 在 Ubuntu 上挂载其他硬盘的步骤
  • uniapp 实战demo
  • AI赋能金融风控:基于机器学习的智能欺诈检测系统实战教程
  • SQL中各个子句的执行顺序
  • SpringBoot中解决跨域问题