约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。

python实现:

#单链表节点

classLinkNode:def __init__( self, value ):

self.value=value

self.next=None#创建循环单链表,值从1开始

defcreate_cycle( total ):

head= LinkNode( 1)

prev=head

index= 2

while total - 1 >0:

curr=LinkNode( index )

prev.next=curr

prev=curr

index+= 1total-= 1curr.next=headreturnhead#模拟约瑟夫环过程,从1开始计数

defrun( total, m ):assert total >= 0, 'total should lq 0'

assert m >= 0, 'm should lt 0'node=create_cycle( total )

prev=None

start= 1index=startwhile node andnode.next:if index ==m:print( 'pop:' + node.value )prev.next=node.next

node.next=None

node=prev.next

index = startelse:

prev=node

node=node.next

index+= 1run(5, 2 )

c++实现如下:

#include

#include

#define COUNT_INIT 1 // 计数起点

typedef struct LINKNODE

{

int value;

struct LINKNODE* next;

}LinkNode, *LinkNodePtr;

// 创建结点

LinkNodePtr createNode( int value )

{

LinkNodePtr node = ( LinkNodePtr )malloc( sizeof( LinkNode ) );

node->value = value;

return node;

}

// 创建循环单链表

LinkNodePtr createCycle( int total )

{

int index = 1;

LinkNodePtr head = NULL, curr = NULL, prev = NULL;

head = createNode( index );

prev = head;

while( --total > 0 )

{

curr = createNode( ++index );

prev->next = curr;

prev = curr;

}

curr->next = head; // 链表尾结点指向头结点, 构成循环链表

return head;

}

// 数到m, 节点出列, 下一个节点继续从1开始数. m不可与COUNT_INIT同值

void run( int total, int m )

{

LinkNodePtr node = createCycle( total );

LinkNodePtr prev = NULL;

int index = COUNT_INIT;

while( node && node->next )

{

if( index == m )

{

printf( "pop:%d\n", node->value );

prev->next = node->next;

node->next = NULL;

free( node );

node = prev->next;

index = COUNT_INIT;

}

else

{

prev = node;

node = node->next;

index++;

}

}

}

python约瑟夫环算法和流程图_约瑟夫环问题及python与c++实现效率对比相关推荐

  1. python网络编程要学吗_总算发现如何学习python网络编程

    为了提高模块加载的速度,每个模块都会在__pycache__文件夹中放置该模块的预编译模块,命名为module.version.pyc,version是模块的预编译版本编码,一般都包含Python的版 ...

  2. python做后端开发的优点_【后端开发】python语言的特点是什么

    python语言的特点是什么? python语言的特点 简单 Python是一门简单而文字简约的语言.阅读好的Python程序感觉就像阅读英语,尽管是非常严格的英语.Python的这种伪代码特性是其最 ...

  3. python能干啥是什么意思_这年头不懂点Python都不好意思说是码农 神奇的Python都能干啥...

    原标题:这年头不懂点Python都不好意思说是码农 神奇的Python都能干啥 如果你在周末.有WIFI的房间里不知道做什么,不如学下Python吧.有了它,你可以什么都不需要! 基础需求篇 温饱与空 ...

  4. python全栈开发什么意思_如何快速的学习Python全栈开发?这是腾讯大佬给你的建议!...

    自2017年国务院印发<新一代人工智能发展规划>,明确指出在中小学阶段设置人工智能相关课程后,Python一路逆袭, 作为人工智能时代最合适的语言,Python无疑被越来越多人追捧,被众多 ...

  5. python网上有免费资源吗_【转载】学习Python无从下手?最好的免费资源想要拿走...

    Python 可以用来做什么? 在我看来,基本上可以不负责任地认为,Python 可以做任何事情.无论是从入门级选手到专业级选手都在做的爬虫,还是Web 程序开发.桌面程序开发还是科学计算.图像处理, ...

  6. python的gui库哪个好_常用的13 个Python开发者必备的Python GUI库

    [Python](http://www.blog2019.net/tag/Python?tagId=4)是一种高级编程语言,它用于通用编程,由Guido van Rossum 在1991年首次发布.P ...

  7. python源代码最多的学习网站_史上最全Python学习资料大合集分享

    Python有多火就不用说了,之前也零散地分享过一些Python学习开发资料. 本次将分享Python学习资料合集.合集哦,你品,你细品! 在分享之前,还是要啰嗦一下,不然文章字数太少,不太好看. P ...

  8. python要和什么一起学_跟哥一起学Python(1) - python简介

    01-写在前面 我做了十几年的程序猿,码过代码.带过项目.做过产品经理.做过软件架构师.因为我是做通信设备软件的,面向底层操作系统,所以我的工作主要以C语言为主.Python在我的工作中通常用来写一些 ...

  9. python 内存溢出能捕获吗_从0基础学习Python (19)[面向对象开发过程中的异常(捕获异常~相关)]...

    从0基础学习Python (Day19) 面向对象开发过程中的=>异常 什么是异常 ​ 当程序在运行过程中出现的一些错误,或者语法逻辑出现问题,解释器此时无法继续正常执行了,反而出现了一些错误的 ...

最新文章

  1. 2020年,为什么说入坑AI是最好的时机?
  2. 重大布局!北京大学,落子上海!
  3. 【运筹学】整数规划 ( 整数规划示例 | 整数规划解决的核心问题 )
  4. openstack下
  5. 第三百八十九节,Django+Xadmin打造上线标准的在线教育平台—列表筛选结合分页...
  6. Day11多态部分-5
  7. oracle查看登录时间黑屏,史上最强黑屏行动-微软20日黑屏反盗版验证
  8. php发展历,PHP的发展历程
  9. volatile关键字和Java线程安全问题
  10. 网络协议学习---LLDP协议学习
  11. 【自然语言处理】韩语基础与入门(语法篇)
  12. 计算机二级考试模拟表单答题,2015年计算机二级考试Visual FoxPro练习题
  13. 解决OneNote同步失败的问题
  14. 计算机应用基础——计算机软件(二)
  15. winform去掉laber背景色
  16. 视频测试软件+视频测试硬件=视频质量测试解决方法+视频测试的重要性
  17. Windows 取证之ShellBags
  18. 产品经理的职业生涯规划是怎么样的?
  19. 华为AC旁路二层组网隧道转发示例
  20. 网件交换机基本配置命令

热门文章

  1. 查询数据表中重复记录
  2. Jquery取得iframe下内容的方法
  3. Oracle教程之管理索引(一)--Oracle管理索引
  4. 风云的银光志Silverlight4.0教程之遍历访问客户端用户的本地文件
  5. Linux 命令(69)—— objcopy 命令
  6. Linux 命令(64)—— strings 命令
  7. 多益网络 2016 春季实习校招笔试回顾(C++游戏后台)
  8. 05-树9 Huffman Codes (30 分)
  9. base64 convert to file
  10. 朋友易得 ,知已难求