c语言的一个题,约瑟夫环,用循环链表解释一下,谢谢,这些内容一直学不会,看不懂
4条回答 默认 最新
- 技术专家团-小桥流水 2022-03-08 18:03关注
循环链表方式实现,运行结果:
完整代码如下:
#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; } }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 虚幻5 UE美术毛发渲染
- ¥15 CVRP 图论 物流运输优化
- ¥15 Tableau online 嵌入ppt失败
- ¥100 支付宝网页转账系统不识别账号
- ¥15 基于单片机的靶位控制系统
- ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
- ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
- ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
- ¥15 手机接入宽带网线,如何释放宽带全部速度
- ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测