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. 印象笔记Mac端快捷键

  2. android学习三---创建第一个程序

    1.创建一个Helloworld程序 1.1 new-android application 点击file-new-android application出现如下界面 填上应用名,项目名,包名,选择所 ...

  3. Python Redis pipeline操作(秒杀实现)

    设想这样的一个场景,你要批量的执行一系列redis命令,例如执行100次get key,这时你要向redis请求100次+获取响应100次.如果能一次性将100个请求提交给redis server,执 ...

  4. 两个div同时滚动

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  5. 4.1 使用STM32控制MC20拨打电话

    需要准备的硬件 MC20开发板 1个 https://item.taobao.com/item.htm?id=562661881042 GSM/GPRS天线 1根 https://item.taoba ...

  6. C# Ajax 技术

    Ajax 是 Asynchronous JavaScript and XML(以及 DHTML 等)的缩写.下面是 Ajax 应用程序所用到的基本技术:• HTML 用于建立 Web 表单并确定应用程 ...

  7. driver.close()和driver.quit()

    driver.close()关闭当前窗口 driver.quit()退出驱动关闭所有窗口 from selenium import webdriver from time import sleep d ...

  8. spark学习(1)--ubuntu14.04集群搭建、配置(jdk)

    环境:ubuntu14.04 jdk-8u161-linux-x64.tar.gz 1.文本模式桌面模式切换 ctrl+alt+F6 切换到文本模式 ctrl + alt +F7 /输入命令start ...

  9. 【HackerRank】Lonely Integer

    There are N integers in an array A. All but one integer occur in pairs. Your task is to find out the ...

  10. HTTP协议—常见的HTTP响应状态码解析

    常见的HTTP响应状态码解析 1XX Informational(信息性状态码) 2XX Success(成功状态码) 3XX Redirection(重定向状态码) 4XX Client Error ...