数据结构_循环链表
2015-04-13 20:24
190 查看
废话:依然开启我的恶补数据结构模式,还是链表(大神们莫喷,毕竟是学渣啊~~~~),这次是循环链表,其实根单链表没什么区别,就是在尾指针的指针域指向头结点或者是第一个节点。
面试题:已知n个人按1~n的编号围坐在一起,从第k个人开始报数,报道数为m的出列,直至全部出列(说白了就是约瑟夫环问题的实际场景罢了)。
解题思路:这种就是典型的用循环链表的方法来得到解决
1:建立带有n个节点的循环链表,最好是不带头结点的,因为这里带头结点处理比较繁琐
2:确定第一个人报数的位置即确定k所对应的节点的相应位置
3:就是处理将报数人对应的节点的指针前后关系
废话不多说,贴上代码:
面试题:已知n个人按1~n的编号围坐在一起,从第k个人开始报数,报道数为m的出列,直至全部出列(说白了就是约瑟夫环问题的实际场景罢了)。
解题思路:这种就是典型的用循环链表的方法来得到解决
1:建立带有n个节点的循环链表,最好是不带头结点的,因为这里带头结点处理比较繁琐
2:确定第一个人报数的位置即确定k所对应的节点的相应位置
3:就是处理将报数人对应的节点的指针前后关系
废话不多说,贴上代码:
<span style="font-size:14px;">typedef struct node { int data; struct node * next; }Lnode, *LinkList; void JOSEPHUS(int n, int k, int m) { Lnode * temp, * cur, *first = NULL, *tail; for(int i = 1; i<= n; i++) { temp = new Lnode(); temp->data = i; if(first == NULL) first = temp; else tail->next = temp; tail = temp; } if(tail->next == NULL) { //将表尾指针域指向第一个节点 tail->next = first; } cur = first; for(int j = 1; j < k-1; j++)//定位编号为k-1的位置 cur = cur->next; while(n--) { for(int t = 1; t < m; t++) { cur = cur->next; } //上面定位到k-1的位置就是方便后面这里的处理 cout<<cur->next->data<<endl; cur->next = cur->next->next; } }</span>
相关文章推荐
- 数据结构--单向循环链表、双向循环链表
- 数据结构之循环链表
- 数据结构:带头结点的双向循环链表
- C++类模板 实现双向循环链表的基本算法 《数据结构》(C++版 北京科海)中摘抄
- 【C++/数据结构】循环链表的基本操作
- (8) Java源码分析 ---- LinkedList (对应数据结构中线性表中的双向循环链表,JDK1.6)
- 数据结构 05 链表 循环链表
- 数据结构实现循环链表
- 数据结构Java实现04----循环链表、仿真链表
- 数据结构-循环链表
- 数据结构_线性表_链式存储_双向循环链表的基本操作
- 数据结构之表(4)单循环链表
- C++数据结构--循环链表的应用--解决约瑟夫问题
- 初学数据结构——单向循环链表和双向循环链表。
- 数据结构JavaScript——双向链表、双向循环链表
- C语言数据结构之判断循环链表空与满
- 数据结构学习之链表(单向、单循环以及双向)(递归实现)
- 数据结构_循环链表
- 【C++数据结构学习笔记---线性表】带头结点的双向循环链表
- 数据结构面试题:josephus排列,循环链表