约瑟夫环的实现
来源:互联网 发布:建表语句属于sql 编辑:程序博客网 时间:2024/05/21 05:56
废话少说,贴代码
结构部分
template<class T>struct LinkNode{LinkNode *r_Link;T data;LinkNode(const T &x,LinkNode *ptr=NULL){data=x;r_Link=NULL;}};template<class T>class Circle{public:LinkNode<T> *head,*last;Circle(const T &x){head=new LinkNode<T>(x);last=head;}void Insert(const T &x){LinkNode<T> *newNode=new LinkNode<T>(x);last->r_Link=newNode;last=newNode;last->r_Link=head;}bool Remove(T x){LinkNode<T> *p=head,*cur=last;while(1){if(p->data==x)break;cur=p;p=p->r_Link;}cur->r_Link=p->r_Link;if(p==head) //判断被删节点是否为头节点 head=p->r_Link;delete p;return true;}};
算法实现
id Josefu(Circle<T> &cir,int n,int m){LinkNode<T> *p=cir.head,*cur;if(n==1){printf("只剩一个人员:%d",p->data);return;}while(n>1){for(int i=1;i<m;i++){p=p->r_Link;}cur=p->r_Link;printf("%d 号被淘汰\n",p->data);cir.Remove(p->data);p=cur;n--;}printf("最后留下人员: %d",p->data);}
主函数
int main(){int n,m;printf("输入人数和间隔\n");scanf("%d%d",&n,&m);Circle<int> cir(1);for(int i=1;i<n;i++) cir.Insert(i+1);Josefu(cir,n,m);return 0;}
约瑟夫环核心是用循环链表,单、双链表都行
敢死队问题、淘汰问题都是基于约瑟夫环来实现的
0 0
- 约瑟夫环的实现
- 约瑟夫环的实现
- 约瑟夫环的实现
- 约瑟夫环的实现
- 约瑟夫环的实现
- 约瑟夫环的实现
- 约瑟夫环的实现
- 约瑟夫环的编程实现
- 约瑟夫环的JAVA实现
- 约瑟夫环的java实现
- 约瑟夫环的数组实现
- 约瑟夫环问题的实现
- 实现约瑟夫环的算法
- 约瑟夫环的递归实现
- 约瑟夫环的java实现
- 约瑟夫环的数组实现
- 约瑟夫环的队列实现
- 约瑟夫环的C++实现
- 数字图像处理中的高通滤波和低通滤波
- 响应式布局
- Xcode8:"subsystem: com.apple.UIKit, category: HIDEventFiltered, enable_level: 0" 的警告
- [Flume]安装,部署与应用案例
- 使用 Math 类操作数据
- 约瑟夫环的实现
- servlet学习总结六
- 安装mysql-5.7.15-winx64
- loadhtmlstring加载内容是不显示图片
- PAT乙级1002
- iOS10的适配(二)
- 好的博客整理
- CI Weekly #2 | 如何优化开发流程,实现项目持续集成?
- tomcat设置直接通过域名访问项目(不需要接 /项目名)