文章目录
一.C语言链表
链表作为C语言中的一种基础的数据结构,在平时的程序中使用次数比较少,但在操作系统中链表中的使用次数比较多。链表的最大作用就是可以把离散的数据链接在一起,这和数组是不一样的,数组的存储空间是一段连续的内存,而链表可以把内存中不连续的数据联系起来。学习链表主要是学习链表和节点。链表和节点之间的关系就像是晾衣架和钩子的关系:
链表就像是最上面的挂钩,节点就像是下面的小钩子,通过上面的钩子可以找到所有的小钩子,节点之间是首位相连的,每个节点上可以挂载数据,这样的话一个链表就可以把许多数据联系在一起。
1.单向链表
单向链表节点本身必须包含一个节点指针,用于指向下一个节点,当然节点中还可以携带其他的数据。节点是一个自定义类型的数据结构,在节点中可以有单个的数据、数组、指针数据或结构体数据等。
例如:
struct node
{
struct node *next; /* 指向链表的下一个节点 */
/* 节点携带的数据可以是如下内容 */
char data1; /* 单个的数据 */
unsigned char array[]; /* 数组 */
unsigned long *prt /* 指针数据 */
struct userstruct data2; /* 自定义结构体类型数据 */
/* 其他数据类型 */
}
在单向链表中,最后一个节点的指针指向第一个节点,代表链表是循环的,如图所示:
2.双向链表
双向链表和单向链表的区别就是:双向链表中有俩个节点指针,分别指向前一个节点和后一个节点,其余部分和单向链表一样。
双向链表的结构如示:
3.链表与数组
链表是通过节点把离散的数据链接成一个表,通过对节点的插入和删除操作从而实现对数据的存取。而数组是通过开辟一段连续的内存来存储数据,这是数组和链表最大的区别。 数组的每个成员对应链表的节点,成员和节点的数据类型可以是标准的 C 类型或者是用户自定义的结构体。数组有起始地址和结束地址,而链表是一个圈,没有头和尾之分,但是为了方便节点的插入和删除操作会人为的规定一个根节点。