C语言链表的用途:当数组不能满足使用时就可以用,

  1. 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。
  2. 链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。
  3. 链表是动态内存分配,数组是静态内存分配,静态内存分配是预先分配存储空间,动态内存分配是由系统根据程序的需要即时分配存储空间,而且动态内存分配的大小就是程序要求的大小。
  4. 链表需要使用的函数

    1. malloc 函数

      malloc 函数原型:
      void *malloc (unsigned int size )
      //系统自动在内存的动态存储区中分配一个长度为size的连续空间。其参数是一个 int 型无符号整数,返回值是一个指向所分配的连续内存的起始地址指针。
      //当函数未能成功分配存储空间(如内存不足)就会返回一个null 指针,所以在调用此函数时应该检测
      返回值是否为null. 并执行相应的操作。
      例如:

  5. include

  6. include

  7. main()

  8. {

  9. int count,array; _/count是一个计数器,array是一个整型指针,也可以理解为指向一个整型数组的首地址*/_

  10. if((array(int ) malloc(10sizeof(int)))==NULL)

  11. {

  12. printf(“不能成功分配存储空间。”);

  13. exit(1);

  14. }

  15. for (count=0;count〈10;count++) /给数组赋值/

  16. array[count]=count;

  17. for(count=0;count〈10;count++) /打印数组元素/

  18. printf(“%2d”,array[count]);

  19. }

上例中动态分配了10个整型存储区域,然后进行赋值并打印。例中if((array(int ) malloc(10sizeof(int)))==NULL)语句可以分为以下几步:

  1. 分配10个整型的连续存储空间,并返回一个指向其起始地址的整型指针

  2. 把此整型指针地址赋给array

  3. 检测返回值是否为NULL

  4. free 函数

由于内存区域总是有限的,不能不限制地分配下去,而且一个程序要尽量节省资源,所以当所分配的内存区域不用时,就要释放它,以便其它的变量或者程序使用。所以就要用到free函数。
free 函数原型:
void free (void *p);
//意义是 释放指针 P 所指向的内存区。其参数P必须是先前调用 malloc 函数或 calloc 函数 (另一个动态分配存储区的函数)时返回的指针。给 free 函数传递其它的值或许会造成死机或其它严重后果。
//free 重要的是指针的值,而不是用来申请动态内存的指针本身。
例如:

  1. int p1,p2;

  2. p1=malloc(10*sizeof(int));

  3. p2=p1;

  4. ……

  5. 5.free(p1) /或者free(p2)/

    1. malloc返回值赋给p1,又把p1的值赋给p2,所以此时p1,p2都可作为free函数的参数。

    2. malloc函数是对存储区域进行分配的。

    3. free函数是释放已经不用的内存区域的。