首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

这个简单程序出现个小弟无法解释的有关问题。(待大侠啊)HELP~

2012-03-13 
这个简单程序出现个小弟无法解释的问题。。。。(在线等待大侠啊)HELP~~~#includestdio.h#define null 0typed

这个简单程序出现个小弟无法解释的问题。。。。(在线等待大侠啊)HELP~~~
#include<stdio.h>
#define null 0
typedef struct node
{
struct node *front;
int num;
struct node *next;
}stu;
with(stu *s)
{
int n,i;
stu *q,*p;
printf("input the string long\n");
scanf("%d",&n);

q=s;

scanf("%d",&q->num);
for(i=1;i<n;i++)
{
p=(stu *)malloc(sizeof(stu));
scanf("%d",&p->num);
q->next=p;
p->front=q;
q=p;
}
s->front=q;
q->next=s;

}
print(stu *s)
{
stu *q,*p;
q=s->next;
printf(" %d",s->num);
while(q!=s)
{
printf(" %d",q->num);
q=q->next;
}
printf("\n");
p=s->front;
while(p!=s)
{
printf(" %d",p->num);
p=p->front;
}
printf(" %d",s->num);
}

int deletes(stu *s,int j)
{
stu *q,*p,*head;
int t=0;
  q=head=s;
p=q->front;
if(s->num==j)
{s=s->next;
p->next=s;
s->front=p;}

while(q->next!=head&&q->num!=j)
{

   
p=q;
q=q->next;


}

   

if(q->num!=j)
return 0;
 



q=q->next;
p->next=q;
  q->front=p;
//////////print(s);1:这里的print函数或者主函数里的print函数任意只使用一个却出现不同的结果为啥?
  ////////使用1print一切正常,使用2print当删除第一个数字却出
/////////////////////////////现
///////出现死循为什么?
 

 
}

main()
{
stu s;
int i;
printf("input the delete num\n");
scanf("%d",&i);
with(&s);
  deletes(&s,i);
/////////print(&s);



}[code=C/C++][/code]





请大侠解释啊,本人很菜的,希望大家解释详细点

[解决办法]
main里的s没有变,全局和局部的问题,而那个头节点已经不在链里了
[解决办法]
int deletes(stu *s,int j)
{
stu *q,*p,*head;
int t=0;
q=head=s;
p=q->front;
if(s->num==j)
{ s=s->next;//这句...函数体内有效,函数结束后,&s的值依然是首结点的地址.函数结束后你的表已经混乱。
p->next=s;
s->front=p;}


可做如下测试:
if(s->num==j)
{ s=s->next;
s->front->next = NULL;\\将你删除的结点的front,next置为NULL。
s->front->front =NULL;\\再看看问题。。。调试通了感觉应该就没问题了。
p->next=s;
s->front=p;}



热点排行