数据结构学习笔记(3)---循环链表(约瑟夫环问题)
2017-09-15 13:09
218 查看
最近学习循环链表,其实循环链表的本质和单向链表没有多大区别的,只是在创建时把最后的指针指向头结点,但是当想用循环链表解决约瑟夫环的问题时,要去掉头结点。
[b](1)循环链表的创建[/b]
(2)显示循环链表
(3)用循环链表解决约瑟夫环问题
[b](1)循环链表的创建[/b]
void CreateCircleList(pCircleNode pHead) { int date; cout << "请输入节点得值:"; cin >> date; pCircleNode pTail = pHead; while (-1 != date) { pCircleNode pNew = new CircleNode; pNew->next = NULL; pNew->date = date; pTail->next = pNew; pTail = pNew; cout << "请输入节点得值:"; cin >> date; } pTail->next = pHead->next; }
(2)显示循环链表
void ShowList(pCircleNode pHead) { pCircleNode p = pHead->next; do { cout << p->date<<" "; p = p->next; } while (p != pHead->next); cout << endl; }
(3)用循环链表解决约瑟夫环问题
pCircleNode Joseph(pCircleNode pHead, int n) { pCircleNode p = pHead; pCircleNode pPre = NULL;; while (p->next != pHead) { p = p->next; }//找到第一个节点的前置节点 pPre = p; p = pHead; pHead = NULL; while (p->next != p)//判断是否还剩最后一个节点 { int nPos = 1; while (nPos != n)//到达指定位置 { pPre = p; p = p->next; nPos++; } pCircleNode pDelete = pPre->next; pPre ->next = pPre->next->next; delete pDelete; p = pPre->next;//别忘记对p赋值 } return p; }
相关文章推荐
- 数据结构学习笔记(二) 链表之用循环链表解决约瑟夫问题
- 数据结构学习笔记(5.线性表之双向循环链表)
- 数据结构学习笔记 --- 线性表 (双向链表、循环链表)
- 数据结构-循环链表(学习笔记)
- 播布客教学视频_C学习笔记_10.2_约瑟夫环问题(数组链表)
- 算法设计和数据结构学习_4(《数据结构和问题求解》part4笔记)
- 数据结构学习笔记(5.线性表之双向循环链表)
- 算法设计和数据结构学习_3(《数据结构和问题求解》part2笔记)
- 数据结构学习笔记 --- 线性表 (双向链表、循环链表)
- 数据结构学习笔记-循环链表(C语言实现)
- 网易云课堂-陈越、何钦铭-数据结构-2016春,学习笔记,1.3 应用实例:最大子列和问题
- 数据结构之线性表——约瑟夫环问题(循环链表的应用)
- 算法设计和数据结构学习_3(《数据结构和问题求解》part2笔记)
- 播布客教学视频_C学习笔记_10.1_约瑟夫环问题
- 数据结构 学习笔记(八):图(中):最短路径问题(单源最短路径 Dijkstra,多源最短路径 Floyd)
- 数据结构学习笔记三 循环链表及双向链表
- 算法设计和数据结构学习_4(《数据结构和问题求解》part4笔记)
- python数据结构学习笔记-2016-11-02-02-迷宫问题
- 数据结构学习笔记(3.线性表之循环链表)
- 数据结构:循环链表求解约瑟夫环问题