1. 程式人生 > >約瑟夫環問題(迴圈連結串列實現)

約瑟夫環問題(迴圈連結串列實現)

約瑟夫環問題,n個人圍成一圈,報數到m的人出列,直至n個人全部出列,問出列人的順序

手寫迴圈連結串列模擬實現

#include<stdio.h>
#include<stdlib.h>

typedef struct SingleNode
{
    int date;
    struct SingleNode *next;
}list;

int main()
{
    list *head,*vis,*temp;
    int n,m;
    printf("請輸入總人數n:");
    scanf("%d",&n);
    printf("數到m的人出列,請輸入m:");
    scanf("%d",&m);
    head=vis=(list*)malloc(sizeof(list));
    head->date=1;
    for(int i=2;i<=n;i++)
    {
        vis->next=(list*)malloc(sizeof(list));
        vis=vis->next;
        vis->date=i;
    }
    vis->next=head;
    temp=head;
    printf("出列順序為:");
    while(n)
    {
        for(int i=1;i<m;i++)
            vis=vis->next;
        temp=vis->next;
        vis->next=temp->next;
        printf("%d ",temp->date);
        free(temp);
        n--;
    }
    puts("\n");
    return 0;
}