C++循环链表实现约瑟夫退圈(类封装)

node.h

 1 #pragma once
 2 #include <iostream>
 3 #include <iomanip>
 4 using namespace std;
 5
 6 struct number
 7 {
 8     int n;
 9     number *_next;
10 };//结构体定义
11 class node
12 {
13     int m,k;//m报数上限 k人数
14     number *s;
15 public://成员函数
16     node(void);
17     ~node(void);
18     void Joseph();
19     void set(int x);
20     void Delete(int x);
21 };

node.cpp

 1 #include "node.h"
 2 node::node(void)
 3 {
 4     s=NULL;//构造函数 令指针s指向空
 5 }
 6 node::~node(void)
 7 {
 8 }
 9 void node::Joseph()
10 {
11     int i=0,l=0;
12     cout<<"请输入总人数、报数上限:"<<endl;
13     cin>>k>>m;
14     cout<<"依次退圈的人:"<<endl;
15     set(k);
16     number *p=s,*q;
17     while(l<k-1)
18     {
19         q=p;
20         p=p->_next;
21         i++;
22         if(i==m)
23         {
24             l++;
25             cout<<q->n<<"号"<<endl;//报数报到上限 记录退出成员号码
26             Delete(q->n);//该成员退圈 及删除该节点
27             i=0;
28         }
29     }
30     cout<<"最后剩下的人: "<<s->n<<"号"<<endl;//最后链表中剩下的最后一个节点
31 }
32 void node::set(int x)//建立循环链表
33 {
34     int i;
35     s=new number;
36     s->n=1; s->_next=NULL;//没有设头结点
37     number *p=s,*q=NULL;
38     for(i=2;i<=x;i++)
39     {
40         q=new number;
41         q->n=i;
42         q->_next=NULL;
43         p->_next=q;
44         p=q;
45     }
46     p->_next=s;//最后一个节点指针指向第一个节点实现循环
47 }
48 void node::Delete(int x)//删除链表中数据为x的节点
49 {
50     number *p=s,*q=NULL;
51     if(s->n==x)
52     {
53         while(p->_next!=s)
54         {
55             q=p;
56             p=p->_next;
57         }
58         s=s->_next;
59         p->_next=s;
60     }
61     else
62     {
63         while(p->n!=x)
64         {
65             q=p;
66             p=p->_next;
67         }
68         q->_next=p->_next;
69     }
70 }

main.cpp

1 #include "node.h"
2 void main()
3 {
4     node a;
5     a.Joseph();
6 }

结果截图:

时间: 2024-08-14 09:08:21

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

(java描述)关于链表的代码-----单双、循环链表、约瑟夫环、多项式相加

将链表头尾倒置 将几个链表合并成一个新的链表,将链表中重复的节点去掉,并按大小排序 双向循环链表 单向循环链表(约瑟夫循环) 多项式相加 程序源代码 单链表.单向循环链表结点类 package javab; public class Node { int data; Node next; public Node(int data){ this.data=data; } } 第一题代码: package javab; import java.util.Scanner; public class I

C++循环链表解决约瑟夫环问题

约瑟夫环问题可以简单的使用数组的方式实现,但是现在我使用循环链表的方法来实现,因为上午看到一道面试题规定使用循环链表解决约瑟夫环问题. 什么是约瑟夫环? “约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列:他的下一个人又从1开始报数,数到m的那个人又出列:依此规律重复下去,直到圆桌周围的人全部出列.”(百度百科中的解决办法列出了很多,可以看到循环链表并不是最简单的方法) 这道面试题考察了循环链表的“创建”,

QT 操作excel 类封装

1 # pro file 2 [plain] view plaincopy 3 CONFIG += qaxcontainer 4 5 QT += core 6 7 QT -= gui 8 9 TARGET = QExcel 10 CONFIG += console 11 CONFIG -= app_bundle 12 13 TEMPLATE = app 14 15 16 SOURCES += main.cpp \ 17 qexcel.cpp 18 19 HEADERS += \ 20 qexce

php---数据库类封装

为了节省以后的时间,今天封装了操作sql语句的一个类,在此保存起来,方面以后使用. 这个类的文件名:SqlTool.class.php 主要有dql和dml两个函数 看下面的源码" <?php class SqlTool{ private $conn; private $username="root"; private $password="1234"; private $host="127.0.0.1"; private $db

操作类封装

/*操作类封装 */ /*调用方法 如下: * var str= new IStrManipulation();//实例化字符串处理接口 * console.log(str.StrManipulation('StrManipulation',"111sss23123").getLength()); * var convert =new IConvert();//实例化类型转换接口 * console.log(convert.Convert('Convert',"1112312

MFC如和将类封装到DLL以及调用

MFC如和将类封装到DLL以及调用 分类: C++技术2012-06-27 17:40 1028人阅读 评论(0) 收藏 举报 dllfunmfcnullexe *1.先用mfc向导生成静态dll文件.*2.编辑增加类:*3.生成dll文件和lib文件:*4.将生成的dll和lib,和类的头文件复制到需要引用的文*件exe下:*///导出dll的头文件myClass.h#define DLLimport __declspec(dllimport)#define DLLexprot __decls

RUBY的类封装,继承,多态简单演示

class Person def initialize(name,age=18) @name=name @age=age @motherland="China" end def talk puts "my name is " [email protected]+",age is "+@age.to_s if @motherland == "China" puts "I am a China." else p

循环链表解决约瑟夫问题

训练一下尾插法和循环链表的使用. //循环链表解决约瑟夫问题 #include <stdio.h> #include <stdlib.h> typedef struct CycleLinkList { int data; struct CycleLinkList * next; }cycleLinkList; cycleLinkList * h, * r, * s; // 头指针.尾指针 int main() { int i, j; int n, num; cycleLinkLis

jQuery自定义类封装:

jQuery自定义类封装: (function ($) { $.DragField = function (arg) { var name = "你好";     //这个是私有变量,外部无法访问 this.testFun = function () {     //this.testFun方法,加上了this,就是公有方法了,外部可以访问. alert(arg.title + "," + name); }; }; })(jQuery); 使用方法: var a =