typedef struct LNode{ int password; int num; struct LNode *next; }LNode,*LinkList;LinkList l,p,q;
void creatlist(){ //初始化约瑟夫环 int i; l=(LNode*)malloc(sizeof(LNode)); printf(\"请输入各元素的编号和密码:\"); scanf(\"%d%d\ p=l; //p指针指向第一个人 for(i=1;i<7;i++){ q=(LNode*)malloc(sizeof(LNode)); scanf(\"%d%d\ l->next=q; l=q; //l指针指向当前环上的最后一个人 } l->next=p; //将最后一个人和第一个人串起来 p=l; //p指针此时指向约瑟夫环上的最后一个人 }
void loseph(int k){ int i; while(p!=p->next){ if(k==1){ //得到密码,根据密码顺时针遍历,找到下一个要出列的人,如此循环,直到所有人都出列为止 k=p->next->password; q=p->next; p->next=q->next; //密码为1的人作特殊处理 printf(\"%d,\ free(q); } else{ for(i=1;inext; k=p->next->password; q=p->next; p->next=q->next; printf(\"%d,\ free(q);} } printf(\"%d\\n\ free(p); }
void main(){ int m; creatlist();
printf(\"请输入报数的初始值m(m<=30):\"); scanf(\"%d\ printf(\"\\n出列顺序:\\n\"); loseph(m); system(\"pause\"); }