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;
}

 

posted on 2013-07-26 10:53  紫金树下  阅读(165)  评论(0编辑  收藏  举报