约瑟夫问题--双向循环链表的创建与删除
来源:互联网 发布:金庸群侠传 武功数据 编辑:程序博客网 时间:2024/05/21 17:34
算法和数据结构就是编程的一个重要部分,你若失掉了算法和数据结构,你就把一切都失掉了。
开始理解错题目,但是创建双向链表的思路可行。
#include<iostream> #include <stdlib.h>using namespace std;//双向循环链表 typedef int datatype;//方便修改 //当然也可以写成模板来适应更多的数据类型 struct dclist{datatype data;//数据定义 struct dclist *prior;struct dclist *next;//前驱和后继指针 };class Joseph {public:int getResult(int n, int m) {dclist *L = (struct dclist*)malloc(sizeof(struct dclist));L->next = L->prior = NULL;dclist *r = L;dclist *p;for (int i = 1; i <= n; i++){p = (struct dclist*)malloc(sizeof(struct dclist));p->data = i;p->prior = r;p->next = r->next;r->next = p;r = p;}r->next = L->next;L->next->prior = r;if (m>0)do{L = L->next;} while (--m);int t = L->data;return t;}};int main(){int n, m;cin >> n >> m;Joseph tlist;int t = tlist.getResult(n, m);cout << t;}
后面的是正确答案
#include<iostream> #include <stdlib.h>using namespace std;//双向循环链表 typedef int datatype;//方便修改 //当然也可以写成模板来适应更多的数据类型 struct dclist{datatype data;//数据定义 struct dclist *prior;struct dclist *next;//前驱和后继指针 };class Joseph {public:int getResult(int n, int m) {dclist *L = (struct dclist*)malloc(sizeof(struct dclist));L->next = L->prior = NULL;dclist *r = L;dclist *p;for (int i = 1; i <= n; i++){p = (struct dclist*)malloc(sizeof(struct dclist));p->data = i;p->prior = r;p->next = r->next;r->next = p;r = p;}r->next = L->next;L->next->prior = r;//删除操作while (L->next != L){for (int k = 1; k < m; k++) //因为要保留L,删除p结点,所以这里循环m-1次L = L->next;p = L->next;L->next = p->next;free(p);//删除p}//int t = L->data;return t;}};int main(){int n, m;cin >> n >> m;Joseph tlist;int t = tlist.getResult(n, m);cout << t;}
阅读全文
1 0
- 约瑟夫问题--双向循环链表的创建与删除
- 双向循环链表的创建,插入与删除。
- 约瑟夫问题(双向循环链表)
- 循环双向链表 及 约瑟夫问题的解决
- 双向循环链表的创建,插入,删除操作
- 双向循环链表的创建修改插入删除操作
- 约瑟夫环问题(双向循环链表模拟)
- 约瑟夫问题(Josephus Problem) 用双向循环链表实现
- 循环链表与约瑟夫问题
- 循环链表与约瑟夫问题
- 双向循环链表的删除
- 双向循环链表的插入删除
- 双向链表的创建,添加与删除
- 双向链表的创建查找与删除元素
- 基于循环链表的约瑟夫问题
- Java约瑟夫问题(丢手帕)的双向循环实现
- 【学习总结】循环链表模拟约瑟夫问题和循环链表的初始化、建立、删除(按值与按位置)
- 双向循环链表解决Josephus(约瑟夫)问题
- [LintCode]Sort Integers(C++)
- svn迁移出的项目中文乱码解决
- gdb 调试高级命令
- 事务注意事项
- HttpServletResponse
- 约瑟夫问题--双向循环链表的创建与删除
- 贪心算法poj 3617,3069,3253
- sem的关键词怎么拓展、分组、导入客户端,世上最全为你解决!!(网络营销sem)
- 操作系统知识整理3:进程管理
- 剑指offer-40.数组中只出现一次的数字
- Servlet过滤器Filter和监听器
- Caffe-windows入门学习,编译、训练、测试详细教程
- 关于WdatePicker控件的onchange事件如何使用————2017/8/5
- GMM的C++实现