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

news2024/12/24 2:17:27

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

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

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

课程视频链接:

数据结构与算法基础–第3周11–2.5线性表的链式表示和实现11–单链表基本操作9–查找插入删除算法分析

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

📚 【Week03】11_线性表的链式表示和实现10

单链表查找插入删除算法分析

【查找算法】

【算法描述】按值查找:根据指定数据,获取该数据地址(返回地址)
// 在线性表 L 中查找值为 e 的数据元素
// 找到,则返回 L 中值为 e 的数据元素的地址
// 查找失败,返回 NULL
Lnode *LocateElem_L(LinkList L, ElemType e){
	// 初始化
    p = L->next;
    // 依次向后扫描
    while(p && (p->data!= e)){
        p = p->next;
    }
    
    return p;
}
【算法描述】按值查找:根据指定数据,获取该数据位置序号(返回位置)
// 在线性表 L 中查找值为 e 数据元素的位置序号
// 找到,则返回 L 中值为 e 的数据元素的位置序号
// 查找失败,返回 NULL
int LocateElem_L(LinkList L, ElemType e){
	// 初始化
    p = L->next;
    j = 1;
    // 依次向后扫描
    while(p && (p->data!= e)){
        p = p->next;
        j++;
    }
    if(p){
        return j;
    }
    else{
        return 0;
    }
}

【插入算法】

在这里插入图片描述

【算法描述】
// 在线性表 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

【删除算法】

在这里插入图片描述

【算法描述】
// 将线性表 L 中第 i 个数据元素删除
Status ListDelete_L(LinkList &L, int i, ElemType &e){
	// 初始化
    p = L;
    j = 0;
    // 寻找第 i-1 个结点,并令 p 指向其前驱
    while(p->next && (j<(i-1))){
        p = p->next;
        ++j;
    }
    // 删除位置是否合理判断
    if(!p->next || (j>(i-1))){
        // 第 i 个元素不存在
        return ERROR;
    }
    // 临时保存被删除结点的地址,以备释放
    q = p->next;
    // 改变删除结点前驱结点的指针域
    p->next = q->next;
    // 保存删除结点的数据域
    e = q->data;
	// 释放删除结点的空间
    delete q;
    
    return OK;
}// ListDelete_L

📌总结

(1) 查找算法

因线性链表只能顺序存取,即在查找时要从头指针找起,查找的时间复杂度为 O(n)。

(2) 插入和删除

因线性链表不需要移动元素,只要修改指针,一般情况下时间复杂度为 O(1)。

但是,如果要在单链表中进行前插和删除操作,由于要从头查找前驱结点,所耗时间复杂度为 O(n)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/711317.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

f(x)*g(x)的问题——C的缺陷

整理一道颇具争议的题目 #include<stdio.h> #define Mul(x,y) x*y int main() { int a1,b2,c3; printf("%d",Mul(ab,bc)); }关于这道题目&#xff0c;根据不同的编译器&#xff0c;答案会出现两种答案 11和14&#xff0c;见下面&#xff1a; 关于dev C: 关于…

【前端面试手册】CSS系列-回流与重构

本专栏收录于前端面试手册-CSS系列如果该文章对您有帮助还希望你能点一个小小的订阅&#xff0c;来增加博主创作的动力✍&#x1f3fb;话不多说开始进入正题 回流和重构在前端CSS中是一个常见的问题&#xff0c;那么你对回流何重构有哪些了解呢&#xff1f; 一、什么场景下会触…

Vulnhub: EvilBox:One靶机

kali&#xff1a;192.168.111.111 靶机&#xff1a;192.168.111.130 信息收集 端口扫描 nmap -A -sC -v -sV -T5 -p- --scripthttp-enum 192.168.111.130 secret目录爆破 feroxbuster -k -d 1 --url http://192.168.111.130/secret/ -w /opt/zidian/SecLists-2022.2/Disco…

【深度学习推荐系统 工程篇】二、从TF-Serving看生产环境的模型推理服务

前言 模型训练完成后&#xff0c;到在线部署是其所必须要做的一步&#xff0c;伴随模型结构复杂/算力增加&#xff0c;打造低延时/低资源占用的模型预测服务是模型上线的关键&#xff1b; tensorflow 很早就开源了tf-serving&#xff08;代码连接&#xff1a;https://github.…

Pygame中获取键盘按键的方法

1 事件与队列 在Pygame中&#xff0c;将用户对游戏的操作叫做“事件”。键盘按键是一种事件&#xff0c;鼠标点击和游戏手柄的输入也是一种事件。在Pygame的子模块locals中&#xff0c;对这些事件进行了定义。当用户通过键盘、鼠标或者游戏手柄对游戏进行操作后&#xff0c;产…

Bootstrap 代码

文章目录 Bootstrap 代码更多实例实例1实例2实例3&#xff0c;4实例5实例6 Bootstrap 代码 Bootstrap 允许您以两种方式显示代码&#xff1a; 第一种是 <code> 标签。如果您想要内联显示代码&#xff0c;那么您应该使用 <code> 标签。第二种是 <pre> 标签。…

mysql 创建用户(修改用户访问数据库权限,被外界IP访问权限)

我们执行,下面代码&#xff1a; select user,host from mysql.user;生成表: 这里面存放我们所有的用户&#xff0c;user 表示用户名, host表示 能被访问的IP范围。 1.修改用户能被访问的范围 # "%" 表示,能被所有IP访问。 update mysql.user set host "%&q…

力扣 538. 把二叉搜索树转换为累加树 1038. 从二叉搜索树到更大和树

题目来源&#xff1a; 538&#xff1a;https://leetcode.cn/problems/convert-bst-to-greater-tree/description/ 1038&#xff1a; https://leetcode.cn/problems/binary-search-tree-to-greater-sum-tree/description/ C题解1&#xff1a;递归法。二叉搜索树由大到小&#…

CST仿真半波偶极子天线学习笔记

CST仿真半波偶极子天线 文章目录 CST仿真半波偶极子天线1. 新建工程模板2.建模3. 激励方式设置4. 求解器设置5. 仿真分析6. 数据后处理 设计要求&#xff1a; 谐振频率为3.48GHz&#xff0c;基板采用Rogers RT5880板材&#xff0c;介电常数2.2&#xff0c;损耗角正切0.0009&…

Git学习笔记(三)

导航小助手 五、远程操作 5.1 理解分布式版本控制系统 5.2 远程仓库 5.2.1 新建远程仓库 5.2.2 克隆远程仓库 5.2.3 向远程仓库推送 5.2.4 拉取远程仓库 五、远程操作 5.1 理解分布式版本控制系统 前面博客所介绍的 关于 Git 的内容&#xff08;比如说&#xff1a;工作…

输入和输出处理

目录 1.File类 2.流 2.1.InputStream 2.2.OutputStream 总结 内容仅供学习交流&#xff0c;如有问题请留言或私信&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 有空您就点点赞 1.File类 文件&#xff1a;相关记录或存放在一起的数据的集合 Java程序如…

高考考了657分想重新复读一年,又害怕白费一年

高考考了657分想重新复读一年&#xff0c;又害怕白费一年。 如果你想重新复读一年&#xff0c;可能需要考虑到以下几点&#xff1a; 复读的代价&#xff1a;复读需要花费一年的时间和精力&#xff0c;而且这个过程中你可能会面临很多挑战和压力&#xff0c;包括学习上的、生活上…

多模态之论文笔记BEiT, BEiT V2, BEiT V3

文章目录 OverviewBEiT1.0. Summary1.1. BEiT VS BERT2.1. Two Views: visual tokens2.1. Two Views: image patches3. Results BEiT V21.0. Summary1.1. Motivation2.1. Methods -- VQ-KD2.2. Methods -- patch aggregation3.1. Results -- image classification & semant…

ChatGPT Plugins内幕、源码及案例实战(二)

第6章 ChatGPT Plugins内幕、源码及案例实战 检索插件的API需要以下环境变量才能工作,如表6-2所示。 ChatGPT检索插件示例中,“.well-known”目录里面的ai-plugin.json是一个插件的说明文档,插件名为Retrieval Plugin,用于搜索用户的文档(如文件、电子邮件等),该插件…

HDLbits--Exams/review2015 fsm

示例&#xff1a; 题目的主要意思是&#xff1a;复位之后寻找1101序列&#xff0c;找到之后shift ena在四个周期内为1&#xff0c;此后输出counting&#xff0c;如果done-counting0&#xff0c;则counting一直为1&#xff0c;直到done-counting1&#xff0c;counting才为0&…

Redis高可用——持久化

Redis高可用——持久化 一、Redis 高可用的相关知识1、什么是高可用2、Redis的高可用技术3、持久化的功能4 redis持久化的方式 二、RDB持久化1、RDB持久化的触发方式①.手动触发②.自动触发③.其他自动触发机制 2、bgsave执行流程3、启动时加载 三、AOF持久化1.开启AOF2.执行流…

RSUYZM9智能路侧终端使用说明书

1 产品概览 本说明 书适用于 RSUYZM8型及 RSUYZM9型智能路侧终端 产品 。智能路 侧终端 作为智能 车路协同系统 路侧的基础 设备&#xff0c; 是车载设备和路口 所有 设备的 汇 聚点&#xff0c;路侧设备和车载之间 通过 LTE-V进行 信息交互 。同时 &#xff0c;智能路侧终 端还…

【JavaWeb】JavaScript的基础语法

目录 1、JS简介 1.1、JavaScript的运行过程 1.2、了解浏览器的开发人员工具 2、JavaScript的书写形式 2.1、行内式 2.2、内嵌式 2.3、外部式 3、JavaScript的输入输出函数 4、JavaScript语法 4.1、变量声明 4.1.1、动态类型 4.2、基本数据类型 4.2.1、数字类型 4.…

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

本文是个人学习笔记&#xff0c;素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享&#xff0c;另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权&#xff0c;请留言作删文处理。 课程视频链接&#xff1a; 数据结构与算法基础–…

C++数据结构笔记(6)栈的链式存储结构

对于栈的链式存储结构&#xff0c;实现原理本质上是受限的链表&#xff1b;此外与顺序存储不同的是&#xff0c;链式结构选用左边&#xff08;头结点&#xff09;作为栈的顶部&#xff0c;这样的好处是只要找到头结点即可实现插入元素等操作。 LinkStack.h头文件 #ifndef LIN…