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++法式設計有所贊助。