C语言函数的链表变量 c语言链表库函数

翻译C语言动态链表函数#include stdio.h//头文件,没什么好说的//
#include stdlib.h
#define LEN sizeof(struct Student)//结构体长度//
struct Student
{long num;//学号//
float score;//分数//
struct Student *next; //下一个学生//
};
int n; //链表长度,可以仅作为局部变量,但这里定义为全局变量也无所谓//
struct Student *creat(void) //创建链表函数//
{struct Student *head; //头指针 , 即链表第一个结构体的指针//
【C语言函数的链表变量 c语言链表库函数】 struct SStudent *temp,*end; //临时指针,尾指针,把p1,p2换为更有意义的词//
n=0;
temp=(struct Student *)malloc(LEN); //分配一个结构体内存,这里end或p2赋值无意义、没用处//
scanf("%ld %f",temp-num,temp-score);//获取学号、成绩//
head=NULL;//要注意,还没判断temp是不是有效的结构体,所以,head还是NULL!//
while(temp-num!=0) //如果temp是一个有效的结构体//
{n=n+1; //计数//
if(n==1)head=temp; //头指针,也是要返回的指针//
else end-next=temp; //把temp链接到链表的尾部//
end=temp; //有了新的尾部 , 当然移动尾部指针到新尾部了//
temp=(struct Student *)malloc(LEN); //又分配内存//
scanf("%ld %f",temp-num,temp-score); //又进行学号、成绩输入,然后while()中判断……//
}
end-next=NULL; //尾部的“下一个”指针要确保为NULL , 因为分配内存时没有初始化,可能是任意值哦!//
free(temp); //注意,原程序中没有这个,会导致内存泄露,因为总有一个结构体没有被添加到链表中//
return(head);
}
int main()
{struct Student *pt;
pt=creat();//创建链表//
printf("\nnum:%ld\nscore:%5.1f\n",pt-num,pt-score); //把链表头输出,注意,如果链表长度为0,这会出错的!//
return 0;
}
//整个程序还算工整,局部地方,比如while()可以更优化点//
C语言 调用一个建立链表的函数后,返回主函数后,再定义一某 变量 该变量会不会占用已经建起来的链表空间肯定不会?。谕桓龊? ,无论你变量在什么位置分配 , 都不会分配同一空间
c语言线性表链式结构中如何存储数据对于LinkList
L:
L是指向定义的node
结构体
的指针,可以用-运算符来访问结构体成员,即L-elem,而(*L)就是个Node型的结构体了,可以用点运算符访问该结构体成员,即(*L).elem;
对于LinkList
*L:L是指向定义的Node结构体指针的指针,所以(*L)是指向Node结构体的指针,可以用-运算符来访问结构体成员,即(*L)-elem,当然,(**L)就是Node型结构体了,所以可以用点运算符来访问结构体成员,即(**L).elem;

链表
操作中,我们常常要用链表变量作物函数的参数,这时,用LinkList
L还是LinkList
*L就很值得考虑深究了,一个用不好,函数就会出现逻辑错误,其准则是:
如果函数会改变指针L的值,而你希望函数结束调用后保存L的值,那你就要用LinkList
*L,这样,向函数传递的就是指针的地址,结束调用后,自然就可以去改变指针的值;
而如果函数只会修改指针所指向的内容,而不会更改指针的值,那么用LinkList
L就行了
C语言链表 主函数1、添加头文件"stdio.h"
2、struct student * creat(void),但是你的main函数中返回接收却是用的int*类型 。
3、主函数main应当明确声明为void main()
4、最为严重的是:struct student * creat(void) 函数体中使用了局部变量struct student *head; struct student *p1,*p2; 但是函数结束的地方却要返回这些指针,因此返回的值是无效数据 。返回时 , 已经不再作用域了,是无效的空间 。建议把这些数据当作输入参数 , 指针类型的 。就可以正确的接收分配的struct student空间以及指针了 。

推荐阅读