单链表
1.概念:
单链表中的第一个节点称为头节点(Head Node),最后一个节点的指针指向 NULL,表示链表的结束。
以下是单链表的基本概念和术语:
-
节点(Node):单链表中的基本单元,包含两部分,数据部分用于存储元素的值,指针部分用于指向下一个节点。
-
头节点(Head Node):单链表中的第一个节点,用于存储链表的起始位置。
-
尾节点(Tail Node):单链表中的最后一个节点,其指针部分指向 NULL。
-
指针(Pointer):节点中用于指向下一个节点的指针,也称为链接(Link)。
-
空链表(Empty List):不包含任何节点的链表。
2.代码:
1.初始化:
2.增删操作
3.赋值操作:
4.测试案例:
这段代码中设置了一个虚拟头节点(Dummy Head Node),也称为哨兵节点(Sentinel Node)。虚拟头节点是在链表头部插入一个空节点,并将其作为链表的起始节点,这样可以简化链表操作的逻辑,使得所有节点的插入、删除等操作都可以统一处理,不需要单独处理头部节点的特殊情况。
在这段代码中,initLinkList()
函数初始化链表时,创建了一个名为 temperhead
的虚拟头节点,它的数据部分 data
被设为 '\0'
,指针部分 next
被设为 NULL
。这样一来,链表的真实头节点就是虚拟头节点的下一个节点,通过虚拟头节点可以方便地进行插入、删除等操作,而不用考虑头节点特殊情况。
虚拟头节点的好处包括:
- 简化操作:所有操作都可以一致地处理,无需单独考虑头节点和其他节点的区别。
- 避免空链表判断:虚拟头节点保证链表不会为空,简化了空链表的特殊处理。
- 美化代码逻辑:使代码结构更加清晰,降低了出错概率。
3.好处:
单链表具有以下几个好处:
-
动态内存分配:单链表的节点可以动态地分配内存,这意味着在程序运行时可以根据需要动态地创建和释放节点,而不需要预先指定链表的大小。
-
插入和删除效率高:相对于数组,单链表在插入和删除操作上具有更高的效率。在单链表中,只需修改节点的指针即可完成插入和删除操作,而不需要像数组那样移动大量元素。
-
灵活性:单链表的灵活性使得它适用于各种情况。可以在链表的任意位置插入或删除节点,而不会影响其他节点的位置。
-
不需要连续的内存空间:与数组不同,单链表中的节点可以存储在内存的任何位置,它们之间不需要连续的内存空间。这使得单链表更加灵活,并且可以更好地利用内存。
-
容易扩展:由于单链表的动态内存分配和灵活性,它很容易扩展,可以根据需要动态地增加节点。
总的来说,单链表在动态性、灵活性和插入删除操作的效率上具有优势,使得它成为许多应用场景中常用的数据结构之一。