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++循环链表之约瑟夫环的实现方法 的全部内容, 来源链接: utcz.com/z/355565.html

回到顶部