c语言——约瑟夫环循环链表

#include<stdio.h>
#include <stdlib.h>
#define MAXN 100
 
typedef struct _data 
{
    int flag; //标记
    char name[30]; //姓名 
    int index;  //序号
 
    struct _data *next;
}Stdata;
 
 
void CountOff(int n,int w,int s,Stdata* out);
 
int main()
{
    int i,n,w,s;
    Stdata* head=0,*p,*t;
    scanf("%d",&n);  //读取N
    getchar();//吸收回车符
    for(i=0;i<n;i++)
    {
        p = (Stdata*)malloc(sizeof(Stdata)); 
        //读取N个名字,并存如链表
        scanf("%s",p->name);
        p->flag = 0;
        p->index = i+1;
        p->next = 0;
        if(head==0)
        {
            head = p;
            t=head;
        }else
        {
            t->next = p;
            t = p;
        }
    }
    t->next = head; //最后一个节点指向头节点
    scanf("%d %d",&w,&s); //读入w和s
 
    CountOff(n,w,s,head);
 
    //释放空间
    while(head)
    {
        p = head->next;
        free(head);
        head = p;
    }
    head = 0;
    return 0;
}
 
void CountOff(int n,int w,int s,Stdata* head)
{
    int i=1,t=n,k=0;//t表示剩余人数
    Stdata* out=head;
 
    //找到第w个位置
    while(i<w)
    {
        out = out->next;
        i++;
    }
 
 
    //开始出队
    while(t!=1)
    {
        if(out->flag==0)
        {
            k++;
            if(k%s==0)
            {
                k = 0;
                out->flag=1;
                printf("%d %s\n",out->index,out->name);
                t--;
            }
        }
        out = out->next;
    }
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

优快云专家-深度学习进阶

听说打赏的都进了福布斯排行榜

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值