数据结构--链表--约瑟夫环问题(单向循环链表)
问题:一群人站成一个圆圈,从一个人开始报数,1, 2 ,。。。m,报到m的拉出去砍了,求被砍的顺序和最后一个活下来的。
利用单向循环链表实现
C++代码如下:(参考书籍:数据结构与算法实验指导书)
#include <iostream>
using namespace std;struct NodeType
{int num;char name[20];NodeType* next;
};
class Jose
{
private:NodeType* p_head;
public:Jose(){p_head = new NodeType; //带空头的链表p_head->next = p_head; //空的循环链表}~Jose(){}void creat();void print();
};
void Jose::creat()
{int i = 0, n;NodeType *newp, *tempNode;tempNode = p_head;cout << "\n enter total nums of people: ";cin >> n;for(i = 0; i < n; ++i){newp = new NodeType;newp->num = i+1;cout << "\n enter name: ";cin >> newp->name;newp->next = p_head; //此处p_head为尾部哨兵tempNode->next = newp; //不断地往尾部(尾部哨兵之前)插入节点tempNode = newp;}tempNode->next = p_head->next; //断开空头哨兵delete p_head; //释放哨兵节点p_head = tempNode->next; //头结点指向第一个节点
}
void Jose::print()
{int m,i;NodeType *del = p_head, *tempNode;cout << "\n enter value m(m>=2):";cin >> m;cout << "\n start:" << endl;while(del->next != del) //链表节点个数不为1{for(i = 1; i < m; ++i) //del往后移动m位{tempNode = del;del = del->next;}cout << del->num << " " << del->name << endl;tempNode->next = del->next; //断开del节点delete del; //释放del节点del = tempNode->next;}cout << del->num << " " << del->name << endl;delete del; //链表只剩一个节点直接删除
}int main()
{Jose gameList;gameList.creat();gameList.print();cout << "press any key to exit!" ;cin.get();return 0;
}
Valgrind检查结果:
假设有5个人,报数3的出列,手动模拟如下
数据结构--链表--约瑟夫环问题(单向循环链表)相关推荐
- python约瑟夫环单向循环链表_约瑟夫环的单向循环链表的实现代码
/************************************************************************* > File Name: JosephCir ...
- 《恋上数据结构第1季》单向循环链表、双向循环链表以及约瑟夫环问题
循环链表(CircleList) 链表的接口设计 单向循环链表 单向循环链表完整源码 双向循环链表 双向循环链表完整源码 双向循环链表解决约瑟夫环问题 如何发挥循环链表的最大威力? 静态链表 数据结构 ...
- python之链表、单链表、双向链表、单向循环链表
python之链表.单链表.双向链表.单向循环链表 链表 顺序表的构建需要预先知道数据大小来申请连续的存储空间,而在进行扩充时,又需要进行数据的搬迁,所以使用起来并非很灵活 链表结构可以充分利用计算机 ...
- 数据结构与算法作业3——约瑟夫环问题(循环链表)
第二次作业: 习题2 载具杀手与时停高手(约瑟夫环问题) 著名绅士简尚夫有一项特殊的天赋,他可以摧毁任意一辆载具(载具杀手).他的朋友狄傲可以将时间暂停(时停高手).他俩玩一个游戏. 有N辆车,编号 ...
- java 单链表约瑟夫环_java循环单链表实现约瑟夫环问题
package SingleLinkList; //节点类 class Node{ private int data; private Node next; public int getData() ...
- 约瑟夫环-(数组、循环链表、数学)
约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列:他的下一个人又从1开始报数,数到m的那个人又出 ...
- 【数据结构与算法】之单向循环链表的创建/遍历/插⼊/查找/删除算法实现
一.单向循环链表简介 单向循环链表是一个收尾相接的链表,将单链表的最后一个指针域改由NULL改为指向表头结点这就是单链式的循环链表,并称为循环单链表. 带头结点的循环单链表的各种操作的算法实现与带头结 ...
- 广义表头尾链表存储结构_单向循环链表的存储结构和操作
单向循环链表的存储结构 单向循环链表(Circular Linked List)是单向链表的一种扩充,当单向链表带有头结点时,把单向链表中尾结点的指针域由空指针改为头结点的指针(当单向链表不带头结点时 ...
- 数据结构-链表带环问题
目录 一.如何判断一个链表是否有环? 二.如何证明fast和slow不会在回环中错过,永远都遇不上? 三.为什么slow走1步,fast走的是2步?能不能fast一次走3或者n步? (1)fast走3 ...
最新文章
- 沙市一中2021年高考成绩查询,2021年荆州高考状元名单公布,荆州文理科状元是谁多少分...
- 凭借这份Java面试题集,分布式宝典:限流+缓存+通讯
- 1.3 字符编码介绍
- python代码变成运行程序_用Python脚本转换成windows的可执行程序
- hdu 1800 Flying to the Mars
- php json无法解析中文,json 无法解析解决方法
- chameleon 算法_为了简单起见,Arquillian Chameleon
- 搅局者奇虎360:特供机背后的周式隐忧
- 为提升在线语音识别效率,他创造了两种升级版算法模型
- Oracle用imp和exp实现数据的导入和导出
- 实习商汤,校招华为,我的深度学习之路
- 不同方式实现IP访问限制
- nm命令和其内容详解
- CTFshow 击剑杯 部分WP
- 2022.12.14 英语背诵
- WorldModel世界模型代码训练实录
- unity 烘焙 光照贴图 以及一些灯光的相关问题(一)
- DC初级摄友必学摄影技巧
- 歌声合成软件UTAU
- MVC 自定义 错误页面