算法-循环链表[约瑟夫问题]
来源:互联网 发布:ubuntu虚拟机nat联网 编辑:程序博客网 时间:2024/06/05 05:51
- 链表属于线性表的一种,数据逻辑内存相邻,物理内存不相邻。
- 常见链表有:单向链表,双向链表,循环链表。
- 约瑟夫问题:有n个人围在一起,初始化时编号相邻,例如:1~41;从任何一个人开始报数为1,当有人报数为3时,该人死亡,从下一个人开始报数为1,一直循环,直到最后剩下不足3个人时游戏结束。需要求出死亡顺序和可能存在有人不死亡的情况。
- 代码:
/*** 约瑟夫问题* 循环链表*/#include "stdafx.h"#include "stdlib.h"#define LEN 41using namespace std;typedef int TYPE;typedef struct Node { TYPE data; Node* next; Node* prev;}LNode,*PNode;PNode head;void create_list() { PNode node = (PNode)malloc(sizeof(LNode)); if (NULL != node) { node->data = 1; node->next = NULL; node->prev = NULL; head = node; } PNode newhead = head; for (int i = 2; i <= LEN;i++) { PNode newnode = (PNode)malloc(sizeof(LNode)); newnode->data = i; if (i == LEN) { newnode->next = head; head->prev = newnode; } else { newnode->next = NULL; } newhead->next = newnode; newnode->prev = newhead; newhead = newnode; }}// index == 3void joseph(int index) { int i = 1, j = LEN; PNode newhead = head; printf("dead people:\0"); while (i++ <= LEN) { newhead = newhead->next; if (j==2) { printf("remainder:%d \0",newhead->data); printf("%d",newhead->prev->data); return; } if (i == index) { PNode nextTemp = newhead->next; PNode prevTemp = newhead->prev; prevTemp->next = nextTemp; nextTemp->prev = prevTemp; printf("%d \0",(newhead->data)); //newhead = NULL; //free(newhead); // 释放内存 j--; i = 0; } }}int main(){ create_list(); joseph(3); return 0;}
阅读全文
0 0
- 算法-循环链表[约瑟夫问题]
- 【数据结构和算法分析】循环链表及约瑟夫问题
- 算法-循环链表[约瑟夫问题之进阶]
- 约瑟夫问题-循环链表
- 循环链表:约瑟夫问题
- 循环链表-约瑟夫问题
- 循环链表--约瑟夫问题
- 约瑟夫斯环算法(循环链表)
- 用循环链表求解约瑟夫问题
- 循环链表与约瑟夫问题
- 单向循环链表实现约瑟夫问题
- 用循环链表实现约瑟夫问题
- 基于循环链表的约瑟夫问题
- 约瑟夫环问题(循环链表)
- 约瑟夫问题简单实现-循环链表
- C++循环链表实现约瑟夫问题
- 约瑟夫问题(循环链表)
- 单向循环链表—约瑟夫问题
- Spark中groupByKey与reduceByKey算子之间的区别
- 蓝桥进制转换题集
- Python爬虫
- Log4j实例简单配置
- springboot下及其方便的使用缓存
- 算法-循环链表[约瑟夫问题]
- 内存初始化-----memset函数的使用
- 计算机语言发展史
- Java(8-1)
- Mysql02_索引
- CodeForces 888A Local Extrema
- 调试的错误就是编程给你最好的东西,因为在每个错误上面都标志着前进的一步
- AndroidStudio:Intel x86 Emulator Accelerator(HAXM installer) Not compatible with Windows?(171106
- chrome中使用rem做单位,宽高计算数值不可用