- 1、本文档共63页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
c语言课件lec.ppt
Thank you!Q A * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Example : Joseph problem (约瑟夫问题). 这是十七世纪的法国数学家加斯帕在《数目的游戏问题》中讲的一个故事:15个基督教徒和15个异教徒在海上遇险,必须将一半的人投入海中,其余的人才能幸免于难,于是想了一个办法:30个人围成一个圆圈,从第一个人开始依次报数,每数到第 9 个人就将他扔入大海,如此循环进行直到仅余 15 人为止。问怎样排法,才能使每次投入大海的都是异教徒。 * 题目中30个人围成一圈,因而启发我们用一个循环的链来表示。可以使用结构数组来构成一个循环链。 结构中有两个成员:其一为指向下一个人的指针,以构成环形的链;其二为该人是否被扔下海的标记,为1表示还在船上。 从第一个人开始对还未扔下海的人进行计数,每数到9时,将结构中的标记改为0,表示该人已被扔下海了。这样循环计数直到有15个人被扔下海为止。 * Example : Joseph problem (约瑟夫问题)(cont.) * 1 2 29 30 ….. Header pointer Head node 用链表的方法对约瑟夫问题进行编程 算法分析与设计 首先定义链表数据结构 struct node { int no; struct node * next; }; 期望建立的原始链表形式 main( ) { int i, k; struct node *head, *p, *q; head = (struct node *)malloc(sizeof(struct node)); head-no = -1; head-next = head; -1 1 2 29 30 ... head 表头 数据结点 数据结点 数据结点 数据结点 -1 head 表头 for ( i=30; i0; i-- ) { p = (struct node *)malloc(sizeof(struct node)); p-no = i; p-next = head-next; head-next = p; } 30 p x p 29 p while ( p-next != head ) // 遇到表头结点终止循环 p = p-next; -1 1 2 29 30 ... head 表头 数据结点 数据结点 数据结点 数据结点 -1 1 2 29 30 ... head 表头 数据结点 数据结点 数据结点 数据结点 p p-next = head-next; // p的指向要跳过表头节点 -1 1 2 29 30 ... head 表头 数据结点 数据结点 数据结点 数据结点 p p for ( i=0; i15; i++ ) // 15人出列 { for ( k=1 ; k9 ; k++ ) // 报数到 9 为止 p = p-next; q = p-next; // p的下一个结点出列 p-next = q-next; // 跳过要出列的结点 printf(%3d, q-no); // q 结点的编号 free(q); // 释放 q 结点 } -1 1 2 29 30 ... head 表头 数据结点 数据结点 数据结点 数据结点 p main( ) { int i, k; struct node *head, *p, *q; head = (struct node *)malloc(sizeof(struct node)); head-no = -1; head-next = head; for ( i=30; i0; i-- ) /* 生成循环链表 */ { p = (struct node *)malloc(sizeof(struct node)); p-next = head-next; p-no = i; head-next = p; } printf(\nThe original circle is :); while ( p-next != head ) /* 循环链跳过表头结点 */ p = p-next; p-next = head-next; /* p 指向 30 */ for ( i=0; i15; i++ ) { for ( k
您可能关注的文档
最近下载
- 苏教版五年级上册《我们的大脑》教学设计.docx
- 贵州省2024年高三年级4月适应性考试 地理试卷.docx
- GEUPS维护及故障讲课文档.ppt VIP
- 触摸屏技术的原理及应用.docx VIP
- 路桥施工计算手册.docx
- 年产50吨瑞舒伐他汀钙、5吨匹伐他汀钙、50吨恩格列净、50吨恩格列净中间体EM1、5吨贝曲西班马来酸盐、200吨阿托伐他汀中间体B-4、200吨瑞舒伐他汀中间体D-1等产品项目环境影响报告书.pdf
- 六年级美术上册《劳动最光荣》课件.ppt
- 抖音直播间1000个违禁词(一举夺葵版).docx
- 反渗透法海水淡化产品水水质控制指标及水质调整措施.pdf VIP
- 《论语》论仁、孝、君子、教育.doc
文档评论(0)