C语言约瑟夫环问题

我的程序总是死循环 帮忙看一下!!谢谢!!
#include<stdlib.h>
#include<stdio.h>

typedef struct lnode{
int data;
struct lnode *next;
}lnode,*linklist;

void createlist(linklist *l,int n){
int i;
linklist p;
*l=(linklist)malloc(sizeof(struct lnode));
(*l)->next=NULL;
for(i=n;i>0;--i){
p=(linklist)malloc(sizeof(struct lnode));
p->data=i;
p->next=(*l)->next;
(*l)->next=p;} /*for*/
while(p->next) p=p->next;
p->next=*l;
} /*createlist*/

void listdelete(linklist *l,int i,int j){
int k=0,a;
linklist p=*l,q;
while(k<i-1)
{
p=p->next;
k++;
} /*while*/
k=0;
while((*l)->next!=*l)
{while(k<j-1)
{
p=p->next;
if(p->next==*l) p=p->next;
k++;
} /*while*/
q=p->next;
p->next=q->next;
a=q->data;
free(q);
printf("%d ",a);
k=0;}
} /*listdelete*/

main(){
int i,m,s,n;
linklist la,lb;
scanf("%d,%d,%d",&m,&s,&n);
createlist(&la,m);
listdelete(&lb,s,n);}


/*josephus_clist.c*/
/*Josephus问题:循环链接表实现*/

#include <stdio.h>
#include <stdlib.h>

#define FALSE 0
#define TRUE 1
typedef int DataType; /* 定义元素类型为整型,也可定义为其他类型 */
struct Node; /* 单链表结点类型 */
typedef struct Node *PNode; /* 结点指针类型 */
struct Node /* 单链表结点结构 */
{ DataType info;
PNode link;
};

typedef struct Node *LinkList;
typedef LinkList *PLinkList;

int init_clist( PLinkList pclist, int n )
/* 用1,2,……,n为*pclist所示的循环表初始化 */
{ PNode p,q;
int i;
q = (PNode)malloc( sizeof( struct Node ) );
if ( q == NULL ) return ( FALSE );
*pclist=q;
q->info = 1;
q->link = q;
if (n==1) return (TRUE);
for(i=2;i<n+1;i++)
{ p=(PNode)malloc(sizeof(struct Node));
if (p==NULL) return(FALSE);
p->info=i;
p->link=q->link;
q->link=p;
q=p;
}
return (TRUE);
}

void josephus_clist( PLinkList pclist, int s,int m )
{PNode p,pre;
int i;
p=*pclist;
/* 找第s个元素 */
if (s==1)
{pre =p;
p=p->link;
while (p!=*pclist)
{
pre =p;
p=p->link;
}
}
else for(i=1;i<s;i++)
{
pre =p;
p=p->link;
}
while (p!=p->link) /* 当链表中结点个数大于1时 */
{ for (i=1;i<m;i++) /* 找第m个结点 */
{ pre = p;
p = p->link;
}
printf(“ out element: %d \n”,p->info); /* 输出该结点 */
if (*pclist ==p) /* 该结点是第一个结点时,删除时需特殊处理一下 */
*pclist =p->link;
pre->link = p->link; /* 删除该结点 */
free(p);
p = pre->link;
}
printf(“ out element: %d \n”,p->info); /* 输出最后一个结点 */
*pclist=NULL;
free(p);
}

main( )
{LinkList jos_clist;
int n,s,m;
/* 输入所需各参数的值 */
do{
printf(“\n please input the values of n = “);
scanf(“%d”,&n);
}while (n<1);
do{
printf(“ please input the values of s = “);
scanf(“%d”,&s);
}while (s<1);
do{
printf(“ please input the values of m = “);
scanf(“%d”,&m);
}while (m<1);
if (init_clist(&jos_clist,n))
josephus_clist(&jos_clist,s,m);
else
printf(“Out of space!\n”);
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-12-26
楼主太不小心了,主函数里你定义的lb指针没用到啊,你创建的链表是由la指向的,怎么能将lb传址呢??可以得出答案哦。。
相似回答