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; ...
随机推荐
- Python定时执行脚本
最近测试hbase,老发现服务挂掉,自己不能及时发现,想了想,写了个脚本,让脚本每个小时执行一次,以便检测是否有服务挂掉,如果有服务挂掉,及时启动 import os import datetime ...
- 5 Best VPNs for Ubuntu
https://www.bestvpn.com/blog/6268/5-best-vpns-for-ubuntu/?nabe=6412130213429248:0&utm_referrer=h ...
- djange数据库优化操作
一.all()命令分析 1.user_list = models.UserInfo.objects.all() #查询表一次可以得到该表的所有信息 注释:user_list.query可以查询到 ...
- nodejs socket server 强制关闭客户端连接
nodejs socket server 强制关闭客户端连接: client.destroy()
- Incomplete response received from application
RAILS_ENV=production rake secret 将输出的一大串字码粘贴到rails工程中/config/secrets.yml去,替换掉该文件中的<%= ENV["S ...
- Yii2 注册表单验证规则 手机注册时候使用短信验证码
public function rules() { return [ ['username', 'filter', 'filter' => 'trim'], ['username', 'requ ...
- 动手动脑:String.equals()的使用方法
public class StringEquals { /** * @param args the command line arguments */ public static void main( ...
- Link
GNU/Linux, Bash, C, PHP, Perl, JavaScript, Vim, Git http://blog.sanctum.geek.nz/about 中文數學詞典 http: ...
- PHP 数字转大写
<?php header("content-type:text/html;charset=utf-8"); function numToRmb($num){ $rmbNum ...
- 获取电脑连接WiFi的信息
在cmd中执行如下命令,即可查看到所有连接过的WiFi信息 for /f "skip=9 tokens=1,2 delims=:" %i in ('netsh wlan show ...