数据结构——单链表的查找、求单链表长度、单链表的创建

一、单链表的查找

1.按位查找

==GetElem(L, i): ==按位查找操作,获取表L中第i个位置的元素的值;

平均时间复杂度O(n)

2.按值查找

==LocateElem(L, e)==:按值查找操作,在表L中查找具有给定关键字值的元素;

二、求单链表的长度

== Length(LinkList L)==:计算单链表中数据结点(不含头结点)的个数,需要从第一个结点看是顺序依次访问表中的每个结点。算法的时间复杂度为O(n)。

三、单链表的创建操作

1.头插法建立单链表(平均时间复杂度O(n))
思路:每次都将生成的结点插入到链表的表头。
2.尾插法建立单链表(时间复杂度O(n))

思路:每次将新节点插入到当前链表的表尾,所以必须增加一个尾指针r,使其始终指向当前链表的尾结 点。好处:生成的链表中结点的次序和输入数据的顺序会一致。

3.链表的逆置:

算法思想:逆置链表初始为空,原表中结点从原链表中依次"删除",再逐个插入逆置链表的表头(即"头插"到逆置链表中),使它成为逆置链表的"新"的第一个结点,如此循环,直至原链表为空;

四、学习心得

单链表的查找

  1. 按位查找:这意味着要访问链表中的第k个元素,需要从头结点开始,顺序移动到第k个位置。因为可能需要遍历整个链表,所以平均时间复杂度为O(n)。此操作体现了链表非随机存储的特性,访问特定位置的成本较高。

  2. 按值查找:按值查找时,我们需要遍历链表,检查每个节点的值是否与目标值匹配。这同样具有O(n)的时间复杂度。这种查找操作在链表中是线性的,且它更加强调了链表中元素的无序性。

求单链表的长度

单链表长度的计算需要从第一个数据节点出发,顺序访问每个节点,直到链表末尾。这个过程的时间复杂度也是O(n),因为它涉及到对链表的一次完整遍历。

单链表的创建操作

  1. 头插法:创建单链表的头插法是将新节点插入到链表的前端。这种方法创建的链表元素顺序与添加顺序相反。每次插入操作的时间复杂度为O(1),但建立整个链表的平均时间复杂度为O(n),因为要插入n个元素。

  2. 尾插法:尾插法是将新节点添加到链表的末尾。这保持了元素的添加顺序。若没有维护指向链表最后一个节点的指针,每次插入操作的时间复杂度为O(n),因为需要找到当前最后一个节点。但如果维护了尾指针,每次插入的时间复杂度为O(1),整个链表构建的复杂度仍为O(n)。

链表的逆置

链表的逆置是将链表中的元素反向排列。这通常通过重新排列节点的指针来完成,而不是实际移动节点中的数据。链表逆置的时间复杂度是O(n),因为需要遍历一次链表来重新链接所有的节点。

综合心得

学习单链表的操作不仅让人了解了链表结构本身,还有助于理解数据结构的更广泛原理,例如动态内存管理、指针操作和算法复杂度。链表作为一种基础的数据结构,它的灵活性和动态性使得在进行插入和删除操作时非常高效,特别是在不需要频繁随机访问元素时。同时,链表的操作也强化了对递归和迭代思想的理解,因为很多链表问题可以通过这两种方法来解决。

此外,链表的操作也体现了算法设计中的权衡,比如时间复杂度和空间复杂度的考虑,以及特定场景下算法选择的重要性。例如,尽管链表能够提供快速的插入和删除,它在按索引查找时却不如数组高效。因此,在实践中,选择正确的数据结构对于性能至关重要。

最后,掌握链表的操作也是理解更复杂数据结构如树和图的基础,因为这些结构中都包含了链表的概念。总之,链表不仅是学习数据结构的重要一环,它的概念和操作也贯穿在计算机科学的多个领域中。

相关推荐
xiaoshiguang34 小时前
LeetCode:222.完全二叉树节点的数量
算法·leetcode
爱吃西瓜的小菜鸡4 小时前
【C语言】判断回文
c语言·学习·算法
别NULL4 小时前
机试题——疯长的草
数据结构·c++·算法
TT哇4 小时前
*【每日一题 提高题】[蓝桥杯 2022 国 A] 选素数
java·算法·蓝桥杯
ZSYP-S5 小时前
Day 15:Spring 框架基础
java·开发语言·数据结构·后端·spring
yuanbenshidiaos5 小时前
C++----------函数的调用机制
java·c++·算法
唐叔在学习6 小时前
【唐叔学算法】第21天:超越比较-计数排序、桶排序与基数排序的Java实践及性能剖析
数据结构·算法·排序算法
ALISHENGYA6 小时前
全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之分支结构(switch语句)
数据结构·算法
chengooooooo6 小时前
代码随想录训练营第二十七天| 贪心理论基础 455.分发饼干 376. 摆动序列 53. 最大子序和
算法·leetcode·职场和发展
jackiendsc6 小时前
Java的垃圾回收机制介绍、工作原理、算法及分析调优
java·开发语言·算法