1、 什么是动态链表?
动态链表,其实,就是在程序运行的过程所产生出来的节点,而不是预先定义好的节点。
而动态链表的作用是,在创建链表时,不确定有多少个节点,那么,就可以在程序运行
的过程中再根据程序的判断去创建节点,从而,形成动态链表。
2、动态产生节点的函数
在C语言里面,它提供了两个函数 malloc 与 calloc 来动态产生节点。
函数malloc的原型如下:
void *malloc(unsigned int size );
原型分析:
malloc函数的作用就是分配一个由参数size所指定大小的内存空间,
并返回成功分配后的内存空间的起始地址,如果分配不成功则返回NULL空值。
函数calloc的原型如下:
void *calloc( unsigned n ,unsigned size );
原型分析:
calloc函数的作用就是分配n个连续的内存空间,而要分配多少个,则由第一个参数n来决定。
而每一个内存空间要分配的大小,则由第二个参数size来决定。
如果分配成功,则返回已分配的连续内存空间的起始地址,否则,返回NULL空值。
3、释放节点的函数
free函数的原型如下:
void free ( void *p );
原型分析:
free函数的作用是释放参数p所指向的内存空间,而这里的参数p,是指通过
malloc或calloc函数成功分配内存空间后的返回值。
另外,free函数没有返回值。
4、例子:
struct ST //定义了结构体ST
{
int Number; //编号,用于记录一个整型数
struct ST * next; //定义一个ST结构体的指针变量next成员,指向链表中下一个节点
};
void main()
{
//定义了结构体ST的指针变量head作为第一个节点
struct ST * head;
int len = sizeof( struct ST ); //通过sizeof获取ST结构体的大小,
并保存于 变量len中
(1)//通过malloc为第一个节点head分配内存空间,并通过(struct ST*)对返回的
类型强制转换为(结构体ST的指针类型)
head = ( struct ST * ) malloc( len );//根据变量len中所保存的大小来分配内存空间。
//通过head节点调用成员Number,并赋值为1
head->Number = 1;
(2)//再通过malloc分配另一个内存空间,作为第2个节点,
并通过第一个节点的next成员指向第2个节点的内存空间。
head->next = ( struct ST * ) malloc( len );
//通过head节点调用成员next找到第2个节点,
并调用第2个节点的成员Number,并赋值为2
head->next->Number = 2;
(3)//再通过malloc分配另一个内存空间,作为第3个节点,
并通过第一个节点的next成员找到第2个节点,
然后,通过第2个节点的next成员指向第3个节点的内存空间。
head->next->next = ( struct ST * ) malloc( len );
//通过head节点调用成员next找到第2个节点,
再通过第2个节点调用成员next找到第3个节点,
再通过第3个节点调用成员Number,并赋值为3
head->next->next->Number = 3;
}
小结:
(1)从第一个节点head开始可以通过每个节点的next成员找到下一个节点。
(2)每个节点中的next成员都指向下一个节点的内存空间,即指向下一个节点。
所以,可以通过next成员调用下一个节点中的成员。
=======================================================================
非常好,现在,我们已经掌握了C语言中的(动态链表)但是,如何去运行用它呢?
所以,我们就需要通过下方的链接,进入到C语言的代码训练中,然后,通过实践去加深对该知识点的理解与运用。
>>>下载训练环境与使用说明(使用真实的开发环境,结合游戏闯关进行编程训练)
|