IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数组与链表 -> 正文阅读

[数据结构与算法]数组与链表

1.知识点

1.内存的工作原理
2.数组与链表的原理
3.链表的几种形式
4.数组与链表的优缺点

2.内存的工作原理

计算机就像是很多抽屉的集合体,每个抽屉都有地址。

?需要将数据存储到内存时,你请求计算机提供存储空间,计算机给你一个存储地址。需要存储多项数据时,有两种基本方式——数组和链表。

3.数组

?数组(Array)是有序的元素序列。组成数组的各个变量称为数组的分量,也称为数组的元素
?数组的元素带编号,编号从0而不是1开始
?元素的位置称为索引

?假设你要编写一个管理待办事项的应用程序,

为此需要将这些待办事项存储在内存中
?我们首先尝试使用数组,所有待办事项在内存中都是相连的。

?假设你要添加第四个待办事项,但后面的那个抽屉放着别人的东西
?此时你需要请求计算机重新分配一块可容纳4个待办事项的内存,

再将所有待办事项都移到那里

??从这个例子可以看出来 数组存储比较麻烦

4.链表

与数组相比链表的主要区别在于其中的元素可存储在内存的任何地方。(存在head 和 tail)

链表的每个元素都存储了下一个元素的地址,从而使一系列随机的内存地址串在一起。

在链表中添加元素很容易:只需将其放入内存,并将其地址存储到前一个元素中。

4.1链表的几种形式

?

?1.单向链表:

单向链表也叫单链表,是链表中最简单的一种形式,

它的每个节点包含两个域,一个信息域(储存元素)elem和一个链接域next。这个链接指向链表中的下一个节点,

最后一个节点的链接域则指向一个空值。

2.单向循环链表:

单链表的一个变形是单向循环链表,链表中最后一个节点的链接域不再为None,而是指向链表的头节点。

3.双向链表:

?一种更复杂的链表是“双向链表”或“双面链表”。

每个节点有两个链接:一个指向前一个节点,当此节点为第一个节点时,指向空值而另一个指向下一个节点,当此节点为最后一个节点时,指向空值。第一个head和最后一个的next?

5.数组和链表进行比较


5.1?查找元素

需要查找元素时,数组往往更加便捷。例如我们想要查找当日的第三个事项。在数组中我们只要按照索引2即可查到,而在链表中我们要从头开始搜索,因为我们不知道下一个事项的存储位置。

5.2 插入元素

需要在中间插入事项时,数组和链表哪个更好呢?

1.使用链表时,插入驶向很简单,只需修改它前面的那个事项指向的地址。找个地方储存一个新的元素,可以把原来的地址改成现在新的?

2.而使用数组时,则必须将后面的元素都向后移
如果没有足够的空间,可能还得将整个数组复制到其他地方!因此,当需要在中间插入元素时,链表是更好的选择。

5.3删除元素

如果你要删除元素呢?链表也是更好的选择,因为只需修改前一个元素指向的地址即可。而使用数组时,删除元素后,必须将后面的元素都向前移。不同于插入,删除元素总能成功。如果内存中没有足够的空间,插入操作可能失败,但在任何情况下都能够将元素删除。

下面是常见数组和链表操作的运行时间
需要指出的是,仅当能够立即访问要删除的元素时,链表删除操作的运行时间才为O(1)

6.数组和链表的优缺点

?1.数组的优点
?内存空间占用的少
?数组内的数据可随机访问
2.数组的缺点
?增添元素困难,增添后需要移动数组内所有元素的位置
?预留内存易造成浪费,例如在之前的情境中,可以提前请计算机提供10个位置。但你额外请求的位置可能根本用不上,这将浪费内存

3.链表的优点
?可动态添加删除? 大小可变
?链表是分散的内存空间地址,相比数组可扩展性更好
4.链表的缺点
?链表内的元素不具备随机访问性
?链表节点会附加上一元素或下一个元素的信息。但是数组在建立时就固定了,因此链表内存空间占用更多

? ? ? ? ? ? ? ? ? ? ? ? ? ??

7.具体代码可以看接下来这些内容

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-09-04 01:36:44  更:2022-09-04 01:39:58 
 
开发: 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年5日历 -2024/5/19 16:34:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码