数据结构——B站版P3——链表基本介绍

 🌈hello,你好鸭,我是Ethan,一名不断学习的码农,很高兴你能来阅读。

✔️目前博客主要更新Java系列、项目案例、计算机必学四件套等。
🏃人生之义,在于追求,不在成败,勤通大道。加油呀!

🔥个人主页:Ethan Yankang
🔥专栏:史上最强八股文||数据结构与算法

🔥温馨提示:划到文末发现专栏彩蛋   点击这里直接传送

🔥本篇概览:详细讲解了数组的局限性以及链表的的内存形式及特点。🔥


【计算机领域一切迷惑的源头都是基本概念的模糊,算法除外】


目录

🌈序言

🌈1.书接上回

🌈2.引出链表

⭕2.1内存管理器

⭕2.2内存的分配过程

⭕2.3数组的局限性

🌈3.链表

⭕3.1链表的内存形式

⭕3.2链表表示


🌈序言

这是数据结构篇章,计算机程序=数据结构+算法。

数据结构是计算机科学中最基础的概念及基本构成元素。

这句话没说错以后我是要长攻算法的,此乃长志,数据结构的知识必须扎实,所以重新观看B站的印度顶级程序员的数据结构免费课程,这里将网址附上,同时感谢伟大程序员Harsha Suryanarayana为世界留下如此优美的作品。

所有数据结构与算法将整理在此,点击查看。

代码随想录系列——完整整理-CSDN博客


🌈1.书接上回

上节课说到数组的静态实现链表对内存很不友好,所以这里就直接引出链表的动态实现。

🌈2.引出链表

⭕2.1内存管理器

回到原来的介绍,内存是一种宝贵的资源,所有应用程序都要申请内存,计算机已经将申请内存的工作交给了它的组成部分,一个叫内存管理器的“人”(实质是一个程序),他一直跟踪那些内存是空闲的,哪些是已分配的,任何需要内存储存的“人”(实质就是应用程序),都需要和他交谈。

程序员Albert构建应用程序的一部分如下:

⭕2.2内存的分配过程

int x;  他想申请一块内存存储一个整数,他通过申明将其传达给内存管理器,内存管理器便给他开辟一块4字节的空间,假如这个内存是217(首字节的地址作为整个空间的地址),内存管理器便将217这个地址传回给应用程序,表明为你开辟的存储空间地址是217,你可以在这里存入任何你想存的整数。(假设之后存入了8,即x=8;)

int A[4]; 因为数组总是连续存储的,所以内存管理器会为A开辟一块连续的空间,同时类似于A[3]=2;的操作,内存管理器也知道是在"首地址上+索引x下标"的地址处来填写相应的数据。

这都是因为数组的连续存储的特性的优势。

【内存管理器】

⭕2.3数组的局限性

但是现在如果这样的话,数组再扩容时,遇到前面的地址已经被变量x占用了,导致了数组的不连续,所以这里内存管理器就会重新寻找一块足够大的地址复制旧数据进新地址处。变换如下:

【重新排列数组】

这带来两个问题——

1.多次复制、释放内存,导致效率低下。

2.新分配内存过小不足以容纳,过大浪费空间。

用链表可以完美解决之。

🌈3.链表

⭕3.1链表的内存形式

 一次只申请一个内存单元,而且所申请的内存单元常常不相邻。

比如上面的数组内容,在链表的重新数据组织之下变成这样的非连续形式——

【未完善版】

因为是非连续的,所以需要知道不同元素之间的联系,所以每个元素除了储存数据本身之外,还必须存储指向下一个元素的指针。这样依次相连,就像链表一样——

【完整版链表内存实现】

这是抽象表示模式

【插入】

⭕3.2链表表示

链表节点Node的表示

C语言/C++

typedef struct Node {
    int data;
    struct Node *next;
} Node;

JAVA

public class Node {
    // 下一个节点
    public Node next;
    // 当前节点的数据
    public String data;

    public Node(String data) {
        this.data = data;
        this.next = null;
    }
}



📣非常感谢你阅读到这里,如果这篇文章对你有帮助,希望能留下你的点赞👍 关注❤收藏✅ 评论💬,大佬三连必回哦!thanks!!!
📚愿大家都能学有所得,功不唐捐!

👇下面是专栏彩蛋系列,你会喜欢的!👇


💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖

热门专栏推荐

🌈🌈计算机科学入门系列                     关注走一波💕💕

🌈🌈CSAPP深入理解计算机原理        关注走一波💕💕

🌈🌈微服务项目之黑马头条                 关注走一波💕💕

🌈🌈redis深度项目之黑马点评            关注走一波💕💕

🌈🌈Java面试八股文系列专栏            关注走一波💕💕

🌈🌈算法leetcode+剑指offer              关注走一波💕💕


总栏

🌈🌈​​​​​​JAVA后端技术栈                          关注走一波💕💕  

🌈🌈JAVA面试八股文​​​​​​                          关注走一波💕💕  

🌈🌈JAVA项目(含源码深度剖析)    关注走一波💕💕  

🌈🌈计算机四件套                               关注走一波💕💕  

🌈🌈算法                                        ​​​​​​     ​关注走一波💕💕  

🌈🌈必知必会工具集                           关注走一波💕💕

🌈🌈书籍网课笔记汇总                       关注走一波💕💕  

🌈🌈考试复习资料                              关注走一波💕💕  

🌈🌈C/C++技术栈                              关注走一波💕💕  

🌈🌈GO技术栈                                   关注走一波💕💕  


分栏

🌈🌈JAVA后端技术栈

🌈🌈spring                                      关注走一波💕💕         ​

🌈🌈redis                                        关注走一波💕💕

🌈🌈MySQL                               ​​​     关注走一波💕💕 

🌈🌈mybatis                        ​​​​     ​​​​      关注走一波💕💕

🌈🌈mybatisplus                           关注走一波💕💕

🌈🌈MQ                                          关注走一波💕💕

🌈🌈微服务                                     关注走一波💕💕

🌈🌈设计模式                                 关注走一波💕💕

🌈🌈分布式锁                                 关注走一波💕💕


🌈🌈JAVA八股文

JAVA面试八股文(redis、MySQL、框架、微服务、MQ、JVM、设计模式、并发编程、JAVA集合、常见技术场景)

                                                        关注走一波💕💕    

🌈🌈史上最强JAVA八股文(强烈推荐)            

                                                        关注走一波💕💕                                   


🌈🌈JAVA项目(含源码深度剖析)

🌈🌈黑马头条(微服务)             关注走一波💕💕

🌈🌈黑马点评(redis)               关注走一波💕💕


🌈🌈计算机四件套

🌈🌈计算机基础                           关注走一波💕💕

🌈🌈计算机基础                           关注走一波💕💕

🌈🌈计算机网络                           关注走一波💕💕

🌈🌈数据结构与算法                    关注走一波💕💕


🌈🌈算法

🌈🌈leetcode                              关注走一波💕💕

🌈🌈剑指offer                             关注走一波💕💕


🌈🌈必知必会工具集                   关注走一波💕💕


🌈🌈书籍网课笔记汇总

🌈🌈CSAPP笔记                        关注走一波💕💕

🌈🌈计算机科学速成课               关注走一波💕💕

🌈🌈CS自学指南                        关注走一波💕💕

🌈🌈读书笔记与每日记录           关注走一波💕💕


🌈🌈考试复习资料​​​​​​​                      关注走一波💕💕


🌈🌈C/C++技术栈                      关注走一波💕💕                           


🌈🌈GO技术栈                          关注走一波💕💕                                                    


  • 29
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值