c语言编写约瑟夫环问题
#include<stdio.h>#include<stdlib.h>typedefstructnode{intkey;//密码intnum;//人的顺序intcount...
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int key; //密码
int num; //人的顺序
int count; //报数
struct node *next;
}node,*LinkList;
void CreatList(LinkList *p,int n)
{
int i;
int j=1;
LinkList q;
*p=(LinkList)malloc(sizeof(node));
q=*p;
printf("请输入每个人的密码:");
for(i=0;i<n-1;i++)
{
scanf("%d",&(*p)->key);
(*p)->num=j++;
(*p)->next=(LinkList)malloc(sizeof(node));
(*p)=((*p)->next);
}
q=(*p)->next;
scanf("%d",&(*p)->key);
(*p)->num=j++;
(*p)=q;
}
void DeleteNode(LinkList *p)
{
LinkList q;
q=((*p)->next);
if((*p)->key!=NULL)
{
(*p)->next=((*p)->next)->next;
printf("%d ",q->num);
}
else
{
printf("%d",(*p)->num);
}
free(q);
}
void Judge(LinkList *p,int *m)
{
int cot=1;
int i;
for(i=0;i<*m-1;i++)
{
(*p)->count=cot++;
(*p)=(*p)->next;
}
m=&((*p)->next)->key;
DeleteNode(&(*p)->next);
}
void main()
{
int m,n,i;
LinkList p;
printf("请输入初始上限:");
scanf("%d",&m);
printf("请输入人数:");
scanf("%d",&n);
for(i=0;i<n-1;i++)
{
CreatList(&p,n);
Judge(&p,&m);
}
}
程序总是在函数Judge那里崩坏,我看了断点发现(*p)里面具体的值都没有,是我建立链表的时候出了问题了吗?求调试 展开
#include <stdlib.h>
typedef struct node
{
int key; //密码
int num; //人的顺序
int count; //报数
struct node *next;
}node,*LinkList;
void CreatList(LinkList *p,int n)
{
int i;
int j=1;
LinkList q;
*p=(LinkList)malloc(sizeof(node));
q=*p;
printf("请输入每个人的密码:");
for(i=0;i<n-1;i++)
{
scanf("%d",&(*p)->key);
(*p)->num=j++;
(*p)->next=(LinkList)malloc(sizeof(node));
(*p)=((*p)->next);
}
q=(*p)->next;
scanf("%d",&(*p)->key);
(*p)->num=j++;
(*p)=q;
}
void DeleteNode(LinkList *p)
{
LinkList q;
q=((*p)->next);
if((*p)->key!=NULL)
{
(*p)->next=((*p)->next)->next;
printf("%d ",q->num);
}
else
{
printf("%d",(*p)->num);
}
free(q);
}
void Judge(LinkList *p,int *m)
{
int cot=1;
int i;
for(i=0;i<*m-1;i++)
{
(*p)->count=cot++;
(*p)=(*p)->next;
}
m=&((*p)->next)->key;
DeleteNode(&(*p)->next);
}
void main()
{
int m,n,i;
LinkList p;
printf("请输入初始上限:");
scanf("%d",&m);
printf("请输入人数:");
scanf("%d",&n);
for(i=0;i<n-1;i++)
{
CreatList(&p,n);
Judge(&p,&m);
}
}
程序总是在函数Judge那里崩坏,我看了断点发现(*p)里面具体的值都没有,是我建立链表的时候出了问题了吗?求调试 展开
1个回答
展开全部
改的略狠 ,自己研究一下吧
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int key; //密码
int num; //人的顺序
struct node *next;
}node,*LinkList;
void CreatList(LinkList *p,int n)
{
int i;
LinkList q;
*p=(LinkList)malloc(sizeof(node));
q=*p;
for(i=0;i<n-1;i++)
{
printf("请输入%d的密码: ", i+1);
scanf("%d",&q->key);
q->num=i+1;
q->next=(LinkList)malloc(sizeof(node));
q=q->next;
}
printf("请输入%d的密码: ", i+1);
scanf("%d",&q->key);
q->num=i+1;
q->next=*p;
}
void DeleteNode(LinkList *p, LinkList del )
{
LinkList q=*p ;
q->next=del->next; //保链
*p=q->next ; //指向下一个要数的节点
free(del); //释放出列节点
}
void Judge(LinkList *p,int m)
{
LinkList q=*p;
if ( q->next == q )
{
printf("%d\n",q->num);
}
else
{
int i;
for(i=0;i<m-1;i++)
{
*p=q; //上级节点
q=q->next ;
}
m=q->key ; //出列密码
printf("out %d\n", q->num ); //出列编号
DeleteNode( p, q ); //出列,释放结点并保持表的顺序
Judge(p,m); //继续检查下一个出列节点
}
}
void main()
{
int m,n;
LinkList p;
printf("请输入初始上限:");
scanf("%d",&m);
printf("请输入人数:");
scanf("%d",&n);
CreatList(&p,n); //创建表,只做一次
Judge(&p,m); //递归检查出列
}
追问
多谢啦,我自己换了个思路也解决了,来看看你的程序,多谢
追答
不客气,有问题共同研究
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询