python约瑟夫环算法和流程图_约瑟夫环问题及python与c++实现效率对比
约瑟夫环是一个数学的应用问题:已知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++实现效率对比相关推荐
- python网络编程要学吗_总算发现如何学习python网络编程
为了提高模块加载的速度,每个模块都会在__pycache__文件夹中放置该模块的预编译模块,命名为module.version.pyc,version是模块的预编译版本编码,一般都包含Python的版 ...
- python做后端开发的优点_【后端开发】python语言的特点是什么
python语言的特点是什么? python语言的特点 简单 Python是一门简单而文字简约的语言.阅读好的Python程序感觉就像阅读英语,尽管是非常严格的英语.Python的这种伪代码特性是其最 ...
- python能干啥是什么意思_这年头不懂点Python都不好意思说是码农 神奇的Python都能干啥...
原标题:这年头不懂点Python都不好意思说是码农 神奇的Python都能干啥 如果你在周末.有WIFI的房间里不知道做什么,不如学下Python吧.有了它,你可以什么都不需要! 基础需求篇 温饱与空 ...
- python全栈开发什么意思_如何快速的学习Python全栈开发?这是腾讯大佬给你的建议!...
自2017年国务院印发<新一代人工智能发展规划>,明确指出在中小学阶段设置人工智能相关课程后,Python一路逆袭, 作为人工智能时代最合适的语言,Python无疑被越来越多人追捧,被众多 ...
- python网上有免费资源吗_【转载】学习Python无从下手?最好的免费资源想要拿走...
Python 可以用来做什么? 在我看来,基本上可以不负责任地认为,Python 可以做任何事情.无论是从入门级选手到专业级选手都在做的爬虫,还是Web 程序开发.桌面程序开发还是科学计算.图像处理, ...
- python的gui库哪个好_常用的13 个Python开发者必备的Python GUI库
[Python](http://www.blog2019.net/tag/Python?tagId=4)是一种高级编程语言,它用于通用编程,由Guido van Rossum 在1991年首次发布.P ...
- python源代码最多的学习网站_史上最全Python学习资料大合集分享
Python有多火就不用说了,之前也零散地分享过一些Python学习开发资料. 本次将分享Python学习资料合集.合集哦,你品,你细品! 在分享之前,还是要啰嗦一下,不然文章字数太少,不太好看. P ...
- python要和什么一起学_跟哥一起学Python(1) - python简介
01-写在前面 我做了十几年的程序猿,码过代码.带过项目.做过产品经理.做过软件架构师.因为我是做通信设备软件的,面向底层操作系统,所以我的工作主要以C语言为主.Python在我的工作中通常用来写一些 ...
- python 内存溢出能捕获吗_从0基础学习Python (19)[面向对象开发过程中的异常(捕获异常~相关)]...
从0基础学习Python (Day19) 面向对象开发过程中的=>异常 什么是异常 当程序在运行过程中出现的一些错误,或者语法逻辑出现问题,解释器此时无法继续正常执行了,反而出现了一些错误的 ...
最新文章
- 2020年,为什么说入坑AI是最好的时机?
- 重大布局!北京大学,落子上海!
- 【运筹学】整数规划 ( 整数规划示例 | 整数规划解决的核心问题 )
- openstack下
- 第三百八十九节,Django+Xadmin打造上线标准的在线教育平台—列表筛选结合分页...
- Day11多态部分-5
- oracle查看登录时间黑屏,史上最强黑屏行动-微软20日黑屏反盗版验证
- php发展历,PHP的发展历程
- volatile关键字和Java线程安全问题
- 网络协议学习---LLDP协议学习
- 【自然语言处理】韩语基础与入门(语法篇)
- 计算机二级考试模拟表单答题,2015年计算机二级考试Visual FoxPro练习题
- 解决OneNote同步失败的问题
- 计算机应用基础——计算机软件(二)
- winform去掉laber背景色
- 视频测试软件+视频测试硬件=视频质量测试解决方法+视频测试的重要性
- Windows 取证之ShellBags
- 产品经理的职业生涯规划是怎么样的?
- 华为AC旁路二层组网隧道转发示例
- 网件交换机基本配置命令