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 运动想象脑电信号数据集.vhdr
- ¥15 三因素重复测量数据R语句编写,不存在交互作用
- ¥15 微信会员卡等级和折扣规则
- ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
- ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
- ¥15 gdf格式的脑电数据如何处理matlab
- ¥20 重新写的代码替换了之后运行hbuliderx就这样了
- ¥100 监控抖音用户作品更新可以微信公众号提醒
- ¥15 UE5 如何可以不渲染HDRIBackdrop背景
- ¥70 2048小游戏毕设项目