数据结构与算法-约瑟夫问题

/*
功能: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);

}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值