约瑟夫问题---单向循环链表
2018-02-02 22:52
429 查看
include
using namespace std;define N 41
define M 3
struct node{int value;
struct node * next;
};
typedef struct node* Node;
bool initNode(Node *head);
bool insert_tail(Node head, int value);
void print(Node head);
int main()
{
Node head = nullptr;
initNode(&head);
for (int i = 1; i <= N; i++)
{
insert_tail(head, i);
}
print(head);
int remain = N; int count = 0;//计数器 //while (head != head->next) Node temp = head; while (remain >= M) { if (temp->next->value != 0)//0表示淘汰出局 { count++; if (count >= M) { count = 0; remain -= 1; temp->next->value = 0; } } temp = temp->next; if (temp->next == head)//使链表重复遍历 { temp = head; } } cout << "最终编号不为0胜出" << endl; print(head); system("pause");
}
bool initNode(Node *head)
{
Node newnode = (Node)malloc(sizeof(struct node));
if (NULL == newnode)
{
return false;
}
newnode->next = newnode;
*head = newnode;
}
bool insert_tail(Node head, int value)
{
Node temp = head;//固定头结点位置,利用temp去遍历链表
Node newnode = (Node)malloc(sizeof(struct node));
if (NULL == newnode)
{
return false;
}
newnode->value = value;
newnode->next = head;
while (temp->next != head)//temp遍历到链表的尾
{
temp = temp->next;
}
temp->next = newnode;
return true;
}
void print(Node head)
{
Node temp = head;
while (temp->next != head)
{
cout << temp->next->value<<” “;
temp = temp->next;
}
cout << endl;
}
相关文章推荐
- 使用单向循环链表实现约瑟夫问题
- c语言数据结构之单向循环链表约瑟夫问题
- 约瑟夫问题(单向循环链表应用实例)
- 约瑟夫问题的单向循环链表的代码实现
- JavaScript数据结构之单向循环链表应用-约瑟夫问题
- C语言单向循环链表解决约瑟夫问题
- 约瑟夫问题的单向循环链表的解法
- 2746 约瑟夫问题(单向循环链表解法)
- C语言单向循环链表解决约瑟夫问题
- 约瑟夫问题 C语言循环链表
- 用单循环链表实现约瑟夫问题。
- Java采用循环链表结构求解约瑟夫问题
- Have Fun with Numbers及循环链表(约瑟夫问题)
- 约瑟夫问题(单向链表)
- 单循环链表的约瑟夫问题(C++)
- 循环链表约瑟夫问题
- 约瑟夫解决问题的循环链表
- 约瑟夫问题(单向链表)
- 约瑟夫问题(没有头节点的循环链表2——删除法)
- 循环双向链表 及 约瑟夫问题的解决