c语言链表参数传递的问题,但是找不出来。

#include<stdio.h>#include<stdlib.h>#include<malloc.h>#include<string.h>#defineLEN_Lsi... #include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>
#define LEN_L sizeof(struct LNode)
#define LEN_H sizeof(struct HNode)
//元素结点结构体,元素节点类型
struct LNode{
long id;
float data;
struct LNode * next;
};

//头结点结构体,头结点类型
struct HNode{
struct HNode * head;
struct LNode * tail;
char name[11];
long len;
struct LNode * next;
} ;

struct HNode * InitList(){
struct HNode * head;
head=(struct HNode * )malloc(LEN_H);
head->head=head;
head->tail=(struct LNode * )head;
printf("请输入链表名(不能出现空格):");
scanf("%s",head->name);
getchar();
head->len=0;
head->next=NULL;
Print(head);
return(head);
}
int AddNode(struct HNode * h){
int i,n;
struct LNode * p, * q;
q=h->tail;
n=2;
for(i=1;i<=n;i++){
p=(struct LNode * )malloc(LEN_L);
printf("元素数据:");
scanf("%lf",&p->data);
p->id=i;
p->next=NULL;
q->next=p;
q=p;
printf("第%d个元素:ID-%ld Data-%lf\n",i,p->id,p->data);
}
return 0;
}
int Print(struct HNode * h){
printf("头结点地址: %o\n",h->head);
printf("尾结点地址: %o\n",h->tail);
printf("链表名: %s\n",h->name);
printf("元素结点个数: %ld\n",h->len);
printf("后继结点地址: %o\n",h->next);
return 0;
}
//主函数
int main(){
struct HNode * head=NULL;
head=InitList();
AddNode(head);
Print(head);
system("pause");
return 0;
}

两次调用Print函数,但是结果输出的不一样。
特别是那个链表名name变量的输出,两次不一样。
在程序中去掉AddNode函数创建元素结点,就没有问题,但是参数的传递我没看出什么不对呀。
编译环境是Dev C++。
而且不能输出输入的元素结点的data值。
但是看着没什么问题撒。
展开
 我来答
有钱买不起房子
2011-06-30 · TA获得超过4326个赞
知道大有可为答主
回答量:1249
采纳率:100%
帮助的人:2084万
展开全部
//元素结点闭卜结构体,元素节点类型
struct LNode{
long id;
double data;//float改double
struct LNode * next;
};
这个语句scanf("%lf",&p->data);使用%lf进行格式,要对应double类型,%f是对应float类型的,后面的输出猜碧语句都是用%lf,所以把data改成double 类型,穗态举可以输出正确数据了
追问
不是数据输入的问题,应该是结点之间连接的时候出问题了,我把头结点和元素结点分别处理,发现没有问题,当通过函数调用,把头结点链入元素结点就不行了。
追答
请输入链表名(不能出现空格):abcdefg
头结点地址: 16003650
尾结点地址: 16003650
链表名: abcdefg
元素结点个数: 0
后继结点地址: 0
元素数据:11
第1个元素:ID-1 Data-11.000000
元素数据:12
第2个元素:ID-2 Data-12.000000
头结点地址: 16003650
尾结点地址: 16003650
链表名: abcdefg
元素结点个数: 0
后继结点地址: 0
请按任意键继续. . .

数据能正确接收,就是double问题
#include
#include
#include
#include
#define LEN_L sizeof(struct LNode)
#define LEN_H sizeof(struct HNode)
//元素结点结构体,元素节点类型
struct LNode{
long id;
double data;//float改double
struct LNode * next;
};

//头结点结构体,头结点类型
struct HNode{
struct HNode * head;
struct LNode * tail;
char name[11];
long len;
struct LNode * next;
} ;

struct HNode * InitList(){
struct HNode * head;
head=(struct HNode * )malloc(LEN_H);
head->head=head;
head->tail=(struct LNode * )head;
printf("请输入链表名(不能出现空格):");
scanf("%s",head->name);
getchar();
head->len=0;
head->next=NULL;
Print(head);
return(head);
}
int AddNode(struct HNode * h){
int i,n;
struct LNode * p, * q;
q=h->tail;
n=2;
for(i=1;idata);
p->id=i;
p->next=NULL;
q->next=p;
q=p;
printf("第%d个元素:ID-%ld Data-%lf\n",i,p->id,p->data);
}
return 0;
}
int Print(struct HNode * h){
printf("头结点地址: %o\n",h->head);
printf("尾结点地址: %o\n",h->tail);
printf("链表名: %s\n",h->name);
printf("元素结点个数: %ld\n",h->len);
printf("后继结点地址: %o\n",h->next);
return 0;
}
//主函数
int main(){
struct HNode * head=NULL;
head=InitList();
AddNode(head);
Print(head);
system("pause");
return 0;
}
400zclkuu
2011-06-30 · TA获得超过2938个赞
知道大有可为答主
回答量:4768
采纳率:16%
帮助的人:1582万
展开全部
return "head"; 为什么函数返回是字符串,你的返回类型是结构体指针的
cannot convert `const char*' to `a*'哗悄 in return
不能反转char * 到 a* 的返回值

#include <stdio.h>
#include <malloc.h>
#define Len sizeof(a)
#define null 0
#include <conio.h>
struct a
{
int k;
struct a *next;
};

struct a* gethead()//建立

{

struct a *head, *p2;
printf("please enter data.");
head=p2=(struct a*)malloc(Len);
scanf("%d",&p2->k); //输入要地址
while(p2->k!=0)
{
p2->next=(struct a*)malloc(Len);
p2=p2->next;
scanf("%d",&p2->k); //输入要地址
}
p2->next=null;

return head; /尺弯/返回指针

}
main()
{
struct a * head=gethead(); //变量名都没陵芦闷有
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-07-06
展开全部
return "head"; 为什么函念行迟数返回是字符串,你的返回类型是结构体指针的
cannot convert `const char*' to `a*' in return
不能反转char * 到 a* 的返回值

#include <stdio.h>
#include <malloc.h>
#define Len sizeof(a)
#define null 0
#include <conio.h>
struct a
{
int k;
struct a *next;
};

struct a* gethead()//建立

{

struct a *head, *p2;
printf("please enter data.");
head=p2=(struct a*)malloc(Len);
scanf("%d",&p2->k); //输入要地址带汪
while(p2->k!=0)
{
p2->next=(struct a*)malloc(Len);
p2=p2->next;
scanf("%d",&p2->k); //输入要地址
}
p2->next=null;

return head; //返回指针

}
main()
{
struct a * head=gethead(); //变量名都没有
}
另外,虚机团上产品团购,超仔李级便宜
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
律坤d
2011-07-11
知道答主
回答量:7
采纳率:0%
帮助的人:6.6万
展开全部
其中在InitList()function中将其struct HNode * head;定义为全局变量,然顷配后查看其结果是否正确。
目前你定义的是局部变量,但在mian function你是并肢将其作为全局绝乎世变量使用的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式