C++循环链表之约瑟夫环的实现方法

 更新时间:2014年09月02日 16:00:27   投稿:shichen2014  
这篇文章主要介绍了C++循环链表之约瑟夫环的实现方法,对于学习数据结构与算法有一定的借鉴价值,需要的朋友可以参考下

本文实例形式展示了C++实现循环链表中约瑟夫环的方法,分享给大家供大家参考之用。具体方法如下:

主要功能代码如下:

#include <iostream>
using namespace std;

typedef struct student
{
 int data;
 struct student* next;
}node,*LinkList;
//约瑟夫环
void printfList(LinkList head){

 LinkList p=head;
 if (head!=NULL)
 {

 do{
  cout<<p->data<<" ";
  p=p->next;
 }while(p!=head);//这里出现过问题,用do-while
 cout<<endl;
 }
}
void Josephus(int n,int k,int m){
 int i=2;
 LinkList head=(LinkList)malloc(sizeof(node));
 head->next=head;
 head->data=1;
 LinkList pre=head;
 while(i<=n){
   LinkList p=(LinkList)malloc(sizeof(node));
 p->data=i;
 p->next=pre->next;
 pre->next=p;
 pre=p;
 i++;
 }
 printfList(head);

 LinkList mend=pre;
 int kk=0;
 while(kk!=k){
 mend=mend->next;
 ++kk;
 }//找到k个开始
 
 while(n--){//要全部输出
 int mm=1;
 pre=mend;//每次都要给pre从新复值否则程序错误
 while(mm!=m){//不是要求的数,指针每次往前推一步,mend指向报数的人,pre指向前一个
  pre=mend;
  mend=mend->next;
  mm++;
 }
 pre->next=mend->next;//前一个链到下一个准备报数的
 cout<<mend->data<<endl;
 LinkList deletem=mend;
 mend=pre->next;//mend指向报数的人;
 free(deletem); //最后删除 
 }
}
int main(){
 Josephus(13,4,1);
 return 0;
}

希望本文所述对大家的C++程序设计有所帮助。

相关文章

  • 基于c++中的默认拷贝函数的使用详解

    基于c++中的默认拷贝函数的使用详解

    本篇文章对c++中默认拷贝函数的使用进行了详细的分析介绍。需要的朋友参考下
    2013-05-05
  • C++11之后的decltype类型指示符详解

    C++11之后的decltype类型指示符详解

    为了满足这一要求,C++11 新标准引入了另一种类型说明符 decltype ,它的作用是选择并返回操作数的数据类型,这篇文章主要介绍了C++11之后的decltype类型指示符,需要的朋友可以参考下
    2023-01-01
  • C++实现LeetCode(159.最多有两个不同字符的最长子串)

    C++实现LeetCode(159.最多有两个不同字符的最长子串)

    这篇文章主要介绍了C++实现LeetCode(159.最多有两个不同字符的最长子串),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C语言中联合体union的实例详解

    C语言中联合体union的实例详解

    这篇文章主要介绍了 C语言中联合体union的实例详解的相关资料,希望通过本文能帮助到大家,让大家理解掌握这部分内容,需要的朋友可以参考下
    2017-10-10
  • C语言编写银行打印程序实例参考

    C语言编写银行打印程序实例参考

    模拟银行的钱数大写输出例如:345叁肆伍
    2012-11-11
  • C语言实现单链表逆序与逆序输出实例

    C语言实现单链表逆序与逆序输出实例

    这篇文章主要介绍了C语言实现单链表逆序与逆序输出,是数据结构与算法中比较基础的重要内容,有必要加以牢固掌握,需要的朋友可以参考下
    2014-08-08
  • C++类型兼容规则详情

    C++类型兼容规则详情

    这篇文章主要介绍了C++类型兼容规则详情,共有继承时,任何需要父类对象的地方,都能使用子类对象“替代”,这就是类型兼容规则,下面一起来了解文章相关内容吧
    2022-03-03
  • c语言中return与exit的区别浅析

    c语言中return与exit的区别浅析

    c语言中return与exit的区别浅析,需要的朋友可以参考一下
    2013-03-03
  • C++超详细讲解友元的使用

    C++超详细讲解友元的使用

    采用类的机制后实现了数据的隐藏与封装,类的数据成员一般定义为私有成员,成员函数一般定义为公有的,依此提供类与外界间的通信接口。但是,有时需要定义一些函数,这些函数不是类的一部分,但又需要频繁地访问类的数据成员,这时可以将这些函数定义为该类的友元函数
    2022-04-04
  • 计时器的time_t和clock_t 的两种实现方法(推荐)

    计时器的time_t和clock_t 的两种实现方法(推荐)

    下面小编就为大家带来一篇计时器的time_t和clock_t 的两种实现方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10

最新评论