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值。
但是看着没什么问题撒。
展开
 我来答
危献e3
2011-06-30 · TA获得超过2053个赞
知道大有可为答主
回答量:2738
采纳率:0%
帮助的人:1964万
展开全部
这里出问题了
head->tail=(struct LNode * )head;
然后看下面
q=h->tail;
再看下面
q->next=p;
这时候q->next已经不等于h->next了
不信你打印一下
改成这样
((struct HNode *)q)->next = p;
更多追问追答
追问
AddNode函数是先找到尾结点(q=h->tail),然后从尾节点开始,添加另外新加的结点。p是struct LNode *的类型,为什么要吧q转换了。q->next是联入下一个结点。这时候q->next的值肯定不等于h->next了。
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);
}
追答
不明白? 主要问题在于第一次
int AddNode(struct HNode * h){
int i,n;
struct LNode * p, * q;
static int first = 1;
q=h->tail;
n=2;
for(i=1;idata);
p->id=i;
p->next=NULL;
if (first)
{
((struct HNode *)q)->next = p;
first = 0;
}
else
{
q->next=p;
}

q=p;
printf("第%d个元素:ID-%ld Data-%lf\n",i,p->id,p->data);
}
return 0;
}
伯盈秀
2011-06-30 · TA获得超过1444个赞
知道小有建树答主
回答量:3051
采纳率:0%
帮助的人:0
展开全部
对话框程序的话,写在OnInitDialog里
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
手机用户08584
2011-06-30 · TA获得超过282个赞
知道答主
回答量:426
采纳率:0%
帮助的人:268万
展开全部
对话框程序的话,写在OnInitDialog里
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-07-06
展开全部
对话框程序的话,写在OnInitDialog里
另外,虚机团上产品团购,超级便宜
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式