美文网首页
数据结构约瑟夫循环

数据结构约瑟夫循环

作者: Destiny_0ea2 | 来源:发表于2018-10-17 21:19 被阅读0次

#include <stdio.h>

typedef struct Node

{

int data;

struct Node * next;

}Node,*LinkList;

/**********创建约瑟夫环****************

*                                    *

*  参数:单链表头指针CL,结点个数n  *

*                                    *

*  返回值:返回头指针                *

*                                    *

**************************************/

LinkList InitRing(int n)

{

LinkList CL;

Node *p,*q;

int i;

CL=p=(Node*)malloc(sizeof(Node));

p->data=1;

for(i=2;i<=n;i++)

{

    q=(Node *)malloc(sizeof(Node));

q->data=i;

p->next=q;

p=q;

}

q->next=CL;

return CL;

}

/**********输出约瑟夫环****************

*                                    *

*  参数:单链表头指针CL              *

*                                    *

*  无返回值                          *

*                                    *

**************************************/

void PrintLink(LinkList CL)

{

Node *p;

p=CL;

printf("循环单链表数据:");

do

{

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

p=p->next;

}while(p!=CL);

printf("\n\n");

}

/****************报数******************

*                                    *

*  参数:单链表头指针CL,报数上限m  *

*                                    *

*  无返回值                          *

*                                    *

**************************************/

void Delete(LinkList CL,int m)

{

int i;

Node *p,*q;    //p用于指向待删除结点的前驱结点,q用于指向待删除结点

printf("报数输出序列:");

p=CL;

q=NULL;

while(p->next!=p)//若链表为空,则报数结束

{

for(i=2;i<m;i++)

{

p=p->next;

}

q=p->next;

p->next=q->next;

printf("%4d",q->data);

free(q);

//上一轮报数结束,需调整p的指向,指向新一轮报数的起点

p=p->next;

    }

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

free(p);

printf("\n\n");

}

void main()

{

LinkList CL;

int n,m;

printf("请输入约瑟夫总人数:");

scanf("%d",&n);

CL=InitRing(n);

PrintLink(CL);

printf("请输入报数上限:");

scanf("%d",&m);

Delete(CL,7);

}

相关文章

  • 数据结构约瑟夫循环

    #include typedef struct Node { int data; struct Node * ne...

  • 算法面经---单向循环链表(解决约瑟夫问题)

    单向循环链表--解决约瑟夫问题 一、单向循环链表的应用场景 1.1 问题描述 Josephu(约瑟夫、约瑟夫环) ...

  • 单向链表解决约瑟夫问题

    1.什么是约瑟夫问题? 2.约瑟夫问题的解决方式通过单向循环链表解决,具体思路如下: 3.单向循环链表的使用场景 ...

  • 约瑟夫问题

    约瑟夫问题 一、数组解法 二、循环队列 三、数学解法

  • 数据结构与算法之循环链表(3.4)

    目录 单向循环链表双向循环链表约瑟夫问题如何发挥循环链表的最大威力? 一 单向循环链表 单向循环链表 - 只有一个...

  • python中队列的应用:约瑟夫斯问题

    著名的约瑟夫斯问题(Josephus Problem)是应用队列(确切地说,是循环队列)的典型案例。约瑟夫斯问题讲...

  • 约瑟夫环(单循环链表)

    问题描述: m个人围成一个圈,指定一个数字n,从第一个人开始报数,每轮报到n的选手出局,由下一个人接着从头开始报,...

  • 循环链表应用——约瑟夫置换

    约瑟夫问题 介绍 约瑟夫问题,又称约瑟夫置换、丢手绢问题。 一般形式 (本部分内容来自百度百科[https://b...

  • 约瑟夫问题

    大家自行百度下约瑟夫问题,这里用golang+单向循环链表的方式解决约瑟夫问题,下面先提供一下代码: func (...

  • 代码时间优化

    数据结构,循环 改进算法,选择合适的数据结构 字典(dictionary) 与 列表(list) 用途:多数据成员...

网友评论

      本文标题:数据结构约瑟夫循环

      本文链接:https://www.haomeiwen.com/subject/xyxdzftx.html