C语言一个基础链表题目,基础不难的!

题:建立链表,统计链表中成绩为90分的学生个数,在链表中查找某同学成绩。creat,count,search,分别用来建立链表,统计人数,查找学生。#include<st... 题:建立链表,统计链表中成绩为90分的学生个数,在
链表中查找某同学成绩。
creat,count,search,分别用来建立链表,统计人数,查找学生。

#include<stdlib.h>
#define LEM sizeof(struct student)
struct student
{int score;
long int number;
struct student *next;
};
struct student *creat()
{struct student *head;
struct student *p1,*p2;
int Xscore,Xnumber;
n=0;head=NULL;p2=NULL;
....
return(head); } (这里我省略了,反正就是用动态函数建立链表的一般步骤。最后返回表头)
int count(struct student *p)
{int num;
num=0;
while(p!=NULL)
{if(p->score==90)num++;
p=p->next;(这个我觉得是多余的,~~~不是找到分数为90的就够了吗?干嘛自己的指针域赋值给自己的结点??))
return(num);
}
struct student *search(struct student *p,int number)
{while((p->number!=number)&&(p!=NULL)) (还有这个循环条件实在是难得理解)
p=p->next; (这个语句就看不懂了)
if(p!=NULL)
printf("found!");
else
printf("Not find the number of student");
return p;
}
main()
{
struct student *ptr,*pp;
int num;
long int number;
ptr=creat();
num=count(ptr);
printf("the count of 90 =%d\n",num);
printf("input number of being searched:");
scanf("%ld",&number);
pp=search(ptr,number);
if(pp!=NULL) printf("the number=%ld,the score=%d,number,pp->score);
}

其实这道题不难,就是上面几个瑕疵地方超越了我的基础,请帮我分析一下谢谢。
展开
 我来答
free_panwei
2008-09-04 · 超过84用户采纳过TA的回答
知道小有建树答主
回答量:234
采纳率:0%
帮助的人:236万
展开全部
int count(struct student *p)
{int num;
num=0;
while(p!=NULL)
{if(p->score==90)num++;
p=p->next;(这个我觉得是多余的,~~~不是找到分数为90的就够了吗?干嘛自己的指针域赋值给自己的结点??))

//这里不是说找到了一个就够了,而是要统计出分数都为90分的人数!p=p->next;这里是将P指向下一个结点!就好像火车是链表,乘务员是p指针!每节车箱就相当于一个结点,而且只有一个乘客。乘务员要统计火车里乘客是女的人数。p=p->next;相当于乘务员走到下一节车箱!
return(num);
}
struct student *search(struct student *p,int number)
{while((p->number!=number)&&(p!=NULL)) (还有这个循环条件实在是难得理解)
p=p->next; (这个语句就看不懂了)

//while当前的p->number不等于number和链表还没有结果,p=p->next;
//就像刚才的比喻一样,要查找对应的车票号,如果当当前的车箱里的人没有对应的车票号时(p->number!=number),就要看看是不是已经到了车尾了(p!=NULL),如果当前的人的车票不对应而且还没有到车尾,就要到下一节车箱查找(p=p->next)! 这样你应该明白了吧

if(p!=NULL)
printf("found!");
else
printf("Not find the number of student");
return p;
}
我是菜狗
2008-09-04 · TA获得超过118个赞
知道小有建树答主
回答量:272
采纳率:0%
帮助的人:0
展开全部
{if(p->score==90)num++;
p=p->next;(这个我觉得是多余的,~~~不是找到分数为90的就够了吗?干嘛自己的指针域赋值
这句很重要~查找整道链表有那个炼的score==90分

{while((p->number!=number)&&(p!=NULL)) (还有这个循环条件实在是难得理解)
p=p->next; (这个语句就看不懂了)
~~这个一看就知道是查链表里有没有number
如果有就输出found没有就输出Not find the number of student
这句if(p!=NULL) 和这一句就p->number!=number知道他干什么

其实链表很简单~你可以把链表的每一个链都看成一个房间就行了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式