首页 > 编程语言 >C++U3-第11课-单、双链表

C++U3-第11课-单、双链表

时间:2024-01-20 20:13:34浏览次数:34  
标签:11 head 猴子 C++ next 一只 U3 报数 指针

学习目标

 链表概念

计算机存储结构

 单链表

 实现单链表

 

 

 

 

 

 

 删除

 插入节点

 

 

双向链表

 

 实现双链表

 

 

 

 

 

 

 

 

 

[【数据结构-链表】猴子选大王]

 

【题意分析】
通过循环报数的方式每一次剔除报到4数字的猴子,最后剩下的猴子就为大王

【思路分析】
通过链表的方式连接每一只猴子,将上一只猴子的尾指针指向下一只猴子,将猴子储存成为链式的结构,然后进行报数,每一次报数将指针向后进行移动。当报数为m-1的时候删除当前节点的下一个节点,也就是通过将当前位置的尾指针指向的位置变成下一个猴子的尾指针位置

定义结构体储存猴子的id和他的下一只猴子的位置

创建结构体表示当前的第一只猴子

通过while循环的方式将所有的猴子通过链表的方式连接在一起,前一只猴子的尾指向后一只猴子

将最后一只猴子的尾指针指向第一只猴子

定义一个指针表示当前报数的是哪一只猴子

通过for循环报数m-2只猴子每一次报数将指针往后移动一个,最后停留在m-1只猴子的位置

当前这个猴子的后一只需要出圈,将当前尾指针变成指向后一只猴子的尾指针

向后移动一只猴子

输出最后的猴子

【参考代码】
#include<iostream>
using namespace std;
//定义结构体储存猴子的id和他的下一只猴子的位置 
struct node{
    int data;
    node *next;
};
int n,m;
node *head,*p,*r;
int main(){
    cin>>n>>m;
    //创建结构体表示当前的第一只猴子 
    head=new node;
    head->data=1,head->next=NULL;
    r=head;
    //通过while循环的方式将所有的猴子通过链表的方式连接在一起,前一只猴子的尾指向后一只猴子
    for(int i=2;i<=n;i++){
        p=new node;
        p->data=i;
        p->next=NULL;
        r->next=p;
        r=p;
    }
    //将最后一只猴子的尾指针指向第一只猴子
    r->next=head;
    //定义一个指针表示当前报数的是哪一只猴子
    node *q=head;
    for(int i=1;i<n;i++){
        //通过for循环报数m-2只猴子每一次报数将指针往后移动一个,最后停留在m-1只猴子的位置 
        for(int j=1;j<m-1;j++){
            q=q->next;
        }
        //当前这个猴子的后一只需要出圈,将当前尾指针变成指向后一只猴子的尾指针
        q->next=q->next->next;
        //向后移动一只猴子 
        q=q->next;
    }
    //输出最后的猴子 
    cout<<q->data;
    return 0;
}
View Code

 

标签:11,head,猴子,C++,next,一只,U3,报数,指针
From: https://www.cnblogs.com/jayxuan/p/17977063

相关文章

  • C++编译全过程
    1.源文件.cpp2.预处理:将所有的#include头文件以及宏定义替换成其真正的内容(删除所有的注释、宏扩展、文件包含).i3.汇编:转换为汇编语言.s4.编译:转换为二进制机器码.o(目标文件)5.链接:链接过程将多个目标文件以及所需的库文件(.so等)链接成最终的可执行文件(executablefile)......
  • 关于C++符号表
    符号表是程序/单元中“符号”的列表。符号通常是变量或函数的名称。符号表可用于确定变量或函数在内存中的位置。简而言之,SymbolTable是分配给函数&变量的名称与其在内存中的地址的映射,包括类型、范围和大小等元数据。最终由编译器使用。通常,C或C++编译器将单个源文件编译......
  • 【2024潇湘夜雨】WIN11_Pro_23H2.22631.3078软件选装纯净版1.19
    【系统简介】=============================================================1.本次更新母盘来自WIN11_Pro_23H2.22631.3078。2.增加部分优化方案,手工精简部分较多。3.OS版本号为22631.3078。精简系统只是为部分用户安装,个别要求高的去MSDN下。4.集成《DrvCeo-2.15.0.5》网卡版、......
  • P8112 [Cnoi2021] 符文破译 题解
    题目传送门思路先看数据范围,我们发现两个字符串的长度最大会达到\(5\times10^7\)。这立刻打消了我用暴力的想法。于是,我选择了用KMP模式匹配,这一个能够在线性时间内判定字符串\(A\)是否是字符串\(B\)的字串,并求出字符串\(A\)在字符串\(B\)中各次出现的位置。如......
  • C++模板例子
    title:"C++模板例子"date:2023-11-02T01:05:25+08:00tags:["C++"]categories:[]draft:falsetoc:true#include<vector>#include<type_traits>usingnamespacestd;classAA{};classBB{};classTest{public:templ......
  • 【C++入门到精通】 C++入门—命名空间
    前言    前面我们学习了C语言,并且知道了C语言的基础语法与用途。接下来一段时间我们会再来学习一下基于C语言并且根据C语言改造的一门新的语言—C++     硕硕相信只要各位大佬们跟着我的博客看下去,肯定能有不少的收获。二话不说咱们要开车了,坐稳扶好呦C++的发展历......
  • Day54 面向对象11:方法重写
    面向对象11:方法重写(子类父类必须为非静态方法,无static)!重点:先看笔记!重写:需要有继承关系,是子类重写父类的方法!//重写只针对方法不针对属性或其它的1.方法名必须相同2.参数列表列表必须相同3.修饰符:范围可以扩大:public>Protected>Default>private4.抛......
  • Windows 11 version 23H2 中文版、英文版 (x64、ARM64) 下载 (updated Jan 2024)
    Windows11version23H2中文版、英文版(x64、ARM64)下载(updatedJan2024)Windows11,version23H2,2024年1月更新作者主页:sysin.orgWindows11目前版本所有的日期都按照ISO8601格式列出:YYYY-MM-DD)服务频道版本服务选项上市日期最后修订日期最新版本......
  • 20240119方程图像研究
    事情起因:研究人员:csj、lqy、xzq、yjf方程图像研究要求:描点法画图(使用卡西欧),在\(x\)轴上任取值,对于给定\(x_0\),应在有限时间内求出所有对应的\(y\)。草图绘制(直接绘制):综合方程性质(如定义域、单调性、对称性),明确区间单调性及端点,利用对称性作图、或化归为已知方程并求出其......
  • C++常见面试题整理
    1.CPP编译链接过程1.CPP编译链接过程预处理处理以#开头的命令,纯文本替换,类型不安全#pragmalib和#pragmalink除外,#pragmalib用于指定要链接的库,#pragmalink用于指定程序入口(默认入口是main函数,但可以通过该命令修改)都是在链接阶段进行处理编译词法分析,语法分析,......