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

2025-05-27 0 42

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

主要功能代码如下:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64
#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++程序设计有所帮助。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 C++循环链表之约瑟夫环的实现方法 https://www.kuaiidc.com/75821.html

相关文章

发表评论
暂无评论