node.h

 #pragma once
#include <iostream>
#include <iomanip>
using namespace std; struct number
{
int n;
number *_next;
};//结构体定义
class node
{
int m,k;//m报数上限 k人数
number *s;
public://成员函数
node(void);
~node(void);
void Joseph();
void set(int x);
void Delete(int x);
};

node.cpp

 #include "node.h"
node::node(void)
{
s=NULL;//构造函数 令指针s指向空
}
node::~node(void)
{
}
void node::Joseph()
{
int i=,l=;
cout<<"请输入总人数、报数上限:"<<endl;
cin>>k>>m;
cout<<"依次退圈的人:"<<endl;
set(k);
number *p=s,*q;
while(l<k-)
{
q=p;
p=p->_next;
i++;
if(i==m)
{
l++;
cout<<q->n<<"号"<<endl;//报数报到上限 记录退出成员号码
Delete(q->n);//该成员退圈 及删除该节点
i=;
}
}
cout<<"最后剩下的人: "<<s->n<<"号"<<endl;//最后链表中剩下的最后一个节点
}
void node::set(int x)//建立循环链表
{
int i;
s=new number;
s->n=; s->_next=NULL;//没有设头结点
number *p=s,*q=NULL;
for(i=;i<=x;i++)
{
q=new number;
q->n=i;
q->_next=NULL;
p->_next=q;
p=q;
}
p->_next=s;//最后一个节点指针指向第一个节点实现循环
}
void node::Delete(int x)//删除链表中数据为x的节点
{
number *p=s,*q=NULL;
if(s->n==x)
{
while(p->_next!=s)
{
q=p;
p=p->_next;
}
s=s->_next;
p->_next=s;
}
else
{
while(p->n!=x)
{
q=p;
p=p->_next;
}
q->_next=p->_next;
}
}

main.cpp

 #include "node.h"
void main()
{
node a;
a.Joseph();
}

结果截图:

C++循环链表实现约瑟夫退圈(类封装)的更多相关文章

  1. 关于单向循环链表的约瑟夫问题(Java实现)

    关于单向循环链表的约瑟夫问题(Java实现) 最近在学习链表时,遇到单向循环链表中的约瑟夫问题.在构建循环链表的代码上,我有一点很不理解,遂记录下来. Josephu问题为: 设编号为1, 2,.. ...

  2. salesforce 零基础学习(四十八)自定义列表分页之Pagination基类封装 ※※※

    我们知道,salesforce中系统标准列表页面提供了相应的分页功能,如果要使用其分页功能,可以访问http://www.cnblogs.com/zero-zyq/p/5343287.html查看相关 ...

  3. Have Fun with Numbers及循环链表(约瑟夫问题)

    1. 循环链表(约瑟夫问题) https://github.com/BodhiXing/Data_Structure 2. Have Fun with Numbers https://pta.pate ...

  4. Redis操作Set工具类封装,Java Redis Set命令封装

    Redis操作Set工具类封装,Java Redis Set命令封装 >>>>>>>>>>>>>>>>& ...

  5. Redis操作List工具类封装,Java Redis List命令封装

    Redis操作List工具类封装,Java Redis List命令封装 >>>>>>>>>>>>>>>> ...

  6. Redis操作Hash工具类封装,Redis工具类封装

    Redis操作Hash工具类封装,Redis工具类封装 >>>>>>>>>>>>>>>>>> ...

  7. Redis操作字符串工具类封装,Redis工具类封装

    Redis操作字符串工具类封装,Redis工具类封装 >>>>>>>>>>>>>>>>>>& ...

  8. java中基于TaskEngine类封装实现定时任务

    主要包括如下几个类: 文章标题:java中基于TaskEngine类封装实现定时任务 文章地址: http://blog.csdn.net/5iasp/article/details/10950529 ...

  9. CColor类封装

    CColor类封装 Color.h #pragma once #include <sstream> #include <string> using namespace std; ...

随机推荐

  1. (4.8)SQL Server DAC——专用管理员连接

    SQL Server DAC——专用管理员连接 默认情况下,只有本地可以使用DAC连接,但也可以开启远程DAC sp_configure ; go reconfigure with override; ...

  2. OpenCV3计算机视觉+Python(五)

    人脸检测和识别 本章将介绍Haar级联分类器,通过对比分析相邻图像区域来判断给定图像或子图像与已知对象是否匹配.本章将考虑如何将多个Haar级联分类器构成一个层次结构,即一个分类器能识别整体区域(如人 ...

  3. 升级到tomcat8遇到The method getDispatcherType() is undefined for the type HttpServletRequest

    今天升级到tomcat8,发现原来的项目不能运行了,遇到下面的错误:The method getDispatcherType() is undefined for the type HttpServl ...

  4. Django工作小笔记

    场景一:如果model中字段用CharField,然而你想用数字(类似IntegerField)排序,此时可以用django的extra函数直接调用原生sql的CAST函数即可 Score.objec ...

  5. Linux基础系列:常用命令(3)

    作业一: ) 将用户信息数据库文件和组信息数据库文件纵向合并为一个文件/.txt(覆盖) cat /etc/passwd /etc/group > /test/.txt ) 将用户信息数据库文件 ...

  6. 内核模块编译时怎样绕过insmod时的版本检查

    1.Uboot:每个arm芯片或者海斯芯片都有各自的uboot. 2.但他们的内核版本可以是一样的,主要是跟各自内核的进行的编译选项有关, 31的内核版本里加了版本检查选项“Kernel type-& ...

  7. java屏幕截取

    CaptureScreen.java ```import java.awt.Dimension; import java.awt.Rectangle; import java.awt.Robot; i ...

  8. INSPIRED启示录 读书笔记 - 第30章 在大公司施展拳脚

    十大秘诀 1.了解公司制定决策的方式:知道决策权在谁手里,了解他制定决策的方式,只需要说服他就行了 2.建立人脉网络:主动帮助他人,积累人脉关系 3.臭鼬工程:在工作之余做出产品原型来,产品原型具有超 ...

  9. mybatis 一对多和多对一

      在学习MyBatis3的过程中,文档上面一直在强调一个id的东西!在做这个实验的时候,也因为没有理解清楚id含义而导致一对多的“多”中也只有一条数据.id和result的唯一不同是id表示的结果将 ...

  10. EntityFramework 学习 一 Multiple Diagrams in Entity Framework 5.0

    Visual Studio 2012 provides a facility to split the design time visual representation of the Entity ...