C++循环链表实现约瑟夫退圈(类封装)
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++循环链表实现约瑟夫退圈(类封装)的更多相关文章
- 关于单向循环链表的约瑟夫问题(Java实现)
关于单向循环链表的约瑟夫问题(Java实现) 最近在学习链表时,遇到单向循环链表中的约瑟夫问题.在构建循环链表的代码上,我有一点很不理解,遂记录下来. Josephu问题为: 设编号为1, 2,.. ...
- salesforce 零基础学习(四十八)自定义列表分页之Pagination基类封装 ※※※
我们知道,salesforce中系统标准列表页面提供了相应的分页功能,如果要使用其分页功能,可以访问http://www.cnblogs.com/zero-zyq/p/5343287.html查看相关 ...
- Have Fun with Numbers及循环链表(约瑟夫问题)
1. 循环链表(约瑟夫问题) https://github.com/BodhiXing/Data_Structure 2. Have Fun with Numbers https://pta.pate ...
- Redis操作Set工具类封装,Java Redis Set命令封装
Redis操作Set工具类封装,Java Redis Set命令封装 >>>>>>>>>>>>>>>>& ...
- Redis操作List工具类封装,Java Redis List命令封装
Redis操作List工具类封装,Java Redis List命令封装 >>>>>>>>>>>>>>>> ...
- Redis操作Hash工具类封装,Redis工具类封装
Redis操作Hash工具类封装,Redis工具类封装 >>>>>>>>>>>>>>>>>> ...
- Redis操作字符串工具类封装,Redis工具类封装
Redis操作字符串工具类封装,Redis工具类封装 >>>>>>>>>>>>>>>>>>& ...
- java中基于TaskEngine类封装实现定时任务
主要包括如下几个类: 文章标题:java中基于TaskEngine类封装实现定时任务 文章地址: http://blog.csdn.net/5iasp/article/details/10950529 ...
- CColor类封装
CColor类封装 Color.h #pragma once #include <sstream> #include <string> using namespace std; ...
随机推荐
- 印象笔记Mac端快捷键
- android学习三---创建第一个程序
1.创建一个Helloworld程序 1.1 new-android application 点击file-new-android application出现如下界面 填上应用名,项目名,包名,选择所 ...
- Python Redis pipeline操作(秒杀实现)
设想这样的一个场景,你要批量的执行一系列redis命令,例如执行100次get key,这时你要向redis请求100次+获取响应100次.如果能一次性将100个请求提交给redis server,执 ...
- 两个div同时滚动
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...
- 4.1 使用STM32控制MC20拨打电话
需要准备的硬件 MC20开发板 1个 https://item.taobao.com/item.htm?id=562661881042 GSM/GPRS天线 1根 https://item.taoba ...
- C# Ajax 技术
Ajax 是 Asynchronous JavaScript and XML(以及 DHTML 等)的缩写.下面是 Ajax 应用程序所用到的基本技术:• HTML 用于建立 Web 表单并确定应用程 ...
- driver.close()和driver.quit()
driver.close()关闭当前窗口 driver.quit()退出驱动关闭所有窗口 from selenium import webdriver from time import sleep d ...
- spark学习(1)--ubuntu14.04集群搭建、配置(jdk)
环境:ubuntu14.04 jdk-8u161-linux-x64.tar.gz 1.文本模式桌面模式切换 ctrl+alt+F6 切换到文本模式 ctrl + alt +F7 /输入命令start ...
- 【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 ...
- HTTP协议—常见的HTTP响应状态码解析
常见的HTTP响应状态码解析 1XX Informational(信息性状态码) 2XX Success(成功状态码) 3XX Redirection(重定向状态码) 4XX Client Error ...