数据结构(一) 数组与链表

121 阅读2分钟

这是我参与11月更文挑战的第25天,活动详情查看:2021最后一次更文挑战

前言

大家好,又到了双休日放假,大家都在放假就我在加班的世界达成了。本篇章开启一个新的栏目为数据结构,数据结构为计算机的看家本领,这是大厂面试必不可少的基础,也是每个程序的底层应用。

image.png

内存碎片

在讲数组与链表之前先给大家讲一下内存碎片,内存碎片指的是当对象被回收掉但是那篇空间的大小被分配了但是不会重置,他还是以上一个被回收的对象大小为空间占用,内存碎片不好的地方在于如果你的两个内存碎片为1kb大小但是你分配的对象为2kb对象那么你的2kb对象因为两个内存碎片的原因不能存储在内存中,是不允许拆开保存的。

数组

数组一个在内存中拥有连续空间的对象,重点是连续哦,这就保证了它在内存中的分布是不会产生内存碎片的,数组的结构是拥有索引这个概念,通过索引可以快速访问制定位置元素。

数组的特点:

  1. 查找快,得益于索引的存在,数组可以快速访问到指定对象
  2. 增删慢,由于其连续性的特点,所以必须要在内存中保持连续性,这就导致了数组每次增加或者删除都需要新建一个新的数组,这个新的数组比原数组长,然后把旧数据放入到新数组中。删除就是新建一个短数组,然后把数据放入短数组中。

链表

链表是一个不规律的结构,一个链表可以有多个节点,每个节点通过地址来连接彼此,类似于多个人手拉手,第一个人拉右边的收,右边的拉下一个的收,多个人就连接在一起了,这样的好处就是增删改很方便,但是缺点是会有大量的内存碎片产生

链表的特点

  1. 有多个节点,每个节点有数据与指针域,指针域指向下一个地址
  2. 查找慢,想要查找某个元素需要通过连接的节点依次向后查找
  3. 增删快,只需要更改元素的指针域即可