青岛大学_王卓老师【数据结构与算法】Week03_09_线性表的链式表示和实现9_学习笔记

本文介绍了王卓老师教学视频中的单链表概念,包括单链表的销毁、清空、求表长、判断空表、取值、查找、插入和删除等基本操作。重点讲解了在第i个结点前插入新结点的算法步骤,强调了找前一个结点和生成新结点的顺序重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文是个人学习笔记,素材来自青岛大学王卓老师的教学视频。

一方面用于学习记录与分享,另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。

如有侵权,请留言作删文处理。

课程视频链接:

数据结构与算法基础–第3周09–2.5线性表的链式表示和实现9–单链表基本操作7–插入节点

📚 📌 📝 🔍 ⚠️ 😊 ⭐ 🔗 👋 ❓ 💬 🔹 🔸 🔖 ❗️ 💟 ➔

📚 【Week03】09_线性表的链式表示和实现9

单链表的基本操作

(1) 单链表的销毁

(2) 清空单链表

(3) 求单链表的表长

(4) 判断单链表是否为空

(5) 取值:取单链表中第 i 个元素的内容

(6) 查找

按值查找:根据指定数据获取数据所在的位置(地址)

按值查找:根据指定数据获取数据所在的位置序号

(7) 插入:在第 i 个结点前插入新结点

(8) 删除:删除第 i 个结点

(9) 单链表的建立:头插法和尾插法

【单链表的插入】在第 i 个结点前插入值为 e 的新结点

在这里插入图片描述

【算法步骤】

在这里插入图片描述

(1) 首先找到 a_i-1 的存储位置 p。

(2) 生成一个数据域为 e 的新结点 s。

(3) 插入新结点:

  • 新结点的指针域指向结点 a_j
  • 结点 a_i-1的指针域指向新结点
❓ 思考:步骤①和②能互换吗?先执行②,后执行①,可以吗?
💬 不可以!会丢失 a_i 的地址
【算法描述】
// 在线性表 L 中第 i 个数据元素之前插入数据元素 e
Status ListInsert_L(LinkList L, int i, ElemType &e){
	// 初始化
    p = L;
    j = 0;
    // 寻找第 i-1 个结点,p 指向 i-1 结点
    while(p && (j<(i-1))){
        p = p->next;
        ++j;
    }
    // i 大于表长 +1 或者小于 1,插入位置非法
    if(!p || (j>(i-1))){
        // 第 i 个元素不存在
        return ERROR;
    }
    // 生成新结点 s,将结点 s 的数据域置为 e
    s = new LNode;
    s->data = e;
    // 将结点 s 插入 L 中
    s->next = p->next;
    p->next = s;
    
    return OK;
}// ListInsert_L
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值