# include "stdlib.h" # include "stdio.h" struct Node{ int data; Node *next;};int main(){ int n,k=1,m,i,s; Node *p,*q,*head; printf("约瑟夫问题——顺序表/n输入总人数n和退出编号m:/n"); // 输入总人数,退出编号 scanf("%d%d",&n,&m); head=new Node; //确定头结点 p=head; for(i=1;i<=n-1;i++) //赋初值 { p->data=i; p->next=new Node; //为下一个新建内存 p=p->next; } p->data=n; //最后一个单独处理 p->next=head; //指向头,形成循环链表 p=head; while(p->data!=(p->next)->data) //p->data==(p->pNext)->data表示只剩下一个结点的 { while(p->data !=k) //寻找编号为k的结点 p=p->next; s=1; if(m==1) { for(i=1;i<n;i++) { p=p->next ; } printf("最后退出的是第%d位人/n",p->data); break; }else{while(p!=p->next) { for(i=1;i<m-1;i++) p=p->next; q=p->next; p->next=q->next;p=p->next; delete q; s++; }printf("最后退出的是第%d位人/n",p->data); delete p;} }system("Pause");return 0; }
转载于:https://www.cnblogs.com/ituff/archive/2011/03/16/2858553.html
相关资源:用单向循环链表实现约瑟夫环问题