约瑟夫环问题 【循环链表的应用】

来源:互联网 发布:java ee8 编辑:程序博客网 时间:2024/05/22 00:37
#include <iostream>#include <cstdlib>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);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;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;}

0 0
原创粉丝点击