C语言链表基本问题

以-1作为结束标志,编写一个创建链表的函数。看下面问题。#include<stdlib.h>structstudent{intnum;floatscore;structs... 以-1作为结束标志,编写一个创建链表的函数。看下面问题。
#include<stdlib.h>
struct student
{
int num;
float score;
struct student *link;
};
struct student *creat()
{
struct student *head,*p,*q;
int number;
head=0;
scanf("%d",&number);
while(number!=-1)
{
q=(struct student *)malloc(sizeof(struct student));
q->num=number;
scanf("%f",&q->score);
if(head==0)
head =q;
else
p->link=q;
p=q;//这里是什么?我看不明白
scanf("%d",&number);
}
if(head!=0)
p->link=0;
return(head);
}
展开
 我来答
wuwowuzhi
2008-07-29 · TA获得超过996个赞
知道小有建树答主
回答量:565
采纳率:0%
帮助的人:590万
展开全部
你这里看不明白是因为你把 p=q;当成把q覆盖上p了,
其实p是一个移动的指针,
p->link=q; 之后,q连接到原来的p后面,
p=q;后是让p往后移动一个节点,指向现在的q,在插入新节点时就是现在的p(也是q)后面。
你把p看成在节点下面移动的那种示意图,比较好理解。
togoice
2008-07-29 · 超过52用户采纳过TA的回答
知道答主
回答量:246
采纳率:0%
帮助的人:181万
展开全部
链表得结构体
score 和link
link是个指针
指向下一个结点
而P->LINK就是说p中得link这个指针
你说得就是把q的那个结点给P->LINK
P->LINK就指向Q了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
woshitang0729
2008-07-29 · 超过17用户采纳过TA的回答
知道答主
回答量:54
采纳率:0%
帮助的人:58.8万
展开全部
p->next指针指向q
p指向q
就是把q插入链表中
又让p指针指向新加入的q上
如果number不为-1 下一个新加入元素再加给p后面 也就是连在了q的后面 这样形成链表
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
neak47
2008-07-29
知道答主
回答量:50
采纳率:0%
帮助的人:29.9万
展开全部
你的代码写的有点问题..
1.head = 0;一般不提倡这样的写法,head是指针一般这样head = NULL;
2.你的指针p并未初始化,没有指向任何内存区域, 你可以先将 p指向head 如 p = head;
3.p = q,是将p指针往后挪一个位置
4.if (head != 0 )p->link=0,建议写成if (head != NULL) p->link = NULL;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式