约瑟夫问题折腾了很久,还询问了别人,最后终于自己敲出了一个自认为完美的解决方案。

虽然我一开始写的代码可以输出结果,但是可能是因为时间超限,原本可能是rear指针移动的原因,直接反映到析构上,这样也好。长见识了,以后如果析构出问题了,就要检查一下指针的相关移动。

难点在于仅用尾指针将结点插在尾部,不用头结点和头指针。

现在这个难点解决了!实际上所有的难点都是建立在基础上的,就像插入节点时需要先将下一个节点的地址保存一样,循环链表中的头结点也没什么不同,不过是每次插入时都要现将头结点的地址赋给新节点的next域。而头结点的地址始终保存在rear指针指向的结点的next域中,所以重中之重是每次一定要移动尾指针以确保尾指针的位置正确。

题目描述:约瑟夫(Joseff)问题求解。n个人围成一圈,编号依次为1, 2....n,从第一个人开始报数,m号出圈,再从下一个开始报数m号出圈,直至所有人出圈。求出圈的次序。要求采用仅设尾指针的单向循环链表实现。已知类的定义、部分成员函数及主函数代码如下(勿改动)。

如下是插入函数的代码:

template <class T>
void LinkList<T>::RInsert(T x)
{Node<T>* p;p = new Node<T>;//分配空间p->data = x;if (rear == NULL){rear = p;p->next = rear;}else{p->next = rear->next;rear->next = p;rear = rear->next;}
}

以下是约瑟夫代码:

template <class T>
void LinkList<T>::Joseff(int m)
{Node<T>* p;if (rear){p = rear->next;for (int i = 1; p->next != p; i++, p = p->next){if (i == m-1 ){Node<T>* q = p->next;p->next = q->next;cout << q->data << " ";i = 0;}}cout << p->data;}rear = NULL;
}

没想到这道约瑟夫的重点却是尾结点尾插法。

不过这种约瑟夫的写法也是简洁明了。

关于约瑟夫问题(尾指针尾插法)相关推荐

  1. C语言的双向链表头插法和尾插法,指定节点删除

    文章目录 前言 头插法 尾插法 删除节点 测试代码如下 前言 双向链表和单链表的唯一区别就是多个一个指针域而已,该指针域可以访问链表的上一个节点. 关于构造双向链表的过程我们常见的有两种方法,和单链表 ...

  2. C语言的单链表创建:头插法/尾插法

    文章目录 前言 链表头插法 链表尾插法 源码实现 前言 接下来一段时间,将对数据结构进行复习,总的来说数据结构自大学之后忘记得有点吓人,为了防止脑容量本就小得脑袋更小,必须得持续性得温故了. 链表数据 ...

  3. 单链表-单链表拆分为A和B链表(尾插法+头插法)

    题意: 设C{a1,b1,a2.b2-an,bn}为一线性表,采用带头结点的单链表hc存放,设计一个就地算法,将其拆分为两个线性表,每个线性表均采用带头结点的单链表存储,使得: A = {a1,a2. ...

  4. 建立循环单链表(尾插法)

    循环链表的操作实现算法与非循环链表的操作算法基本相同,只是对表尾的判断做了改变. 定义单链表的存储结构: typedef struct LinkList{int data;LinkList * nex ...

  5. 建立双链表(尾插法)

    双链表存储结构: 要建立双链表,首先要明白双链表的存储结构定义: typedef struct DLinkList{ //存储结构定义int data;DLinkList * prior;DLinkL ...

  6. 建立单链表(尾插法)

    建立单链表有两种方法, 这里采用头插法. 尾插法含义: 该方法是从一个空表开始,读取数组的元素,生成新节点,将读取的数据放到存放在新节点的数据域中,然后将该节点插入到链表的表头上,直到结束为止. 由于 ...

  7. 数据结构之单链表尾插法创建-RearCreate

    /* 单链表整表创建算法思路 1.声明一结点p和计数器变量i 2.初始化一空链表L 3.让L的头结点的指针指向NULL,即建立一个带头结点的单链表 4.循环: 生成一新结点赋值给p 随机生成一数字赋值 ...

  8. C语言-链表的创建头插法和尾插法(有无头节点)

    文章目录 结构声明 1 头插法(有头节点) 2 头插法(无头节点) 3 尾插法(有头节点) 4 尾插法(无头节点) 结构声明 typedef int ElementType;typedef struc ...

  9. 数据结构—分别用头插法和尾插法建立单链表

    #include <iostream> using namespace std; typedef struct LNode{int data;struct LNode *next; }LN ...

最新文章

  1. 第四周实践项目4 建立算法库——双链表
  2. NSArray打印汉字的方法
  3. 【Unity3D与23种设计模式】中介者模式(Mediator)
  4. python的scikit-learn算法库实现
  5. python 异常回溯_关于python:在循环中捕获异常回溯,然后在脚本末尾引发错误...
  6. 利用专用文件夹隐藏文件 (tasks、fonts)
  7. 11 如何通过 “副本传输” 传输从DEV到QAS的请求号
  8. for (;;) 与 while (true),哪个更快?
  9. 计算机数据库相关法规,法律法规数据库-详细页
  10. 西门子PLC200SMART(二)
  11. 新版掌上阅读小说源码+支持公众号/分站/封装APP
  12. hell脚本分享:DebianLNMP一键安装服务器套件
  13. eNews 第二十六期/2007.07
  14. 【QT 5 学习笔记-学习绘图相关+画线图形等+绘图事件+基础学习(1)】
  15. html制作简单框架网页 实现自己的音乐驿站 操作步骤及源文件下载 (播放功能限mp3文件)
  16. SpringBoot集成微信支付V3
  17. c++ socket 多线程 网络聊天室
  18. 《Hexo: 从零开始编写自己的主题》1. Hexo概述以及Hexo工作原理
  19. c++生成DLL文件(visual studio 2019)面向小白萌新
  20. 1美元从零开始训练Bert,手把手教你优雅地薅谷歌云TPU羊毛

热门文章

  1. key / value 数据库的选型
  2. C语言依然位居榜单前列,依然值得程序员学习
  3. ajax请求阻断,多AJAX而不阻断
  4. SAP PO采购订单手工调整行项目号及通用税率取值方法
  5. 德国跨境电商real.de绑定连连跨境支付收款教程!
  6. 移动监控技术将成为内家庭安防的核心构成部分
  7. 模拟器下载安装【用于monkey测试】
  8. 阿里云携手达内教育培养大数据技术人才
  9. 使用python获取time.time()当前时间的YMD格式和获取今天是几号
  10. 2023年计算机考研英语一题型及分值参考