王道计算机408数据结构 笔记4

本文详细介绍了单链表的定义,包括不带头结点和带头结点的链表结构。讨论了单链表的插入和删除操作,如按位序插入和删除,以及不同情况下的时间复杂度。此外,还涵盖了单链表的查找方法,包括按位查找和按值查找,以及如何计算链表长度。最后,讲解了如何通过尾插法和头插法建立单链表,并指出头插法可用于链表逆置。
摘要由CSDN通过智能技术生成

2.3.1 单链表的定义

什么是单链表?

用代码定义一个单链表 

(利用typedef简化数据类型的名字) 

 强调这是一个单链表——使用LinkList

 强调这是一个结点——使用LNode*

不带头结点 的单链表 :

(L = NULL 防止脏数据 )

带头结点的单链表:

 (头节点不存储数据)

知识回顾与重要考点:

 

2.3.2-1单链表的插入和删除

按位序插入(带头结点):
ListInsert(&L,i,e):插入操作。在表L中的第i个位置上插入指定元素e。

需要找到第i-1个结点,将新节点插到其后。

 (最好时间复杂度O(1),最坏时间复杂度O(n),平均时间复杂度O(n))

按位序插入(不带头结点):

(与带头结点的插入的区别就是表首插入时头指针的改变)

指定结点的后插操作:

指定结点的前插操作:
方法一:循环查找p的前驱结点q,再对q后插,时间复杂度O(n)

方法二:

(时间复杂度O(1),我愿称之为偷天换日) 

位序删除(带头结点)

ListDelet(&L,i,&e):删除操作。删除表L中第i个位置的元素,并且用e返回元素的值。

 指定结点的删除:

 (我惊呆了 ,不过这个有bug,万一是删除最后一个结点,只能遍历)

知识回顾与重要考点:

 

2.3.2-2 单链表的查找

按位查找:

 (平均时间复杂度O(n))

封装(基本操作)的好处:

避免重复代码,简洁,易维护

 按值查找:

 

求表的长度:

 

知识回顾与重要考点:

 

2.3.2-3 单链表的建立

如果给你很多元素,你怎怎么把它们存到单链表内呢

第一步:初始化一个单链表

第二部:每次取一个数据元素,插入到表尾/表头

尾插法建立单链表:

(每次都要从表头遍历到最后一个结点,时间复杂度为O(n^2))

为了节约时间,可以申请一个表尾指针:

 

头插法建立单链表:

头插法的链表逆置是非常重要的应用。

建议:本章所有的建立方法都是有头结点的,可以思考一下无头结点的实现算法。


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值