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值。
但是看着没什么问题撒。 展开
#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值。
但是看着没什么问题撒。 展开
4个回答
展开全部
//元素结点结构体,元素节点类型
struct LNode{
long id;
double data;//float改double
struct LNode * next;
};
这个语句scanf("%lf",&p->data);使用%lf进行格式,要对应double类型,%f是对应float类型的,后面的输出语句都是用%lf,所以把data改成double 类型,可以输出正确数据了
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;
}
展开全部
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(); //变量名都没有
}
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(); //变量名都没有
}
另外,虚机团上产品团购,超级便宜
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(); //变量名都没有
}
另外,虚机团上产品团购,超级便宜
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
其中在InitList()function中将其struct HNode * head;定义为全局变量,然后查看其结果是否正确。
目前你定义的是局部变量,但在mian function你是将其作为全局变量使用的。
目前你定义的是局部变量,但在mian function你是将其作为全局变量使用的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询