joseph问题

把今日学习的循环单链表用在joseph问题上,写段代码保存;

linklist.c 代码如下

#include "linklist.h"
#include <string.h>


linklist list_create()
{
    linklist H,r,p;
int n,i;


loop :
printf ("please input n:");
scanf("%d",&n);
if (n < 0)
{
printf("n > 0\n");
goto loop;
}
if ((H = (linklist)malloc(sizeof(listnode)))==NULL)
{
printf("malloc failed\n");
return NULL;
}
H->next = H;
H->data = 1;
r = H;


for (i = 1; i <= n;i++){


if ((p = (linklist)malloc(sizeof(listnode)))==NULL)
{
printf("malloc failed\n");
return NULL;
}
p->data = i;
r->next = p;
r = p;
}
p->next = H;
return H;
}
void joseph(linklist H,int k,int m)
{
int i;
linklist r,p;


r = H;


while (r->next->data!=k)
{
r = r->next;
}
printf ("k=%d\n",k);


while(r->next != r)
{
for (i = 0;i < m-1; i++)
{
r = r->next;
}
p = r->next;
r->next = p->next;
printf("%d ",p->data);
free(p);
p = NULL;


}


}
void list_show(linklist H)

linklist p = H;


while (p->next!= H)
{
printf("%d ",p->data);
p = p->next;
}


printf("%d\n",p->data);

}

头文件如下

#ifndef _LINKLIST_H_

#define _LINKLIST_H_


#include <stdio.h>
#include <stdlib.h>
typedef int datatype;


typedef struct node{
    datatype data;
struct node *next;
}listnode,*linklist;


extern linklist list_create();
extern void list_show(linklist H);
extern void joseph(linklist H,int k,int m);

#endif

test执行文件

#include "linklist.h"




int main(int argc, const char *argv[])
{
linklist H;
int k = 3 , m = 4;


H = list_create();
list_show(H);


joseph(H,k,m);
return 0;

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值