[数据结构]约瑟夫问题

来源:互联网 发布:access数据库 网页 编辑:程序博客网 时间:2024/06/13 09:02
//约瑟夫问题,n个人围圈报数,报m的出列,最后剩下的是几号?#include <stdio.h>#include <stdlib.h>//结构体表示链表的结点typedef struct node{    int data;    struct node *next;}node;node *create(int n){    node *p = NULL, *head;    head = (node*)malloc(sizeof (node ));//分配头结点    p = head;//指向当前结点的指针    node *s;    int i = 1;        if( 0 != n )    {        while( i <= n )        {            s = (node *)malloc(sizeof (node));            s->data = i++;    //            p->next = s;            p = s;        }        s->next = head->next;    }        free(head);        return s->next ;}int main(){    int n = 41;    int m = 3;    int i;    node *p = create(n);    node *temp;        m %= n;    printf("出队列的顺序是:\n");    while (p != p->next )    {        for (i = 1; i < m-1; i++)        {            p = p->next ;        }                printf("%d->", p->next->data );                temp = p->next ;//删除第m个结点        p->next = temp->next ;        free(temp);                p = p->next ;    }        printf("\n\n最后留下来的人的号码是:%d\n", p->data );        return 0;}

0 0
原创粉丝点击