数据结构与算法-约瑟夫问题
2015-07-08 20:23
459 查看
/*
功能:41个人围成一圈,第一个到第三个一次报数,数到3,自杀,下一个报1......
求出自杀顺序!
时间:2015-07-08
人员:西瓜太郎
*/
#include <stdlib.h>
#include <stdio.h>
#define ElementType int
struct Node;
typedef struct Node *ptrNode;
typedef ptrNode List;
typedef struct Node
{
ElementType data;
struct Node *next;
}Node;
void initJosePList(List *L);
void deleteCirList(List L);
void printfCirList(List L);
int main()
{
List L= NULL;//一定要初始化!!!
initJosePList(&L);
printfCirList(L);
printf("\n约瑟夫:\n");
deleteCirList(L);
return 0;
}
void initJosePList(List *L)
{
List temp,target;
int i = 1;
while(i < 42)
{
if((*L) == NULL)//定义L的时候一定要初始化!!
{
(*L) = malloc(sizeof(struct Node));
if(!(*L))
exit(EXIT_FAILURE);
(*L)->data = 1;
(*L)->next = (*L);
i++;
}
else
{
for(temp = (*L); temp->next != (*L); temp = temp->next)
;
target = malloc(sizeof(struct Node));
target->data = i;
i++;
temp->next = target;
target->next = (*L);
}
}
}
void deleteCirList(List L)
{
List temp,target;
int j;
temp = L;
for(j = 1; j < 42; j++)
{
temp = temp->next;
target = temp->next;
temp->next = target->next;
temp = temp->next;
printf(" %d",target->data);
free(target);
}
printf("\n");
}
void printfCirList(List L)
{
List temp;
for(temp = L; temp->next != L; temp=temp->next)
printf(" %d",temp->data);
printf(" %d\n",temp->data);
}
功能:41个人围成一圈,第一个到第三个一次报数,数到3,自杀,下一个报1......
求出自杀顺序!
时间:2015-07-08
人员:西瓜太郎
*/
#include <stdlib.h>
#include <stdio.h>
#define ElementType int
struct Node;
typedef struct Node *ptrNode;
typedef ptrNode List;
typedef struct Node
{
ElementType data;
struct Node *next;
}Node;
void initJosePList(List *L);
void deleteCirList(List L);
void printfCirList(List L);
int main()
{
List L= NULL;//一定要初始化!!!
initJosePList(&L);
printfCirList(L);
printf("\n约瑟夫:\n");
deleteCirList(L);
return 0;
}
void initJosePList(List *L)
{
List temp,target;
int i = 1;
while(i < 42)
{
if((*L) == NULL)//定义L的时候一定要初始化!!
{
(*L) = malloc(sizeof(struct Node));
if(!(*L))
exit(EXIT_FAILURE);
(*L)->data = 1;
(*L)->next = (*L);
i++;
}
else
{
for(temp = (*L); temp->next != (*L); temp = temp->next)
;
target = malloc(sizeof(struct Node));
target->data = i;
i++;
temp->next = target;
target->next = (*L);
}
}
}
void deleteCirList(List L)
{
List temp,target;
int j;
temp = L;
for(j = 1; j < 42; j++)
{
temp = temp->next;
target = temp->next;
temp->next = target->next;
temp = temp->next;
printf(" %d",target->data);
free(target);
}
printf("\n");
}
void printfCirList(List L)
{
List temp;
for(temp = L; temp->next != L; temp=temp->next)
printf(" %d",temp->data);
printf(" %d\n",temp->data);
}
相关文章推荐
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构揭秘一
- 数据结构之Treap详解
- JavaScript数据结构和算法之图和图算法
- Java数据结构及算法实例:冒泡排序 Bubble Sort
- Java数据结构及算法实例:插入排序 Insertion Sort
- Java数据结构及算法实例:考拉兹猜想 Collatz Conjecture
- java数据结构之java实现栈
- java数据结构之实现双向链表的示例
- Java数据结构及算法实例:选择排序 Selection Sort
- Java数据结构及算法实例:朴素字符匹配 Brute Force
- Java数据结构及算法实例:汉诺塔问题 Hanoi
- Java数据结构及算法实例:快速计算二进制数中1的个数(Fast Bit Counting)
- java数据结构和算法学习之汉诺塔示例
- Java数据结构及算法实例:三角数字
- Java数据结构之简单链表的定义与实现方法示例
- 数据结构之AVL树详解
- qqwry.dat的数据结构图文解释第1/2页
- JavaScript中数据结构与算法(五):经典KMP算法