数组和链接列表之间的区别

作者: Laura McKinney
创建日期: 3 四月 2021
更新日期: 8 可能 2024
Anonim
1-4-03 关于arraylist和数组之间的区别
视频: 1-4-03 关于arraylist和数组之间的区别

内容


之间的主要区别 数组链表 关于他们的结构。数组是 基于索引 数据结构,其中每个元素与一个索引关联。另一方面,“链接列表”依赖于 参考资料 其中每个节点均由数据以及对上一个和下一个元素的引用组成。

基本上,数组是一组相似的数据对象,它们以共同的标题或变量名存储在顺序的内存位置中。

链表是一个包含一系列元素的数据结构,其中每个元素都链接到其下一个元素。链接列表的元素中有两个字段。一个是数据字段,另一个是链接字段,数据字段包含要存储和处理的实际值。此外,链接字段保存链接列表中下一个数据项的地址。用于访问特定节点的地址称为指针。

数组和链接列表之间的另一个显着区别是,数组具有固定的大小,需要事先声明,但链接列表不限于大小,并且在执行过程中会进行扩展和收缩。

  1. 比较表
  2. 定义
  3. 关键差异
  4. 结论

比较表

比较基础数组链表
基本的它是固定数量的数据项的一致集合。它是一个有序集合,包含可变数量的数据项。
尺寸在声明期间指定。无需指定;在执行过程中增长和收缩。
存储分配 元素位置是在编译时分配的。在运行期间分配元素位置。
元素顺序 连续存储 随机存放
访问元素直接或随机访问,即指定数组索引或下标。顺序访问,即指针从列表中的第一个节点开始遍历。
元素的插入和删除相对缓慢,因为需要换档。更轻松,快速和高效。
正在搜寻 二进制搜索和线性搜索线性搜索
需要内存更多
内存利用率无效的高效的


数组的定义

数组定义为一定数量的同类元素或数据项的集合。这意味着数组只能包含一种数据类型,即所有整数,所有浮点数或所有字符。数组的声明如下:
诠释a;
其中int指定数据类型或类型元素数组存储。 “ a”是数组的名称,方括号内指定的数字是数组可以存储的元素数,也称为数组的大小或长度。

让我们看一下关于数组要记住的一些概念:

  • 可以通过以下方式访问数组的各个元素:描述数组的名称,后跟方括号内的索引或下标(确定元素在数组中的位置)。例如,要检索数组的第5个元素,我们需要编写语句a。
  • 无论如何,数组的元素将存储在连续的存储位置中。
  • 数组的第一个元素的索引为零。这意味着第一个和最后一个元素将分别指定为a和a。
  • 可以存储在数组中的元素数,即数组的大小或其长度由以下公式给出:
    (上限-下限)+1
    对于上面的数组,它将是(9-0)+1 = 10。其中0是数组的下限,而9是数组的上限。
  • 可以通过循环读取或写入数组。如果我们读取一维数组,则需要一个循环进行读取,而另一个则需要写入(写入)该阵列,例如:
    一种。用于读取数组
    对于(i = 0; i <= 9; i ++)
    {scanf(“%d”,&a); }
    b。用于编写数组
    对于(i = 0; i <= 9; i ++)
    {f(“%d”,a); }
  • 对于二维数组,将需要两个循环,类似地,n维数组将需要n个循环。

在数组上执行的操作是:

  1. 创建数组
  2. 遍历数组
  3. 插入新元素
  4. 删除必需的元素。
  5. 元素的修改。
  6. 合并数组

以下程序说明了数组的读取和写入。


#包括
#包括
无效main()
{
int a,i;
f(“输入数组”);
对于(i = 0; i <= 9; i ++)
{
scanf(“%d”,&a);
}
f(“输入数组”);
对于(i = 0; i <= 9; i ++)
{
f(“%d n”,a);
}
getch();
}

链表的定义

链接列表是相互链接的某些数据元素的特定列表。在此,每个元素都指向代表逻辑顺序的下一个元素。每个元素称为一个节点,它有两个部分。

存储信息的INFO部分和指向下一个元素的POINTER。如您所知,为了存储地址,我们在C语言中有一个称为指针的唯一数据结构。因此,列表的第二个字段必须是指针类型。

链表的类型为单链表,双链表,循环链表,循环双链表。

在链接列表上执行的操作是:

  1. 创建
  2. 遍历
  3. 插入
  4. 删除中
  5. 正在搜寻
  6. 级联
  7. 显示

以下代码段说明了链接列表的创建:

结构节点
{
整数
stuct节点* next;
}
开始= NULL;
无效create()
{
typedef结构节点NODE;
NODE * p,* q;
字符选择
first = NULL;

{
p =(NODE *)malloc(sizeof(NODE));
f(“输入数据项 n”);
scanf(“%d”,&p-> num);
如果(p == NULL)
{
q =开始;
而(q-> next!= NULL)
{q = q->下一个
}
p->接下来= q->接下来;
q-> = p;
}
其他
{
p->下一步=开始;
开始= p;
}
f(“是否要继续(键入y或n)? n”);
scanf(“%c”,&choice);
}
while(((choice == y)||(choice == Y)));
}

  1. 数组是指数据结构包含相似类型的数据元素的集合,而链接列表被视为非原始数据结构,其中包含称为节点的无序链接元素的集合。
  2. 在数组中,元素属于索引,即,如果要进入第四个元素,则必须编写变量名称及其索引或在方括号内的位置。
    但是,在链接列表中,您必须从头开始并逐步进行,直到到达第四个元素。
  3. 虽然访问元素数组的速度很快,但是链接列表花费的时间却是线性的,所以它要慢得多。
  4. 数组中的插入和删除等操作会占用大量时间。另一方面,链接列表中这些操作的执行速度很快。
  5. 数组大小固定。相反,链接列表是动态且灵活的,并且可以扩展和缩小其大小。
  6. 在数组中,内存是在编译时分配的,而在“链表”中则是在执行或运行时分配的。
  7. 元素连续存储在数组中,而元素则随机存储在链接列表中。
  8. 由于实际数据存储在数组的索引中,因此对内存的需求减少了。相反,由于存储了额外的下一个和上一个引用元素,因此在链接列表中需要更多的存储空间。
  9. 另外,阵列中的内存利用效率很低。相反,阵列中的内存利用率很高。

结论

数组列表和链接列表是数据结构的类型,它们的结构,访问和操作方法,内存需求和利用率不同。并且在实现方面具有特殊的优势和劣势。因此,可以根据需要使用任何一个。