| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 记录数据结构的学习002 -> 正文阅读 |
|
[数据结构与算法]记录数据结构的学习002 |
(此文为王道数据结构学习笔记,只供个人后续复习使用,若有错误,还望指出我改正,谢谢) 回顾上次学习内容: 数据结构的定义、类型、三要素 算法的定义、特性、以及效率评定指标:时间复杂度、空间复杂度。 时间复杂度主要看循环嵌套,空间复杂度看引入的数据结构和自我调用。 线性表的基本操作:创毁增删查改,静态分配,动态分配。 三道统考真题。 单链表: 每个结点:数据元素+指向下一个节点的指针 顺序表: 优点:随机存取,存储密度高 缺点:要求大片连续空间,不好改变容量 单链表: 优点:不要求大片连续空间,改变容量方便 缺点:不可随机存取,存指针耗费空间。 定义一个单链表:(简单定义)
更好的定义:(这样定义方便后面定义结构体和指针)
初始化一个带头结点的单链表(无后续结点): 头结点:不存放数据(data=NULL),头指针指向头结点,头结点的next指向下一个结点,若无下一个结点,即为NULL。
头插法建立单链表: 生成新结点,存放数据后,将之插入到表头,但是仍然在头结点后,头结点的next此时指向该新结点
头插法建立单链表,其中读入数据的顺序与生成链表的元素顺序是相反的,即(除了头结点)单链表第一个结点存的是最后一个读取的数据。 时间复杂度为O(n) 倘如没有引入头结点会怎么样?由于在头部插入了一个结点,导致链表第一个结点的地址变成新的地址,需要将L重新赋值,比较麻烦。 尾插法建立单链表: 头插法比较简便,但生成链表数据顺序相反,如果想要顺序保持一致,可以用尾插法建立单链表。 与头插法类似,只不过是从链表尾部插入,由于链表不具备物理上的连续,故想要知道尾结点是哪个,需要引入一个尾指针r来指示。每次生成新的结点,需要将尾结点指向该节点。
尾插法建立单链表增加了一个尾指针,故时间复杂度为n 查找结点: 按序号查找结点: 由于单链表不具备物理连续性,需要依次扫描计数来计算序号。
时间复杂度为O(n) 按照值查找结点: 只需要从第一个结点开始,一一比对数据域的值即可。
时间复杂度为O(n) 插入结点: 按序号后插入新结点: 由于想要在i号位置插入一个新结点,我们需要知道(i-1)号结点的位置,由于链表不具备物理连续性,我们需要从头开始向后通过next一个一个向后遍历,找到(i-1)号结点后,将新结点的next改为(i-1)号结点此时的next,并且将(i-1)号结点的next指向新结点地址,即可完成在i号位置插入新结点。
由于需要依次扫描,时间复杂度为O(n) 明明这两天控制情绪控制的很好。 我不知道为什么我还是忍不住的在教室里面嚎啕大哭,我真的好想你,好想你,好想听你对我说一句加油宇宇。 真的很抱歉,我还是很想你。真的好想见见你。 在楼梯过道大哭了一个小时。 真的对不起。 我浪费了一个小时陷入在这种负面情绪之中。 真的好想你。 |
|
|
上一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 18:25:57- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |