arrays - 链表与数组(已实现?)
问题描述
数组是与链表不同的数据结构,对吧?或者我可以使用数组实现链表?我对这个话题有点困惑,如果你能帮助我,我将不胜感激。谢谢!
解决方案
数组是与链表不同的数据结构,对吧?
是的,数组和链表是不同的数据结构。
链表:
链表是数据元素的线性集合,其顺序不是由它们在内存中的物理位置给出的。相反,每个元素都指向下一个元素。它是一种数据结构,由一组节点组成,这些节点一起表示一个序列。
假设您有这样定义的节点结构(在示例中使用 C 语言结构):
struct Node
{
int data;
struct Node *next;
};
链表的每个节点都有一个整数和一个指向其下一个节点的指针,该指针用于访问链表的下一个成员(最后一个节点的下一个指针设置为NULL
)。内存中的视图将是这样的:
--------- --------- --------- ---------
| 1 | -|--->| 2 | -|--->| 3 | -|--->| 4 | -|--->NULL
--------- --------- --------- ---------
它提供了在列表中任何位置插入/删除元素的灵活性,您只需要设置/重置节点的下一个指针。缺点是需要顺序遍历才能访问其节点。
数组:
数组数据结构,或简称数组,是由一组元素(值或变量)组成的数据结构,每个元素由至少一个数组索引或键标识。
假设您有 5 个整数的数组(在示例中使用 C 语言构造):
int arr[5] = {0}; // array of 5 integer initialized with 0
内存中的视图将是这样的:
index 0 1 2 3 4
arr ---------------------
| 0 | 0 | 0 | 0 | 0 |
---------------------
它的优点是,您可以通过 index 直接访问数组的任何元素。例如,如果你想访问第三个元素,你可以简单地做a[2]
. 缺点是除了数组末尾之外的任何位置的数组中元素的插入/删除都不是直截了当的。为此,您可能必须对数组的几个元素进行洗牌。
或者我可以使用数组实现链表?
是的你可以。但是这样做不会有任何好处。相反,它会在您的代码中引入不必要的复杂性。检查这个。
推荐阅读
- javascript - 使用 fetch 后如何使用接收到的数据?
- sql - 遍历 SELECT 中的每一行
- laravel - 将模型实例从中间件传递到控制器的正确方法?
- css - 具有绝对定位地图的移动设备上的 Vuetify/MapBox 问题
- r - 将文本转换为 R 中的 1 个数字,并将 NA 转换为 )
- typo3 - TYPO3:在两个插件之间进行通信
- android-jetpack - 如何创建可以在应用程序的所有层中访问的全局变量。访问元素 ID 并更新
- ssis - 将位数据类型数据从 SQL 加载到 Oracle 中的数字数据类型 - SSIS
- azure - Terraform 为 linux 容器创建应用服务
- amazon-web-services - AWS 在具有多个托管区域的多个区域部署应用程序