数据结构(约瑟夫环C语言)这个程序错在哪里,O(∩_∩)O谢谢

2024年12月02日 13:35
有2个网友回答
网友(1):

#include
#include
#include
#define OK 1

typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;

void Creat(LinkList *L,int n){
int i;
LinkList p,q;
*L=NULL;
for(i=1;i<=n;i++){
p=(LinkList)malloc(sizeof(LNode));
p->data=i;
if(*L==NULL)
*L=p,q=p;
else
q->next=p,q=p;
}
q->next=*L;
}

void DestroyList(LinkList L)
{
LinkList p,q;
p = L;
while (p ->next !=L)
{
q = p->next;
free(p);
p = q;
}
free(p);
L = NULL;
}

int ListDelete(LinkList *L,int i,int *e){
LinkList pre,p;
int c;
pre=p=*L;
if(L==NULL) return 0;

for(c=1;c {
pre=p;
p=p->next;
}

*e=p->data;
//修改头指针指向被删除结点的下一个结点
*L=p->next;
//修改呗删除结点的上一个结点的指针
pre->next=p->next;
free(p);

//如果删掉了头结点

return OK;
}

void Jesephu(int n, int i, int m){
int A[100],e;
int t,j=0,k=0,s;
LinkList L;
Creat(&L,n);
s=i;
t=n;
// 这个 while 语句结束时 n=0,n 不能用在下面的 while(j while (n>0) {

//每次删掉一个结点头指针也都会被改变,因此用传 &L
ListDelete(&L,m,&e);
n--;
A[k++]=e;
}
printf("the new queue:\n");
while(j printf("%d ",A[j++]);
printf("\n");
DestroyList(L);
}

void main(){
int n,i,m;
printf("input the number of total people\n");
scanf("%d",&n);
printf("input the beguning number of counting\n");
scanf("%d",&i);
printf("input the count\n");
scanf("%d",&m);
Jesephu(n, i, m);
}

网友(2):

#include

#include

#include

#define
OK
1
typedef
struct
LNode{
int
data;
struct
LNode
*next;
}LNode,*LinkList;
void
Creat(LinkList
*L,int
n){
int
i;
LinkList
p,q;
*L=NULL;
for(i=1;i<=n;i++){
p=(LinkList)malloc(sizeof(LNode));
p->data=i;
if(*L==NULL)
*L=p,q=p;
else
q->next=p,q=p;
}
q->next=*L;
}
void
DestroyList(LinkList
L)
{
LinkList
p,q;
p
=
L;
while
(p
->next
!=L)
{
q
=
p->next;
free(p);
p
=
q;
}
free(p);
L
=
NULL;
}
int
ListDelete(LinkList
*L,int
i,int
*e){
LinkList
pre,p;
int
c;
pre=p=*L;
if(L==NULL)
return
0;
for(c=1;c{
pre=p;
p=p->next;
}
*e=p->data;
//修改头指针指向被删除结点的下一个结点
*L=p->next;
//修改呗删除结点的上一个结点的指针
pre->next=p->next;
free(p);
//如果删掉了头结点
return
OK;
}
void
Jesephu(int
n,
int
i,
int
m){
int
A[100],e;
int
t,j=0,k=0,s;
LinkList
L;
Creat(&L,n);
s=i;
t=n;
//
这个
while
语句结束时
n=0,n
不能用在下面的
while(jwhile
(n>0)
{
//每次删掉一个结点头指针也都会被改变,因此用传
&L
ListDelete(&L,m,&e);
n--;
A[k++]=e;
}
printf("the
new
queue:\n");
while(jprintf("%d
",A[j++]);
printf("\n");
DestroyList(L);
}
void
main(){
int
n,i,m;
printf("input
the
number
of
total
people\n");
scanf("%d",&n);
printf("input
the
beguning
number
of
counting\n");
scanf("%d",&i);
printf("input
the
count\n");
scanf("%d",&m);
Jesephu(n,
i,
m);
}