18.约瑟夫环
用单循环链表做的。
代码.
/* 这是约瑟夫环 */ #include<iostream> using namespace std; typedef struct node { int data; struct node* next; }Link; void josephus(int n,int m) { //用循环链表做 Link *head,*tail; int i,j; head=NULL; tail=NULL; for(i=0;i<n;i++) { Link* temp=new Link; temp->data=i; temp->next=NULL; if(head==NULL) { head=temp; tail=temp; } else { tail->next=temp; tail=temp; } } tail->next=head; //循环链表建成 //first指针指向每次开始的节点,最后一次时它应该指向自己 Link* pre=tail; Link* first=head; while(first->next!=first) { for(j=1;j<m;j++) { pre=first; first=first->next; } //first指向的出列 //cout<<first->data<<"出"<<endl; //删除first这个指针 Link* temp=first; pre->next=first->next; first=first->next; delete temp; temp=NULL; } cout<<first->data<<"出"<<endl; delete first; first=NULL; } int main(void) { int m,n; cin>>n>>m; josephus(n,m); return 0; }