请问这个还能有改进吗?本人尽力了

#include<stdio.h>

#include<malloc.h>

#define OK 1

#define FALSE -1

#define TURE 1

#define ERROR -1

#define INFEASIBLE -1

 

typedef int Elemtype;

typedef struct LNode

{

Elemtype data;

struct LNode *next;

}LNode, *LinkList;

 

LinkList p, r, last=NULL;

int i;

void CreatList(int n)

{

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

{

p=(LinkList)malloc(sizeof(LNode));

p->data=i;

if(last==NULL)

last=p;

else

r->next=p;

r=p;

}

p->next=last;

p=last;

}

void StartNum(int s)

 

{

for(i=1;i<s;i++)

{

r=p;

p=p->next;

}

}

void DeleteList(int m)

{

while(p->next !=p)

{

for (i=1;i<m;i++)

{

r=p;

p=p->next;

}

r->next=p->next;

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

free(p);

p=r->next;

}

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

}

void DeleteNum(int m,int save,int n)

{

while(p->next!=p)

{

for(i=1;i<m;i++)

{

r=p;

p=p->next;

}

r->next=p->next;

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

free(p);

p=r->next;

n--;

if(n==save)break;

}

while(p->next!=NULL){

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

p=p->next;

save--;

if(save==0)break;

}

}

int f(int n,int m)

{

return n == 1?n:(f(n-1,m)+m-1)%n+1;

}

int main()

{

int n,m,s,save=1;

printf("请输入总人数n:\n");

scanf_s("%d",&n);

printf("请输入间隔m:\n");

scanf_s("%d",&m);

printf("请输入开始的位置s:\n");

scanf_s("%d",&s);

printf("请输入要保留的人数s:\n");

scanf_s("%d",&save);

CreatList(n);

StartNum(s);

printf("****** Solve Josephus Problem******\n");

DeleteNum(m,save,n);

printf("****************END****************\n");

system("pause");

return 0;

}

运行正常吗?运行正常的话还OK啦

程序的目的是什么?  请讲清楚。