🌈hello,你好鸭,我是Ethan,一名不断学习的码农,很高兴你能来阅读。
✔️目前博客主要更新Java系列、项目案例、计算机必学四件套等。
🏃人生之义,在于追求,不在成败,勤通大道。加油呀!
🔥个人主页:Ethan Yankang
🔥专栏:史上最强八股文||数据结构与算法
🔥温馨提示:划到文末发现专栏彩蛋 点击这里直接传送
🔥本篇概览:详细讲解了数组的局限性以及链表的的内存形式及特点。🔥
【计算机领域一切迷惑的源头都是基本概念的模糊,算法除外】
目录
🌈序言
这是数据结构篇章,计算机程序=数据结构+算法。
数据结构是计算机科学中最基础的概念及基本构成元素。
这句话没说错,以后我是要长攻算法的,此乃长志,数据结构的知识必须扎实,所以重新观看B站的印度顶级程序员的数据结构免费课程,这里将网址附上,同时感谢伟大程序员Harsha Suryanarayana为世界留下如此优美的作品。
所有数据结构与算法将整理在此,点击查看。
🌈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项目(含源码深度剖析)
🌈🌈黑马头条(微服务) 关注走一波💕💕
🌈🌈黑马点评(redis) 关注走一波💕💕
🌈🌈计算机四件套
🌈🌈计算机基础 关注走一波💕💕
🌈🌈计算机基础 关注走一波💕💕
🌈🌈计算机网络 关注走一波💕💕
🌈🌈数据结构与算法 关注走一波💕💕
🌈🌈算法
🌈🌈leetcode 关注走一波💕💕
🌈🌈剑指offer 关注走一波💕💕
🌈🌈必知必会工具集 关注走一波💕💕
🌈🌈书籍网课笔记汇总
🌈🌈CSAPP笔记 关注走一波💕💕
🌈🌈计算机科学速成课 关注走一波💕💕
🌈🌈CS自学指南 关注走一波💕💕
🌈🌈读书笔记与每日记录 关注走一波💕💕
🌈🌈考试复习资料 关注走一波💕💕
🌈🌈C/C++技术栈 关注走一波💕💕
🌈🌈GO技术栈 关注走一波💕💕