n只猴子要选大王,选举办法如下:所有猴子按1、2、3、……、n编号围坐一圈,从第1号开始按照1、2、3、……、m报数,凡报m号的退出圈外,如此循环报数,直到圈内剩下一只猴子时,这只猴子就是大王。n和m由键盘输入,打印出最后剩下的猴子号码。

如果用单向循环链表实现。

//循环链表
#include<stdio.h>
typedef struct node
{struct node *next;int data;
}Li;
//初始化循环链表
Li *Init()
{Li *L;L=(Li*)malloc(sizeof(Li));L->data=1;L->next=L;return L;
}
//尾插法 因为顺序和插入顺序一样
Li* Insert(Li *r,int e)
{Li *q;//r指向最后结点q=(Li*)malloc(sizeof(Li));q->data=e;//r->next=q;错误 单链表插入先动后在动前 警示//q->next=r;错误q->next=r->next;r->next=q;r=q;//r永远指向尾结点return r;
}
void Creat(Li *l,int e)
{Li *r=l;//r为尾结点int n;for(n=2;n<=e;n++){r=Insert(r,n);}
}
void Dawang(Li *l,int k)//k为每次删除的位置 n为多少只猴子
{Li *p=l,*q;int j;//计数器while(p->next!=p){j=1;while(j<k-1)//找到k-1的结点{p=p->next;j++;}//删除第n个结点q=p->next;p->next=q->next;free(q);//p=p->next;}printf("\n被选出来的大王为%d\n",p->data);}
int main()
{Li *L;int j,k,n;L=Init();printf("输入有多少只猴子和要删除个数");scanf("%d%d",&n,&k);Creat(L,n);Dawang(L,k);
}

如果用单链表实现,不用循环的写法(实际上也是循环的思路)

#include<stdio.h>
#include<stdlib.h>
typedef struct node
{struct node *next;int data;
}Li;
//初始化循环链表
Li *Init()
{Li *L;L=(Li*)malloc(sizeof(Li));L->next=NULL;return L;
}//尾插法 因为顺序和插入顺序一样
Li* Insert(Li *r,int e)
{Li *q;//r指向最后结点q=(Li*)malloc(sizeof(Li));q->data=e;r->next=q;q->next=NULL;r=q;//r永远指向尾结点return r;
}
void Creat(Li *l,int e)//创建单链表
{Li *r=l;//r为尾结点int n,j;for(n=1;n<=e;n++){r=Insert(r,n);}
}
void deleted(Li *l,int i)//删除结点使用
{Li *p=l,*q;int j=0;//寻找i-1结点while(p->next&&j<i-1){p=p->next;j++;}//删除点没有找到if(j>i-1){printf("error");return 0;}q=p->next;p->next=q->next;free(q);
}
void dawang(Li *l,int k,int n)//k为每次删除的猴子 n为多少只猴子
{Li *p=l,*q=l;int m=0;//计数器int i;while(1){q=q->next;m++;//第一 找删除位置 两种情况 在中间某个位置 或要删除的结点在单链表的首结点if(m==k-1)//定位到m-1个结点后将m结点删除,然后继续开始从1开始计数{if(q->next!=NULL){deleted(q,1);//printf("%d  **\n",q->data);m=0;n--;//猴子数量减去一}else{deleted(p,1);//删除首结点位置q=p;//p指针指向q的位置m=0;n--;}}//第二 要看路上计数时到达尾部 那么就重新指向首结点if(q->next==NULL)//走到头了以后回到起点{q=p;//p永远指向首结点,作用就是给q赋}if(n==1)//当n猴子删成只有一个了就终止循环{break;}}printf("猴王是:%d号\n",p->next->data);
}
/*void bianli(Li *L)
{Li *p=L->next;printf("单链表为:");while(p){printf("%d ",p->data);p=p->next;}printf("\n");
}*/
int main()
{Li *L;int j,k,n;L=Init();printf("输入有多少只猴子和位置");scanf("%d%d",&n,&k);Creat(L,n);dawang(L,k,n);
}

两种方法,都可出来结果

输入有多少只猴子和位置10 4
猴王是:5号

结束;

数据结构,猴子选大王C语言循环链表相关推荐

  1. 猴子选大王(c语言)

    猴子选大王 描述 格式 样例 题解及详细注释 描述 有n只猴子(编号从1到n),按顺时针方向围成一圈选大王. 规则是从第1号开始报数,一直数到m,数到m的猴子退出圈外,剩下的猴子再接着从1开始报数.就 ...

  2. 数据结构猴子选大王java_数据结构例子-猴子选大王

    约瑟夫问题(猴子选大王):   n只猴子要选大王,选举办法如下:所有猴子按1,2,-,n编号围坐一圈,从第一号开始按1,2,-,m报数,凡报m号的推出圈外,如此循环报数,直到圈内剩下一只猴子时,这只猴 ...

  3. 猴子选大王c语言课程设计,【C/C++】猴子选大王

    这些题目都是大一刚入学时学习C语言的课后作业,在OJ上看到还保留着,就都整理下发出来吧......(只有题和代码) [问题描述]要从n只猴子中选出一位大王.它们决定使用下面的方法: n只猴子围成一圈, ...

  4. java线性表猴子选大王,线性表应用:约瑟夫问题(猴子选大王)(循环链表,数组,递归)...

    1 描述:一群猴子要选新猴王.新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号.从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报 ...

  5. 猴子选王c语言链表程序代码,数据结构(C语言)用栈和链表编写猴子选大王程序...

    <数据结构(C语言)用栈和链表编写猴子选大王程序>由会员分享,可在线阅读,更多相关<数据结构(C语言)用栈和链表编写猴子选大王程序(3页珍藏版)>请在人人文库网上搜索. 1.i ...

  6. 用C语言编写猴子选大王程序(数据结构)

    猴子选大王案例编程. 编程要求:猴子选大王:一堆猴子都有编号,编号是1,2,3 -m ,这群猴子(m个)按照1–m的顺序围坐一圈,从第1开始数,每数到第n个(n<m),该猴子就要离开此圈,这样依 ...

  7. 【数据结构机试复习2】 赛马 猴子选大王

    EX1:赛马 A与B之间将进行一场赛马比赛,C为裁判.A与B分别拥有n匹马,这2n匹马中每匹马拥有的能力值都不相同.比赛前,参赛的两人先决定自己的马的出场顺序:比赛时,A的第一匹马将对战B的第一匹马, ...

  8. 猴子选王c语言链表程序代码,C语言程序设计-猴子选大王[链表应用]

    2032 猴子选大王 Description 有N只猴子,从1~N进行编号.它们按照编号的顺时针方向排成一个圆圈,然后从第一只猴子开始报数.第一只猴子报的第一个数字为1,以后每只猴子报的数字都是它们前 ...

  9. 数据结构上机实践第四周项目5 - 猴子选大王

    数据结构实践--猴子选大王 首先呢,小普及一下 读者:难道你当我不知道 读者想对小编说: 进入正题,项目要求如下: 一群猴子,编号是1,2,3 -m,这群猴子(m个)按照1-m的顺序围坐一圈.从第1只 ...

  10. 数据结构实践——猴子选大王

    本文针对数据结构基础系列网络课程(2):线性表的实践项目. [项目 - 猴子选大王] 一群猴子,编号是1,2,3 -m,这群猴子(m个)按照1-m的顺序围坐一圈.从第1只开始数,每数到第n个,该猴子就 ...

最新文章

  1. kendo #数据结构 #重心分解
  2. 网络视频:企业营销新机遇
  3. iOS 11开发教程(十一)了解iOS11应用视图
  4. 从富文本中截取图片_Excel文本数字拆分,模式化公式详解
  5. 教你在windows 7/xp 下安装使用mencoder
  6. Escape字符总结
  7. leetcode--133. 克隆图
  8. python csv转为html,在Python中将CSV转换为HTML表格
  9. 【转载翻译】Debian配置Networking 和 apt-get 源信息 开启root远程登录权限
  10. Servlet(2) 三个域对象
  11. Python脚本覆盖率分析方法介绍
  12. 强悍!winrar妙用-将bat脚本打包成exe可执行文件并实现自动执行
  13. 让人感到惊艳的5款数据可视化大屏产品
  14. Open Yale course:Listening to Music
  15. CES2013前瞻:1080p屏幕手机集中爆发
  16. Macsome Tidal Music Downloader for Mac(Tidal音乐下载器)
  17. 《道德经》全文 (马王堆出土帛书版)
  18. v-model是什么?怎么使用?
  19. 【SQRT】函数使用技巧
  20. 中鑫优配新股开盘破发你怎么看

热门文章

  1. yolov5(v6.0)训练时出现警告:libpng warning: iCCP: known incorrect sRGB profile
  2. python读取大型txt文件_【师兄带你学Python-6】一个大容量菜品架(txt文件读写)...
  3. socketChatRoom_Server(聊天室服务端)
  4. 大数据应用发展史:从搜索引擎到人工智能
  5. 我曾无比温柔爱过你。
  6. nginx 部署(无图无说明)
  7. 子实体形态相关基因鉴定
  8. bt5安装虚拟机工具报错unable to create symlink etc/cups/ppd/VMware_Virtual_Printer.ppd pointing to file /u
  9. 英文和中文状态下的字符流和字节流的表现区别小结
  10. 智能手表音频特性测试_“微纳结构动态特性测试仪”国家重大专项荣获舜宇智能光学2019年度优秀项目奖...