C程序中的链表问题? (20分)

小唐

Unregistered / Unconfirmed
GUEST, unregistred user!
#include <stdio.h>
struct list
{
int bh;
char name[10];
struct list *next;
};
typedef struct list node;
typedef node *link;
link create_link(link head)
{
int number=1;
char nameitem[10];
int i;
link newde;
link pointer;
head=(link)malloc(sizeof(node));
if (head=NULL) putchar(7);
head->bh=number;
printf("/nPlease input string:");
scanf("%s",nameitem);
for (i=0;i<10;i++)
head->name=nameitem;
head->next=NULL;
pointer=head;
while (1)
{
number++;
newde=(link)malloc(sizeof(node));
newde->bh=number;
scanf("%s",nameitem);
if (nameitem[0]=='0')
break;
for (i=0;i<10;i++)
newde->name=nameitem;
newde->next=NULL;
pointer->next=newde;
pointer=newde;
}
return head;
}
void display_link(link head)
{
link pointer;
pointer=head;
while (pointer !=NULL)
{
printf("pointer->bh=%d/n",pointer->bh);
printf("pointer->name=%s/n",pointer->name);
pointer=pointer->next;
}
}
void free_link(link head)
{
link pointer;
while (head !=NULL)
{
pointer=head;
head=head->next;
free(pointer);
}
}
void main(void)
{
link ahead;
create_link(ahead);
display_link(ahead);
free_link(ahead);
}
当我输入完数据,按“0”再回车,按ALT+F5查看结果,
发现屏幕上head->name=的后面出现的是乱码,后面有句
英语提示,好象是说指针出了问题,我调试检查了很久,
都不知错在哪里,我和书上的程序核对了很多遍的。
请教各位了。
 
这种内存分配方式是不是有问题,在一个过程中分配,在另一个过程另释放。
 
应该是没错的,这是书上写的。
麻烦你将以上代码贴到编译器中运行一下,希望你能纠正其中的错误。
 
link create_link(link &amp;head) //'&amp;'加上这个就OK 要的是地址共用,不然返回时就不对了
{
int number=1;
char nameitem[10];
int i;
---------
void display_link(link &amp;head)
{
link pointer;
pointer=head;

-----------
void free_link(link &amp;head)
{
link pointer;
while (head !=NULL
 
youou:
  我按照你的方法进行了改进,可是还是不能正常运行呀。
麻烦你将以上代码复制到c编译器中运行一下,将你改过的
能正常运行的代码贴出来。先谢过了。
 
注意这里:
if (head=NULL) putchar(7);
~~~
应该是 if (head==NULL) putchar(7);
 
TO:小唐
修改如下:
#include <stdio.h>
struct list
{
int bh;
char name[10];
struct list *next;
};
typedef struct list node;
typedef node* link;
link create_link(link head)
{
int number=1;
char nameitem[10];
int i;
link newde;
link pointer;
/*head=(link)malloc(sizeof(node));
不要这行,在这里分配空间是在堆栈里return后会找不到链头地址*/
if (head==NULL) putchar(7);
/*这里的‘=’应该为‘==’*/
head->bh=number;
printf("/nPlease input string:");
scanf("%s",nameitem);
for (i=0;i<10;i++)
head->name=nameitem;
head->next=NULL;
pointer=head;
while (1)
{
number++;
newde=(link)malloc(sizeof(node));
newde->bh=number;
scanf("%s",nameitem);
if (nameitem[0]=='0')
break;
for (i=0;i<10;i++)
newde->name=nameitem;
newde->next=NULL;
pointer->next=newde;
pointer=newde;
}
return head;
}
void display_link(link head)
{
link pointer;
pointer=head;
while (pointer !=NULL)
{
printf("pointer->bh=%d/n",pointer->bh);
printf("pointer->name=%s/n",pointer->name);
pointer=pointer->next;
}
}
void free_link(link head)
{
link pointer;
while (head !=NULL)
{
pointer=head;
head=head->next;
free(pointer);
}
}
void main(void)
{
link ahead;
ahead=(link)malloc(sizeof(node));
/*链头要在这里分配空间*/
create_link(ahead);
display_link(ahead);
free_link(ahead);
}
 
对了,还得把if (head=NULL) putchar(7);
先注释掉。。。。。。。。。
就可以了。。。
 
同意,up一下~~~~···
 
to 小唐:
这种破书不要看也罢。。。
要不先注释要不改成:
if (head==NULL) putchar(7);
我都调试过了..
 
socool_10:
  非常感谢你的指点!
/*head=(link)malloc(sizeof(node));
不要这行,在这里分配空间是在堆栈里return后会找不到链头地址*/
原来这里才是发生错误的真正原因啊,真想不到书上竟会有这种错误。

youou:
  虽然你没有把问题说到点子上,但还是要向你说声谢谢!
 
上次忘了加分了,再次谢谢各位的帮助!
 
不对吧。。我说到点子上了。可以在里头分配链头地址的。
我上次调试的时候把if (head=NULL) putchar(7);
先注释掉,后来就忘了说了。。。呵~~
 
“可以在里头分配链头地址的”,是说像下面这样吗:
create_link(&amp;ahead);
加上&amp;这个符号
可是,我在turbo c++ 3.0里试过,这样做是不行的,程序不能正常运行!
 
#include <stdio.h>
struct list
{
int bh;
char name[10];
struct list *next;
};
typedef struct list node;
typedef node *link;
link create_link(link &amp;head)
{
int number=1;
char nameitem[10];
int i;
link newde;
link pointer;
head=(link)malloc(sizeof(node));
if (head==NULL) putchar(7);
//==这个改了。。。。。。。
head->bh=number;
printf("/nPlease input string:");
scanf("%s",nameitem);
for (i=0;i<10;i++)
head->name=nameitem;
head->next=NULL;
pointer=head;
while (1)
{
number++;
newde=(link)malloc(sizeof(node));
newde->bh=number;
scanf("%s",nameitem);
if (nameitem[0]=='0')
break;
for (i=0;i<10;i++)
newde->name=nameitem;
newde->next=NULL;
pointer->next=newde;
pointer=newde;
}
return head;
}
void display_link(link &amp;head)
{
link pointer;
pointer=head;
while (pointer !=NULL)
{
printf("pointer->bh=%d/n",pointer->bh);
printf("pointer->name=%s/n",pointer->name);
pointer=pointer->next;
}
}
void free_link(link &amp;head)
{
link pointer;
while (head !=NULL)
{
pointer=head;
head=head->next;
free(pointer);
}
}
void main(void)
{
link ahead;
create_link(ahead);
display_link(ahead);
free_link(ahead);
}
-----------
1.'='改为'=='
2.然后加了3个'&amp;'
就这样就OK了。。。
 

Similar threads

I
回复
0
查看
588
import
I
I
回复
0
查看
689
import
I
I
回复
0
查看
545
import
I
I
回复
0
查看
740
import
I
I
回复
0
查看
655
import
I
顶部