永发信息网

约瑟夫环c语言

答案:2  悬赏:30  手机版
解决时间 2021-02-15 01:18
  • 提问者网友:人生佛魔见
  • 2021-02-14 07:00
我的程序总是死循环 可是我又找不到错在哪谁能帮忙看看 谢谢!!
#include
#include

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;}
while(p->next) p=p->next;
p->next=*l;
}

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

main(){
int i,m,s,n;
linklist la,lb;
scanf("%d,%d,%d",&m,&s,&n);
createlist(&la,m);
listdelete(&lb,s,n);}
最佳答案
  • 五星知识达人网友:躲不过心动
  • 2021-02-14 07:25



#include
#include

#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 )

{ 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 { 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;

if (s==1)
{pre =p;
p=p->link;
while (p!=*pclist)
{
pre =p;
p=p->link;
}
}
else for(i=1;i {
pre =p;
p=p->link;
}
while (p!=p->link)
{ for (i=1;i { 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楼网友:夜余生
  • 2021-02-14 07:38
约瑟夫环  a) 问题描述:joseph问题的一种描述是:编号为1、2、……、n的n个人按顺时针方向围坐一  圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个人开  始顺时针方向自1开始顺序报数,报到m时停止报数,报m的人出列,将他的密码作为新的m值,  从他在顺时针方向的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。试设  计一个程序求出出列顺序。  b) 基本要求:利用单向循环链表存储结构模拟此过程,按照出列的顺序印出各人的编号。  c) 测试数据:m的初值为20;n=7,7个人的密码依次为:3,1,7,2,4,8,4,首先报m的人  为6(正确的出列顺序应为6,1,4,7,2,3,5)。  实现提示:程序运行后,首先要求用户指定初始报数上限值,然后读取各人的密码。可设n <=30。     #include <stdio.h>  #include <stdlib.h>  typedef int elemtype;  typedef struct lnode{  elemtype data;int num;  struct lnode *next;  }lnode,*linklist;  void createlist_l(linklist *l,int n)  { int i=0;    elemtype e;  linklist p,q;  *l=(linklist)malloc(sizeof(lnode));  (*l)-> next=null;(*l)-> data=n;    q=*l;  while(i <n)  { scanf("%d",&e);  p=(linklist)malloc(sizeof(lnode));  p-> data=e;p-> num=i+1;  p-> next=null;  q-> next=p;  q=p;    i++;  }  p-> next=(*l)-> next;  }  void printlist(linklist l)  { int i=0;  linklist p;  p=l-> next;  while(i <l-> data)  {  printf("%5d",p-> data);  p=p-> next;  i++;  }  printf("\n");  }  void put(linklist *l)  { int i,m;linklist p,q;  printf("input a number:\n");  scanf("%d",&m);  q=(*l)-> next;  while((*l)-> data)  {for(i=0;i <m-1;i++)  {p=q;  q=q-> next;  }  printf("%5d",q-> num);  m=q-> data;  p-> next=q-> next;    free(q);  q=p-> next;  (*l)-> data=(*l)-> data-1;  }  }  void main()  {linklist l;    int a;  printf("请输入人数:");  scanf("%d",&a);  printf("请输入密码:");    createlist_l(&l,a);    printf("您输入的数字为:\n");    printlist(l);    put(&l);  } 
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯