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

一、单链表的查找

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),因为需要遍历一次链表来重新链接所有的节点。

综合心得

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

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

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

相关推荐
小芒果_01几秒前
P11229 [CSP-J 2024] 小木棍
c++·算法·信息学奥赛
qq_434085902 分钟前
Day 52 || 739. 每日温度 、 496.下一个更大元素 I 、503.下一个更大元素II
算法
Beau_Will2 分钟前
ZISUOJ 2024算法基础公选课练习一(2)
算法
XuanRanDev5 分钟前
【每日一题】LeetCode - 三数之和
数据结构·算法·leetcode·1024程序员节
gkdpjj6 分钟前
C++优选算法十 哈希表
c++·算法·散列表
代码猪猪傻瓜coding6 分钟前
力扣1 两数之和
数据结构·算法·leetcode
小码农<^_^>1 小时前
优选算法精品课--滑动窗口算法(一)
算法
羊小猪~~1 小时前
神经网络基础--什么是正向传播??什么是方向传播??
人工智能·pytorch·python·深度学习·神经网络·算法·机器学习
软工菜鸡1 小时前
预训练语言模型BERT——PaddleNLP中的预训练模型
大数据·人工智能·深度学习·算法·语言模型·自然语言处理·bert
南宫生1 小时前
贪心算法习题其三【力扣】【算法学习day.20】
java·数据结构·学习·算法·leetcode·贪心算法