梅州市网站建设_网站建设公司_导航易用性_seo优化
2025/12/24 8:20:02 网站建设 项目流程

在这里插入图片描述
(以下内容全部来自上述课程)

目录

  • 单链表的定义
    • 1. 什么是单链表
    • 2. 用代码定义一个单链表
      • 2.1 结点定义
      • 2.2 单链表定义
    • 3. 实现
      • 3.1 不带头结点的单链表
      • 3.2 带头结点的单链表
      • 3.3 对比
    • 4. 小结
  • 单链表的插入删除
    • 1. 插入
      • 1.1 按位序插入
        • 1.1.1 带头结点
        • 1.1.2 不带头结点
      • 1.2 指定结点的后插运行
      • 1.3 指定结点的前插运行
    • 2. 删除
      • 2.1 按位序删除
      • 2.2 指定结点的删除
    • 3. 小结
  • 单链表的查找
    • 1. 按位查找
    • 2. 按值查找
    • 3. 小结
  • 单链表的建立
    • 1. 尾插法
    • 2. 头插法
    • 3. 小结
  • 双链表
    • 1. 初始化
    • 2. 插入
    • 3. 删除
    • 4. 遍历
    • 5. 小结
  • 循环链表
    • 1. 循环单链表
    • 2. 循环双链表
      • 2.1 初始化
      • 2.2 插入
      • 2.3 删除
    • 4. 小结
  • 静态链表
    • 静态链表就是1. 什么
    • 2. 用代码定义一个静态链表
    • 2. 简述基本操作的完成
    • 4. 小结
  • 顺序表 vs 链表
    • 1. 逻辑结构
    • 2. 存储结构
    • 3. 基本操作
    • 4. 选择?
    • 5. 小结

请添加图片描述

单链表的定义

请添加图片描述

1. 什么是单链表

上次我们说顺序表是名单上的学号,那么单链表就是教室中的散乱的同学们按随机的座位坐好。
座位随机,就代表数据不是连续的,也就是前后桌的学号不是连在一起的,但是还是可以利用学号(这里相当于地址)找到具体同学。
请添加图片描述

2. 用代码定义一个单链表

typedef:数组类型重命名。
单链表的定义:头插法or尾插法
需要插入的东西就是结点,单链表就是好多个结点连在一起的东西,所以我们先看结点定义。

2.1 结点定义

结点=数据域+指针域;
数据域:存储它的数据元素
指针域:存储下一个结点的地址值
请添加图片描述
新结点分配空间–>头结点√
请添加图片描述

2.2 单链表定义

请添加图片描述

3. 实现

3.1 不带头结点的单链表

不带头结点,初始化单列表的时候就允许不给它分配空间。
定义结点–>初始化空单链表–>无头结点
请添加图片描述

3.2 带头结点的单链表

定义结点–>初始化空单链表–>有头结点(分配空间)
请添加图片描述

3.3 对比

更倾向带头结点的定义方法。
请添加图片描述

4. 小结

请添加图片描述

单链表的插入删除

请添加图片描述

1. 插入

1.1 按位序插入

1.1.1 带头结点

记忆:取代某个结点的位置(i),就是在这个结点之前的位置(i-1)插入新的结点。
请添加图片描述

补充:

1.1.2 不带头结点

请添加图片描述
插在表头就需要改变头指针(之前指向a1,现在指向插入的元素)

  • LNode *s =(LNode *)malloc(sizeof(LNode));:分配插入元素的内存
  • s->data =e;:表明s的数据域是元素e。
  • s->next=L;:L是头指针,所以就是L指向的下一个结点赋值给s指向的下一个结点,就是s指向a1,也就是绿线。
  • L=S;:L指向s,也就是图中的黄线。
    请添加图片描述
    假如插入之后的位置是第一个位置之后,因为没有头结点,所以每次都需要记录一下指针此时指向的是哪个结点,除此之外,其余的和头结点的插入代码一模一样。
    请添加图片描述

1.2 指定结点的后插管理

随机的,有的时候就可能分配失败。就是源于分配的空间比较随机,所以前后空间存不存在都
请添加图片描述
如果分配失败,就直接返回false;
如果分配成功(右下角):

1.3 指定结点的前插管理

指定结点的前插操作,就需要先找到他的前一个结点,然后再进行操作。
但是没办法找到前一个结点,循环太浪费时间,所以就找到此指定节点A的后一个结点B,在他们两个之间插入你想插入的结点X,然后把指定节点A和插入结点X的数据域互换一下,和指定节点的前插操作就是等价的效果。
请添加图片描述

  • ,x–>y,想变成e–>x–>y,就先变成x–>e–>y,xe互换素材域,变为e–>x–>y。就是大体思路
  • s->next=p->next;:p指向的下一个结点赋值给s指向的下一个结点(绿线)
  • p->next=s;:p指向的下一个结点变为s
  • s->data=p->data;:p的数据域赋值给s的数据域
  • p->data=e;:p的数据域变为元素e
    请添加图片描述

2. 删除

2.1 按位序删除

请添加图片描述
最终一个结点,就需要把它前一个结点指向NULL。就是若是删除的
请添加图片描述

2.2 指定结点的删除

同样,先删掉指定节点的后一个结点,然后把指定节点的数据域,改成刚刚删除的结点的数据域。
嗯,无关先后顺序,差不多这个意思。
请添加图片描述

3. 小结

请添加图片描述
请添加图片描述

单链表的查找

只讨论带头结点的情况!
请添加图片描述

1. 按位查找

如果i=0,直接返回头指针的位置。
请添加图片描述
如果i=8,也就是查找单链表长度之外的元素,会直接返回p。
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

2. 按值查找

按值查找,就是条件中用数据域进行判断。
请添加图片描述
请添加图片描述
请添加图片描述

3. 小结

请添加图片描述

单链表的建立

请添加图片描述

1. 尾插法

定义结点–>初始化单链表
请添加图片描述
带头结点的指定节点的后插操作。就是其实就
请添加图片描述
请添加图片描述
请添加图片描述

2. 头插法

逆向建立单链表,接着每次都是尾插,终于再倒过来。
请添加图片描述
请添加图片描述
请添加图片描述

3. 小结

请添加图片描述

双链表

所有操作就是比单链表多了一个prior,不再赘述。
请添加图片描述

1. 初始化

增加了一个prior,前一个结点。
请添加图片描述

2. 插入

请添加图片描述
请添加图片描述

3. 删除

请添加图片描述

4. 遍历

请添加图片描述

5. 小结

请添加图片描述

循环链表

请添加图片描述

1. 循环单链表

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

2. 循环双链表

请添加图片描述

2.1 初始化

请添加图片描述

2.2 插入

请添加图片描述

2.3 删除

请添加图片描述

4. 小结

请添加图片描述

静态链表

请添加图片描述

1. 什么是静态链表

请添加图片描述

2. 用代码定义一个静态链表

请添加图片描述
请添加图片描述

2. 简述基本操作的构建

请添加图片描述
请添加图片描述

4. 小结

请添加图片描述

顺序表 vs 链表

请添加图片描述

1. 逻辑结构

请添加图片描述

2. 存储结构

请添加图片描述

3. 基本操作

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

4. 选择?

请添加图片描述

5. 小结

请添加图片描述

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询