数组和链接列表之间的区别
内容
之间的主要区别 数组 和 链表 关于他们的结构。数组是 基于索引 数据结构,其中每个元素与一个索引关联。另一方面,“链接列表”依赖于 参考资料 其中每个节点均由数据以及对上一个和下一个元素的引用组成。
基本上,数组是一组相似的数据对象,它们以共同的标题或变量名存储在顺序的内存位置中。
链表是一个包含一系列元素的数据结构,其中每个元素都链接到其下一个元素。链接列表的元素中有两个字段。一个是数据字段,另一个是链接字段,数据字段包含要存储和处理的实际值。此外,链接字段保存链接列表中下一个数据项的地址。用于访问特定节点的地址称为指针。
数组和链接列表之间的另一个显着区别是,数组具有固定的大小,需要事先声明,但链接列表不限于大小,并且在执行过程中会进行扩展和收缩。
- 比较表
- 定义
- 关键差异
- 结论
比较表
比较基础 | 数组 | 链表 |
---|---|---|
基本的 | 它是固定数量的数据项的一致集合。 | 它是一个有序集合,包含可变数量的数据项。 |
尺寸 | 在声明期间指定。 | 无需指定;在执行过程中增长和收缩。 |
存储分配 | 元素位置是在编译时分配的。 | 在运行期间分配元素位置。 |
元素顺序 | 连续存储 | 随机存放 |
访问元素 | 直接或随机访问,即指定数组索引或下标。 | 顺序访问,即指针从列表中的第一个节点开始遍历。 |
元素的插入和删除 | 相对缓慢,因为需要换档。 | 更轻松,快速和高效。 |
正在搜寻 | 二进制搜索和线性搜索 | 线性搜索 |
需要内存 | 减 | 更多 |
内存利用率 | 无效的 | 高效的 |
数组的定义
数组定义为一定数量的同类元素或数据项的集合。这意味着数组只能包含一种数据类型,即所有整数,所有浮点数或所有字符。数组的声明如下:
诠释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个循环。
在数组上执行的操作是:
- 创建数组
- 遍历数组
- 插入新元素
- 删除必需的元素。
- 元素的修改。
- 合并数组
例
以下程序说明了数组的读取和写入。
#包括
#包括
无效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语言中有一个称为指针的唯一数据结构。因此,列表的第二个字段必须是指针类型。
链表的类型为单链表,双链表,循环链表,循环双链表。
在链接列表上执行的操作是:
- 创建
- 遍历
- 插入
- 删除中
- 正在搜寻
- 级联
- 显示
例
以下代码段说明了链接列表的创建:
结构节点
{
整数
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)));
}
- 数组是指数据结构包含相似类型的数据元素的集合,而链接列表被视为非原始数据结构,其中包含称为节点的无序链接元素的集合。
- 在数组中,元素属于索引,即,如果要进入第四个元素,则必须编写变量名称及其索引或在方括号内的位置。
但是,在链接列表中,您必须从头开始并逐步进行,直到到达第四个元素。 - 虽然访问元素数组的速度很快,但是链接列表花费的时间却是线性的,所以它要慢得多。
- 数组中的插入和删除等操作会占用大量时间。另一方面,链接列表中这些操作的执行速度很快。
- 数组大小固定。相反,链接列表是动态且灵活的,并且可以扩展和缩小其大小。
- 在数组中,内存是在编译时分配的,而在“链表”中则是在执行或运行时分配的。
- 元素连续存储在数组中,而元素则随机存储在链接列表中。
- 由于实际数据存储在数组的索引中,因此对内存的需求减少了。相反,由于存储了额外的下一个和上一个引用元素,因此在链接列表中需要更多的存储空间。
- 另外,阵列中的内存利用效率很低。相反,阵列中的内存利用率很高。
结论
数组列表和链接列表是数据结构的类型,它们的结构,访问和操作方法,内存需求和利用率不同。并且在实现方面具有特殊的优势和劣势。因此,可以根据需要使用任何一个。