有没有C语言高手帮我分析这个链表的程序,我想不通!

来源:百度知道 编辑:UC知道 时间:2024/06/07 14:05:03
一个链表,每个节点包括学号,性别,年龄,输入一个节点,如果有节点,就将此节点删除。能不能用图表示一下,我看着看着就不知道看到哪儿去了。谢谢!

程序如下:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
struct student {
unsigned int stu_id;
char sex;
unsigned short age;
struct student*str;}
main()
{struct student *p,*h,*s;
int i=20;
unsigned short c;
p=(struct student*)malloc(sizeof(struct student));
h=p;
do{
p->str=(struct student*)malloc(sizeof(struct student));/*这一行指向哪个了,我有些不懂*/
p=p->str;
p->stu_id=i+1000;
p->sex='M';
p->age=i;
i++;}while(i<31);
p->str=NULL;
printf("make a student chainde list.\n");
for(p=h,p=p->str;p;p=p->str)/*这一行很不懂,开始p=h,p=p->str,是什么意思,p=h了,再p=p->str,那么p=h就没有用了啦*/
{printf("stu_id=%d,sex=%c,age=%d\n", p->stu_id,p->sex,p->age);}
printf("___________________\n");
printf("enter

p->str=(struct student*)malloc(sizeof(struct student));
先是p申请了一个节点的内存空间,然后p的地址即p->str指向一个新的节点内存,数据未初始化,但分配了内存空间,然后p指向它的下一个节点即: p=p->str 初始化数据后p->stu_id=i+1000; p->sex='M';p->age=i; 又为p的地址分配一个新的节点地址,然后p指向它的下一个节点
你记住 首先是p产生 然后内存中构建p的str的内存空间 然后p指向p后面一个节点 再是产生p的下一个节点 p又指向下一个节点...
节点p 创建
产生 节点p的下一个节点 并以p的str成员去保存它下一个节点的地址 然后是p直接指到上面提到的下一个节点 后是赋值 这样说来 开始创建的是一个没有给结构体成员赋值的节点
不知道你懂了没有?
我只能说这么多了 不明白你再说哪里不明白。。。