说明:
链表比数组更加灵活。
例如:有一串已经从小到大排好序的数 2 3 5 8 9 10 18 26 32。 现需要往这串数中插入 6 使其得 到的新序列仍符合从小到大排 列。如我们使用数组来实现这一操作,则需要将 8 和 8 后面的 数都依次往后挪一位。
链表如何实现呢?
1.使用指针。
指针就是用来存储内存地址的,为什么要分不同类型的指针呢? 因为指针变量存储的是一个内存空间的首地址(第一个字节的地址) 但是这个空间占用了多少个字节,用来存储什么类型的数,则是由指 针的类型来标明的。
2.使用指针和动态分配内存函数 malloc。
a.使用 malloc 函数时需要用到 stdlib.h 头文件 !!! malloc 函数的作用就是从内存中申请分配指定字节大小的内存空间。 如果你不知道 int 类型是 4 个字节的,还可以使用 sizeof(int)获取 int 类型所占用的字节数, 如下: malloc(sizeof(int));
b. malloc 函数的返回类型是 void * 类型。 void * 表示未确定类型的指针。 在 C 和 C++中,void * 类型可以强制转换为任何其他 类型的指针。
代码部分:
#include <stdio.h>
#include <stdlib.h>//!!!
int main() {
int* p; //定义一个指针
p = malloc(sizeof(int)); //获取动态分配的内存空间地址
*p = 10; //向内存空间中写入10
printf("%d", *p); //输出内存中的值
getchar(); getchar();
return 0;
}
输出:
10
总结:
1.链表可以处理预先不知道变量个数的问题。
2.&叫取地址符。
3.在 C 语言中 * 号有三个用途,分别是:
a. 乘号,用做乘法运算,例如 5*6。 b. 申明一个指针,在定义指针变量时使用,例如 int *p;。 c. 间接运算符,取得指针所指向的内存中的值, 例如 printf("%d",*p);。