一、链表原理
(1)链表的组成
链表是由若干个节点组成的(链表的各个节点结构是完全类似的),节点是由有效数据和指针组成的。有效数据区域用来存储信息完成任务的,指针区域用于指向链表的下一个节点从而构成链表。
(2)链表的作用
时刻谨记:链表就是用来解决数组的大小不能动态扩展的问题,所以链表其实就是当数组用的。直白点:链表能完成的任务用数组也能完成,数组能完成的任务用链表也能完成。但是灵活性不一样。
简单说:链表就是用来存储数据的。链表用来存数据相对于数组来说优点就是灵活性,需要多少个动态分配多少个,不占用额外的内存。数组的优势是使用简单(简单粗暴)。
二、链表构成
1、单链表的实现
(1)单链表是由节点组成的,节点中包含:有效数据和指针。
struct node
{
int data;
struct node *pNext;
}
(2)定义的struct node只是一个结构体,本身并没有变量生成,也不占用内存。结构体定义相当于为链表节点定义了一个模板,但是还没有一个节点,将来在实际创建链表时需要一个节点时用这个模板来复制一个即可。
(3) 头指针pheader(每个链表都会有一个头)
头指针并不是节点,而是一个普通指针,只占4字节。头指针的类型是struct node *类型的,所以它才能指向链表的节点。
2、创建一个链表节点
(1)链表的内存要求比较灵活,不能用栈,也不能用data数据段。只能用堆内存。
(2)用堆内存来创建一个链