69,371
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define NULL 0
typedef int DataType;
typedef struct node{
DataType data;
struct node *next;
}LNode,*LinkList;
LinkList Creat_LinkList();
int Del_LinkList(LinkList H,int i);
LinkList Locate_LinkList(LinkList H,int i);
int Length_LinkList(LinkList H);
int josephus_LinkList(LinkList josephus_Link,int s,int m);
void main()
{
LinkList H,p=NULL;
int i,k,s,m;
H=Creat_LinkList();
p=H;
for(i=1;i<=10;i++)
{
p->data=i;
p->next = p + sizeof(int);//在这里。链表的一位指针问题
}
p=NULL;
printf("\n please input the values of s=");//从第几个数开始
scanf("%d",&s);
printf("\n please input the values of m:");//间隔数
scanf("%d",&m);
k=josephus_LinkList(H,s,m);
if(k!=1)
exit(1);
}
LinkList Creat_LinkList()
{
LinkList H;
H=(LinkList)malloc(sizeof(LNode));
if(H)
H->next=NULL;
return H;
}
int Del_LinkList(LinkList H,int i)
{
LinkList p,q;
if(H=NULL)
{
printf("空表不能删除");
return(0);
}
p=Locate_LinkList(H,i-1);
if(!p)
{
printf("参数 i错");
return(0);
}
q=p->next;
p->next=q->next;
free(q);
return(1);
}
LinkList Locate_LinkList(LinkList H,int i)
{
LinkList p;
int j;
p=H;j=1;
while(p&&j<i)
{
p=p->next;
j++;
}
if(j!=i||!p)
{
printf("参数i错或单链表不存在");
return(NULL);
}
return(p);
}
int Length_LinkList(LinkList H)
{
LinkList p=H;
int count=0;
while(p)
{
p=p->next;
count++;
}
return(count);
}
int josephus_LinkList(LinkList josephus_Link,int s,int m)
{
int s1,i;
int w;
LinkList p=josephus_Link;
if(josephus_Link=NULL)
{
printf("表中无元素");
return(0);
}
s1=s-1;
printf("请输出约瑟夫序列:");
for(i=Length_LinkList(josephus_Link);i>0;i--)
{
s1=(s1+m-1)%i;
for(s1=1;s1<=(s1+m-1)%i;s1++)
p=p->next;
w=p->data;
printf("%d\t",w);
Del_LinkList(josephus_Link,s1+1);
}
return(1);
}