前言:研究一个数据结构的时候,首先讲的是增删改查。
链表中的每个节点都是由两部分组成。一部分为数据(节点存放的值),另一部分为 地址(下一个节点的地址),节点与节点之间通过指针连接起来。
每个数据在内存中存储都需要占据一块内存空间,任何一块内存空间都有相应的地址。
根据元素首地址和数据类型,其中数据类型规定了占据的内存空间的字节大小。
通过元素首地址和定义变量的数据类型就可以确定数据所占唯一的内存空间大小,同时找到对应的内存空间,然后从内存空间中读写数据即可。
链表区别于数组的存储方式,数组在内存中是集中存放的,链表在内存中是散乱存放的。
只要内存中有位置,链表节点就可以存放,节点间通过指针连接。
一个节点内部组成如下图所示。
插入删除数据效率高,读取(查找)数据效率低。
查找数据:需要从头结点开始,需要挨个进行判断,效率低。
更新数据:需要先查找到数据(查找),从头结点开始依次判断,找到之后替换数据。
新节点的 next
指向原链表的头结点,这样新节点就为当前新链表的头结点。
其中 “指向”是一个逻辑概念,怎么用代码实现,通过给 next
指针赋值的方式实现更改指向。
将要插入的节点的 next
指向后一个节点,前一个节点 next
指向要插入的节点。
直接将头节点删除,第二节点成为头节点。将 Head
指针往后移动一位。
将前一个节点的 next
指向后一个节点。
直接将尾节点的前一个节点的 next
置为 NULL
即可。