首页 > 编程知识 正文

静态链表和数组的区别,哈希表数据结构

时间:2023-05-05 16:14:40 阅读:31821 作者:196

今天,以下两个最基本的数据结构——数组和链表无处不在! 那么,让我来介绍他们吧。 首先,让我们了解内存分配。

假设内存的结构是去看演出,需要寄存行李。 寄存处有柜子,柜子里有很多抽屉。

每个抽屉都可以放同样的东西。 你寄存了两件东西,所以我拿到了两个抽屉。

现在可以去看演出了哦! 这大概就是计算机内存的工作原理。 计算机就像许多抽屉的集合体,每个抽屉都有地址。

fe0ffeeb是存储器单元的地址。 如果需要将数据存储在内存中,请要求计算机提供存储空间,然后计算机提供存储地址。 如果需要存储多个数据,有两种基本方法: ——数组和链表。 但是,并不是所有的情况都适用,所以知道差异很重要。 接下来,我们将介绍数组和链表,以及它们的优缺点。

数组是如何存储在内存中的? 例如,将待办事宜存储在数组中。 使用数组意味着所有待办事项都在内存中连接。

现在假设你要添加第四个待办事项,但后面的抽屉里放着别人的东西!

这就像你和朋友(假设三个人)去看电影,找个地方坐下后又来了一个朋友,但原来坐的地方没有空)你们四个人想坐在一起),另一个人都想找个可以坐的地方。 在这种情况下,必须请求计算机重新分配可存储在四个位置的内存。 如果朋友又来了,现在坐的地方没有空位的话,就必须再移动一次! 真的很麻烦。 同样,向数组中添加新元素可能也很麻烦。 没有空间后,添加新元素的速度会变慢,因为需要移动到内存的其他位置。 如果在数组中间插入待办事项,就会“买茶”

如果没有足够的空间,可能需要将整个数组复制到其他位置,就像这样! 要删除待办事项,必须在删除后将所有后续元素向前推进,这需要很长时间! 那么排列有好处吗? 好处在哪里? 请看下图中五个元素的数组:

如果只需要执行简单的数学运算,并且需要随机导入元素,则可以在数组中的任何元素中快速找到该元素,从而表明数组非常高效。

链表的元素可以存储在内存的任何地方。 链表中的每个元素都包含以下元素的地址,并连接一系列随机的内存地址:

这就像寻宝游戏。 去第一个地址,有个便条写着“下一个要素的地址是123”。 因此,去地址123的话,那里有写着“下一个要素的地址是847”的笔记。 向链表中添加元素很容易。 只需放入内存中,并将该地址保存到上一个元素中。 使用链表时,不需要移动元素。 这还可以避免别的问题。 假设你和五个朋友去看受欢迎的电影。 你们六个人想坐在一起,但是看电影的人很多,没有六个在一起的座位。 使用数组可能会遇到这种情况。 假设为数组分配10,000个位置。 内存有10,000个位置,但并不是全都靠在一起。 在这种情况下,不能为数组分配内存。 链表相当于说“我们分开坐”。 因此,只要有足够的内存空间,就可以为链表分配内存。

链表有缺点吗?

读取链的最后一个元素时,不能直接读取。 要说为什么,那是因为我不知道那个地方。 必须首先访问元素#1,从那里获取元素#2的地址,然后访问元素#2,从那里获取元素#3的地址,以相同的方式访问最后一个元素。 如果需要同时读取所有元素,则读取链表会更有效率。 读取第一个元素,根据其中的地址读取第二个元素等。 但是如果需要跳,链表的效率真的很差。

使用链表时,插入元素很容易。 只需更改上一个元素指向的地址。 如果使用数组,则必须将后面的元素向后移动。 因此,如果需要在中间插入元素,建议使用链表。 从链表中删除元素时,只需更改前一个元素指向的地址。 如果使用数组,则必须在删除元素后向前移动后续元素。

总结数组和链表操作的执行时间。

数组和链表中哪个使用得更多? 显然要看情况。 但是,数组由于支持随机访问,所以使用得很多。 有随机访问和顺序访问两种方法。 顺序访问意味着从第一个元素开始一个个读取元素。 链表只能按顺序访问。 要读取链表中的第十个元素,请读取前九个元素,然后沿着链接找到第十个元素。 随机访问意味着可以直接跳转到第十个元素。 本书常说数组的读取速度很快。 这是因为支持随机访问。 因为要求随机访问的情况很多,所以使用了很多数组!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。