鱼C论坛

 找回密码
 立即注册
查看: 4573|回复: 1

约瑟夫环(运用单向循环链表来实现约瑟夫环问题)

[复制链接]
发表于 2021-6-7 09:44:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
/*
约瑟夫环问题
*/

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

typedef struct LinkNode
{
    int data;
    struct LinkNode *next;
}LinkNode,*LinkList;



//创立一个不带头节点的循环链表
void build(LinkList &L)
{
    L=(LinkNode *)malloc(sizeof(LinkNode));
    LinkList q=L;
    int e;
    scanf("%d",&e);
    L->data=e;
    scanf("%d",&e);
    while(e!=-1)
    {
        LinkNode *s=(LinkNode *)malloc(sizeof(LinkNode));
        s->data=e;
        q->next=s;
        q=s;
        scanf("%d",&e);
    }
    q->next=L;
}



void yuesefu(LinkList &L,int m)
{
    int n=1;
    LinkList p=L;
    //遍历
    while(L->next!=L)
    {
        p=p->next;
        n++;
        if(n==m)
        {
            LinkList r=L;
            while(r->next!=p)
            {
                r=r->next;
            }
            r->next=p->next;
            printf("%d ",p->data);
            free(p);
            p=r;
            L=r->next;//让新开始报数的结点当头
            n=0;//重新从0开始计数
        }

    }
}


int main()
{
    LinkList L;
    build(L);
    yuesefu(L,5);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-6-7 09:47:03 | 显示全部楼层
双向循环链表更简单一些,时间复杂度也更低,但是约束条件较多,在题目中一般是不准许使用双线链表,还有人问静态数组可以实现吗,答案当然是可以,但是为什么我不用,别问,问就是不喜欢数组
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 22:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表