菜鸟学习数据结构算法之路之约瑟夫环问题(循环链表)
来源:互联网 发布:知源中学复读 编辑:程序博客网 时间:2024/05/22 09:42
今天继续学习数据结构算法这条不归路,忘记说了,这应该算是视频笔记,进正题~~
约瑟夫环问题,不知道的同学依然点这里约瑟夫环问题,约瑟夫环问提可以使用数组以及链表这种基础的数据结构来解决,刚开始我觉得循环链表有点难理解,不过学习了之后并且自己理解的画了图,动手画图画图画图!!这很重要,可以很快的理解循环链表这一块的内容,好了废话不说,上代码~注释应该写的很清楚了,还不理解的可以在下面给予评论,谢谢大家。
#include <iostream>using namespace std;//循环链表:约瑟夫环问题struct node{ int payload; node* next; node(int payload){ this->payload = payload; };};class joseph_circle{ node* tail; node* eliminate_ptr;public: joseph_circle(){ tail = nullptr; } //添加 void add(int value){ if (tail == nullptr || tail->next == nullptr){ //还没有环 tail = new node(value); //创建一个结点,指针就指向自己形成一个环 tail->next = tail; //还是自己 } else{ node* new_node = new node(value); //新建一个节点 new_node->next = tail->next; //新结点指向tail tail->next = new_node; //原本指向自己的指针指向新结点 tail = new_node; //把新结点定义为tail 循环 } } //淘汰 void eliminate(int step){ node* p = tail; while (p != nullptr && p->next != p){ //首先判断p是不是为空,并且是不是只有一个元素,如果只有一个元素就不循环了 for (int i = 0; i < step - 1; i++){ //循环至报数报的要删除的数的前一个 所以 是step-1 p = p->next; } node* eliminated_node = p->next; //循环至这里说明下一个节点就是要删除的节点 p->next = p->next->next; //直接跳过想要删除的节点,指向删除节点的下一个节点并且连接 if (eliminated_node == tail){ //判断是否为最后一个元素 tail = p; } cout << "deleteing:" << eliminated_node->payload << endl; delete eliminated_node; //释放内存 output(); } } //打印 void output(){ node* p = tail; //tail先等于p while (p != nullptr){ //经循环后 p = p->next; //tail的下一个结点 = p cout << p->payload <<" "; //打印 if (p == tail){ //如果p = tail的时候就读完了,退出 break; } } cout << endl; }};int main(void){ joseph_circle circle; for (int i = 0; i < 6; i++){ circle.add(i); } circle.eliminate(3); //调用 system("pause"); return 0;}
以下放出自己的画的图,有点丑。。。各位看官不要介意,可以结合代码看,会比较清晰理解
阅读全文
0 0
- 菜鸟学习数据结构算法之路之约瑟夫环问题(循环链表)
- 数据结构 循环链表之约瑟夫问题
- 数据结构之线性表——约瑟夫环问题(循环链表的应用)
- 程序员面试宝典之数据结构基础----循环链表(约瑟夫环问题)
- JavaScript数据结构之单向循环链表应用-约瑟夫问题
- c语言数据结构之单向循环链表约瑟夫问题
- 循环链表之约瑟夫环问题
- 算法-循环链表[约瑟夫问题之进阶]
- 数据结构与算法之链表(四) 约瑟夫环
- Javascript数据结构算法之链表(约瑟夫环)
- 数据结构与算法(4、约瑟夫环问题到循环链表)
- 循环链表之约瑟夫问题
- 【数据结构和算法分析】循环链表及约瑟夫问题
- 算法学习笔记之约瑟夫环问题
- 算法学习之约瑟夫环问题
- 数据结构学习笔记(3)---循环链表(约瑟夫环问题)
- 数据结构系列之链表——循环链表(约瑟夫环)
- 循环链表之经典约瑟夫环问题
- jquery中select 的change事件实例
- Easyui笔记:jquery执行append后input的验证失效解决方案
- kafka实践
- 关于图片拉伸的方法
- HDU 1875 畅通工程再续(最小生成树-Kruskal算法)
- 菜鸟学习数据结构算法之路之约瑟夫环问题(循环链表)
- python下的redis连接
- Netty4.x中文教程系列(五)编解码器Codec
- 欢迎使用CSDN-markdown编辑器
- 几种使用itext生成pdf的方式
- 无法忍受sbt构建scala的龟速,用maven构建spark应用吧
- Android缓存策略LruCahe源码解析,Lru到底是怎么算的?
- 机器学习相关资料
- eclipse怎么自动生成返回对象