我自己写的约瑟夫环,求助

王朝知道·作者佚名  2009-07-12
窄屏简体版  字體: |||超大  
 
分類: 電腦/網絡 >> 程序設計 >> 其他編程語言
 
問題描述:

代码如下:

#include<iostream.h>

#include<malloc.h>

typedef struct lnode{

int position;

int password;

struct lnode *next;

}lnode,*linklist;

void creatlist(int n,linklist & p){

linklist t;

while(n>1){

t=(linklist)malloc(sizeof(lnode));

t->next=p->next;

p->next=t;

n--;

}

}

void inputpassword(int n,linklist & p){

int no,pw;

no=1;

do{

cin>>pw;

p->password=pw;

p->position=no;

no++;

cout<<p->position<<" "<<p->password;

}while(no<=n);

}

void gostar(int s,linklist & p){

while(s>1){

p=p->next;

s--;

}

}

void main(){

int n,s;

linklist p,t;

p=(linklist)malloc(sizeof(lnode));

p->next=p;

cout<<"input people number";

cin>>n;

creatlist(n,p);

cout<<"input "<<n<<" password";

inputpassword(n,p);

cout<<"input begin position";

cin>>s;

gostar(s,p);

cout<<"output";

s=p->password;

while(p!=p->next){

gostar(s,p);

cout<<p->position;//这里报错,

s=p->password;//谁知道怎么回事

t=p;

p=p->next;

free(t);

}

}

參考答案:

inputpassword漏了p=p->next;

这样就相当于一直在给一个节点赋值

还有

while(p!=p->next){

gostar(s,p);

cout<<p->position;

s=p->password;

t=p;

p=p->next;//你只是将指针指到此节点后面的节点,但是没将前面的节点连起来,这样就无法构成封闭环了

free(t);

}

小贴士:① 若网友所发内容与教科书相悖,请以教科书为准;② 若网友所发内容与科学常识、官方权威机构相悖,请以后者为准;③ 若网友所发内容不正确或者违背公序良俗,右下举报/纠错。
 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航