链表经典问题:约瑟夫环的实现
2012-09-09 02:01
701 查看
对于约瑟夫环这个经典的链表问题,相信大家都不会陌生。
经常会以这种形式出现:
有13人围成一圈,从第一个人开始顺序报数,凡报到3的人退出圈子,编程找出最后留在圈子里的人原来的序号。
具体实现的代码如下:
经常会以这种形式出现:
有13人围成一圈,从第一个人开始顺序报数,凡报到3的人退出圈子,编程找出最后留在圈子里的人原来的序号。
具体实现的代码如下:
#include <stdio.h> #include <stdlib.h> #define LEN 13 #define NUM 3 typedef struct node { int num; struct node *next; }node; int main() { int i; int length; node *p; node *ptr; node *first; first = (node *)malloc(sizeof(node)); if (first == NULL) { printf("malloc fail!\n"); return -1; } first->num = 1; p = first; for(i = 1; i < LEN; i ++) { p->next = (node *)malloc(sizeof(node)); p = p->next; p->num = i+1; } p->next = first; p = p->next; length = LEN; p = first; while (length > 1) { if (NUM == 1) { for (i = 0; i < LEN - 1; i ++) { ptr = p; p = p->next; free(ptr); } printf("the last one left is %d\n", p->num); free(p); return 0; } else { for (i = 0; i < NUM - 2; i++) { p = p->next; } ptr = p->next; p->next = ptr->next; p = p->next; free(ptr); length --; } } printf("the last one is %d\n", p->num); free(p); return 0; }
相关文章推荐
- 自己实现集合框架(五):利用单链表解决约瑟夫环问题
- PHP实现的基于单向链表解决约瑟夫环问题示例
- 约瑟夫环问题(丢手帕游戏)Java 链表实现
- 循环链表 约瑟夫环问题实现
- 约瑟夫环问题(不带头结点单循环链表实现和数组实现)
- PHP实现单向链表解决约瑟夫环问题
- 使用链表实现环结构以解决约瑟夫环问题
- 用java实现链表并解决约瑟夫环问题
- 单链表中一些经典的问题-->约瑟夫环,链表逆序,查找链表结点...(上)
- 约瑟夫环问题 链表实现
- 链表实现约瑟夫环问题
- 约瑟夫环问题的两种实现[链表+数组]
- 单链表中的一些经典问题--约瑟夫环,逆序,查找,复杂链表复制,链表带环问题
- Java语言解决约瑟夫环问题(链表实现)
- 约瑟夫环问题的链表实现
- 用数组和链表实现约瑟夫环问题
- 【c++】约瑟夫环问题的链表实现
- 【单链表经典面试题解析四】用单链表实现约瑟夫环
- 循环链表 CircleList的实现并解决约瑟夫环问题
- 单链表实现猴子选大王(约瑟夫环问题)