约瑟夫环问题(Josephus) —— 循环单链表
2017-02-05 19:29
465 查看
问题描述
N个人围成一圈,从第一个开始报数,第k个将被杀掉,直到最后剩下一个。解决思路
用循环单链表解决。代码示例
/* function:约瑟夫环问题 - 循环单链表 created by : xilong date: 2017.2.5 */ #include "iostream" using namespace std; #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 typedef double Elemtype; typedef int Status; typedef struct Node { Elemtype data; struct Node* next; }Node; typedef struct Node* CLinkList; /* 功能:初始化一个空的单向循环链表头,并创建链表 */ CLinkList CLinkList_CreateJosephus() { CLinkList head; head = (CLinkList)malloc(sizeof(CLinkList)); CLinkList p, s; p = head; int flag = 1; Elemtype c; while (flag) { cin >> c; if (c != -99999) { s = (CLinkList)malloc(sizeof(CLinkList)); s->data = c; p->next = s; p = s; s->next = head->next; } else { flag = 0; p->next = head->next; } } return head->next; } Status Josephus(CLinkList *head,int k) { CLinkList p, temp; int i,j; p = *head; if (p == NULL) { cout << "空链表" << endl; return ERROR; } while (p != p->next) { for (i = 1; i <= k-2; i++) { p = p->next; } cout << p->next->data << " "; temp = p->next; p->next = temp->next; //free(temp); p = p->next; } cout << p->data << endl; return OK; } void main() { CLinkList head; int k; cout << "开始输入(这里是尾插法建表,输入-99999结束建表)..........." << endl; head = CLinkList_CreateJosephus(); cout << "输入步长:"; cin >> k; cout << "输出的顺序为:" << endl; Josephus(&head, k); system("pause"); }
程序截图
相关文章推荐
- Josephus(约瑟夫环问题)循环单链表c语句实现!
- 约瑟夫环问题(Josephus)
- 《C++语言基础》实践参考——Josephus(约瑟夫环)问题
- 约瑟夫环问题(Josephus)
- Josephus again HDU - 3089 (约瑟夫环问题)
- 习题3.10 约瑟夫环 josephus问题
- Josephus(约瑟夫环)问题
- [链表]约瑟夫环问题 Josephus
- 约瑟夫环(Josephus)问题的C++算法模拟
- 约瑟夫环问题(循环单链表的实现)
- [算法解决]约瑟夫环问题 Josephus
- 使用循环单链表解决约瑟夫环问题
- Josephus(约瑟夫环)问题
- 14.约瑟夫环问题[JosephusProblem]
- 约瑟夫环问题(Josephus)的C解法
- 约瑟夫环问题(josephus problem)详解
- 组合数学--约瑟夫环问题 Josephus
- 约瑟夫环问题——Josephus Problem
- 约瑟夫环问题(Josephus_problem)
- Josephus问题(约瑟夫环)