循环链表解josephus问题
来源:互联网 发布:linux定时任务每15分钟 编辑:程序博客网 时间:2024/06/05 18:21
#include <stdio.h>#include <stdlib.h>typedef struct clink_node_tag{struct clink_node_tag *next;int id;}clink_node_t;typedef struct clink_tag{clink_node_t *head;clink_node_t *tail;int count;}clink_t;clink_node_t *clink_node_alloc(int n){clink_node_t *node = (clink_node_t *)malloc(sizeof(clink_node_t));node->next = NULL;node->id = n;return node;}clink_t *clink_init(clink_t *cl){if( cl == NULL ){cl = (clink_t *)malloc(sizeof(clink_t));cl->head = cl->tail = NULL;cl->count = 0;return cl;}}void clink_insert(clink_t *cl, clink_node_t *node){if( cl->count == 0 ){cl->head = cl->tail = node;cl->tail->next = cl->head;cl->count++;return;}cl->tail->next = node;cl->tail = node;cl->tail->next = cl->head;cl->count++;}int main(int argc, char *argv[]){int N = atoi(argv[1]);int M = atoi(argv[2]);fprintf(stderr, "N=%d, M=%d\n", N, M);int i;clink_t *clink = NULL;clink = clink_init( clink );clink_node_t *n;for(i=0; i<N; i++){n = clink_node_alloc(i+1);clink_insert(clink, n);}
/*
*用厄尔拉多塞舍法来解决
<pre name="code" class="cpp">
clink_t *p = clink->header;while( p->next != clink->header ){int i;for( i=1; i<M; i++ ){p = p->next;}clink_t *t = p->next;p->next = p->next->next;free(t);}
*/
if(clink->count == 1) return;clink_node_t *iter = clink->head;int count = 1;while(clink->count > 1){count++;if( count%M == 0){clink_node_t *tmp = iter->next;iter->next = iter->next->next;fprintf(stderr, "dequeu %d, %d\n", tmp->id, clink->count);free(tmp);clink->count--;}else{iter = iter->next;}}clink->head = clink->tail = iter;fprintf(stderr, "leader %d\n", iter->id);}
0 0
- 循环链表解josephus问题
- 循环链表解决Josephus环问题
- 双向循环链表解决Josephus(约瑟夫)问题
- 循环链表解决Josephus环轮流报数问题
- <C>Josephus问题——用循环链表解决
- 不使用链表解决Josephus问题
- 双链表解决Josephus问题
- 循环链表解决JOSEPHUS环问题[C语言实现]
- C语言通过双向循环链表解决Josephus(约瑟夫)问题
- josephus链表解决
- Josephus问题 循环链表
- 约瑟夫问题(Josephus问题)的递推O(n)解法、循环解法、单循环链表解法
- 用带头结点的循环单链表解决Josephus问题(默认点名位置为1)
- 约瑟夫问题(Josephus)java链表解决
- 利用数组模拟的链表解决Josephus问题
- 用链表解决约瑟夫(Josephus)问题
- 循环链表--解决Josephus问题
- 循环链表应用------Josephus环问题
- Extjs重写
- YII对象结果转为数组或直接输入JSON格式
- 记一次使用eclemma的蛋疼的测试经历
- 怎样用Java.net.URL表示一个本地目录下的文件?
- 文件夹遍历,图片等比例压缩
- 循环链表解josephus问题
- ANDROID内存优化(大汇总——中)
- 高性能Javascript--脚本的无阻塞加载策略
- 使用jquery实现点击一个按钮或连接,让它下面的div显示,在点击一下隐藏
- java 使用logback进行日志输出
- apache、php、mysql和phpmyadmin安装及环境配置
- 初始化Map集合大小 & 提前编译正则表达式
- 2014最好的IT简历提示
- 关于ffmpeg编码后的清理