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; ...
随机推荐
- Linux用户相关文件之用户信息文件
1.文件地址: /etc/pssswd -rw-r--r--. 1 root root 936 10月 6 12:50 /etc/passwd 2.文件内容: xiaol_1:x:501:501::/ ...
- 1、hive安装详细步骤
一.环境准备 hadoop-2.7.2 java 1.7.0 apache-hive-1.2.1 mysql Hive配置文件介绍 •hive-site.xml hive的配置文件 •hiv ...
- nodejs中全栈开发框架meteor的文档
http://wiki.jikexueyuan.com/project/discover-meteor/routing.html, 这本书的源码地址: https://github.com/Dis ...
- python基础26 -----python进程及协成
一.进程 1.multiprocessing模块实现多进程并发. 1.1multiprocessing包是Python中的多进程管理包,与threading.Thread类似,它可以利用multipr ...
- 在python中是如何管理内存的
python有一个私有堆空间来保存所有的对象和数据结构.作为开发者,我们无法访问它,是解释器在管理它,但是有了核心api后,我们可以访问一些工具.python内存管理器控制内存分配 内置垃圾回收器会回 ...
- 动手动脑:String.equals()的使用方法
public class StringEquals { /** * @param args the command line arguments */ public static void main( ...
- String和StringBufffer的区别
string的字符串操作都是废弃已有的对象,开辟一个新的内存空间创建一个新的对象 比如一个string str= "字符串"; str += "a"; 这样的操 ...
- Android开发之旅-Fragment和Activity之间onCreateOptionsMenu的联系
Fragment和Activity一样,可以重写onCreateOptionsMenu方法来设定自己的菜单,其实这两个地方使用onCreateOptionsMenu的目的和效果都是完全一样的,但是由于 ...
- Scrapy安装方法
Scrapy安装在Python2.7环境下 1.配置环境变量: 2.安装基础软件 4个(64位系统) 安装twisted: C:\Users\Administrator>pip install ...
- 20145240 《Java程序设计》第六周学习总结
20145240 <Java程序设计>第六周学习总结 教材学习内容总结 InputStream与OutputStream 10.1.1串流设计的概念 Java将输入/输出抽象化为串流,数据 ...