何语柒链表经验分享

链表经验分享

一、 指针

指针在c语言中常用来表示内存地址,或称指针指向了内存地址。指针变量的类型应与指针所指向的变量类型益智,指针所指向的变量类型不同,其所占用的内存大小也不同。

二、 单向链表

1、基本构成

计算机的常见储存结构有顺序存储和链式存储,一个由数组实现, 一个由链表实现。

结构类型 特点 优点1 优点2 缺点1 缺点2
顺序存储结构 连续地址存放,逻辑关系与物理关系相同 操作方便,随机存取,查找元素复杂度为O(1) 需要预先开辟数组空间,大小不好把控 插入或删除元素不便,时间复杂度为O(n)
链式存储结构 用一组非连续的存储单元存储结点数据,长度不定 存储空间是动态分配的,一般不会发生溢出 插入或删除元素方便,时间复杂度为O(1) 查找元素不方便,遍历复杂度为O(1)

单向链表结点的构成结构

数据域(存储元素本身) 指针域(指向下一个结点) 78x40 数据域(存储元素本身) 指针域(指向下一个结点)

链表中的第一个结点称为头结点(head),最后一个结点称为尾结点(tail头结点一般不储存数据,尾结点指针指向空。

图中的链表每个结点都只包含一个指针域,所以称为单链表。

2、构建单链表

  1. 定义结构体存储结点信息:

  1. 创建头结点和尾结点,头结点起带头作用,尾结点用于添加新结点:

  1. 创建多个新结点,依次链接到尾结点后

3、单链表操作

  1. 打印单链表:

  1. 查找链表元素:

  1. 删除结点:

  1. 插入结点:

三、 循环链表

单向循环链表是另一种形式的链式存储结构,特点为表中最后一个结点的指针指向头结点,链表形成闭环。

实现代码:

四、 双向链表

1、基本构造

双向链表每个结点有两个指针域和若干数据域,其中在前的指针域指向它前面的结点,在后的指针域指向它后面的结点。优点是访问、插入、删除更方便,速度也快了,但是以空间换时间。

2、构建双向链表:

3、双向链表的操作:

  1. 删除结点:

  1. 插入结点:

五、 数组模拟实现双链表

通常,链表的指针写法会出现在初赛的选择题中,而代码实现会使用数组模拟的方式。

双链表的一个节点包括节点的值、节点的left指针、节点的right指针。

left指针存储该节点的左侧节点的下标; right指针存储该节点的右侧节点的下标。

数组e、数组1和数组r通过下标相等,每三个关联作为一个完整的节点,即e[2]、1[2]、[2]; e[3]、 [[3]、 r[3]; e[4]、[[4]、 r[4] …

代码片段:

  1. 初始化:

  2. 插入操作:

z

  1. 删除操作:

六、 例题

题目描述:

代码示例:

2 个赞