C++輪回鏈表之約瑟夫環的完成辦法。本站提示廣大學習愛好者:(C++輪回鏈表之約瑟夫環的完成辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是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++法式設計有所贊助。