约瑟夫问题c语言实现代码

约瑟夫问题c语言实现代码,第1张

测试结果:

总人数n=9,报数m=2.

2->4->6->8->1->5->9->7->3

#include<stdio.h>

#include<stdlib.h>

typedef struct node

{

    int data

    struct node *next

}node

typedef node* Linklist

//原代码void CreatLinklist( Linklist *L,int n)

Linklist CreatLinklist(Linklist *L,int n)

{

    Linklist p,s

    *L=(Linklist)malloc(sizeof(node))

    (*L)->next=NULL

    int i=1

    p=*L    //增加这个语句,让p指向当前结点

    if(n!=0)

    {

        //原代码while(i<=41)

        while(i<=n)

        {

            s=(Linklist)malloc(sizeof(node))

            陆含s->data = i++

            p->next = s

            p=s

        }

        s->next=(*L)->next//将链表循环起来;

    }

    free(*L)//释放头结点;

    return s->next//返回第一个结点的值;

}

int main()

{

    int n=41  //9

    int m=3   //2

    int i

    Linklist L

    printf("总人数n=%d,报数m=%d.\n",n,m)

    //原代码Linklist *p = CreatLinklist(Linklist *L,int 笑卖n)

    Linklist p = CreatLinklist(&L,n)

    Linklist temp

    m%=n

    while(p!=p->next)

    {

        for(i=1i<m-1i++)

        {

            p=p->next

        }

        printf("%d->",p->next->data)

        temp=p->next

        p->next=temp->next

       早升笑 free(temp)

        p=p->next

    }

    printf("%d",p->data)

    return 0

}

约瑟夫环问题的源程序如下:

#include "stdio.h"

#include "stdlib.h"

typedef struct node

{ int data

struct node *next

}JD

JD *xhlbjl(JD *front, JD *rear,int n)

{ /*建立循环队列*/

int i

front=(JD *)malloc(sizeof(JD))

front->data=n/*头指针指向n号*/

front->next=front

for (i=n-1i>0i--)

{ rear=(JD *)malloc(sizeof(JD))

rear->data=i

rear->next=front->next

front->next=rear

}

return(front)

}

JD *outqueue(JD *front, JD *rear,int m) /*出队列*/

{int i,s

for (i=0i<s-1i++)

front=front->next

return(front)

}

main()

{ JD *h,*p,*q,*s

int i,j,m,n

printf("请输入人数 ")

scanf("%d",&n)

h=xhlbjl( p,q,n)

p=h->next

printf("坐成一圈的人是: ")

for(i=1i<=ni++)

{ printf("%3d",p->data)

p=p->next

}

printf("\n请渗扰输举好入开始位置 ")

scanf("%d",&s)

printf("数几个出去 ")

scanf("%d",&m)

s=outqueue(p,q,m)

q=s

p=s->next

for(j=0j<nj++)

{ for (i=1i<mi++)

{ q=p

p=p->next

}

printf("\n出列丛答旦的人是第 %d 号",p->data)

q->next=p->next

free(p)

p=q->next

}

}

http://zhidao.baidu.com/question/14741820.html?si=1


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12452313.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存