首页 > 编程知识 正文

队列数据结构的典型应用,线性表两种存储结构的优缺点

时间:2023-05-06 04:56:58 阅读:31813 作者:3959

概要

数组是元素的连续存储,每个元素占用相同的内存,因此可以使用下标快速访问数组中的任何元素。 但是,要向数组中添加元素,必须移动大量元素,在内存中留出元素空间,然后放置要添加的元素。 同样,如果想删除一个元素,就需要移动大量的元素来填充移动的元素。 如果APP应用程序需要快速访问数据,并且很少插入和删除元素,则必须使用数组。

链表中的元素通过存在元素中的指针链接,而不是按顺序存储在内存中。 每个节点有两个部分:存储数据元素的数据域和存储以下节点地址的指针。

要访问链表中的元素,必须从第一个元素开始,找到所需元素的位置。 但是,元素的添加和删除对于链表的数据结构非常简单,只要修改元素内的指针就可以了。 如果APP应用程序需要经常插入和移除元素,则必须使用链表。

内存存储差异

从数组中分配空间对程序员来说方便快捷,但自由度很小。

链表从堆中分配空间,因此自由度大,但申请管理麻烦

逻辑结构差异

数组必须预先定义固定长度(元素个数),不能应对数据动态增减的情况。 随着数据的增加,可能会超过定义的元素数量。如果数据减少,则会浪费内存。

动态存储分配链表,可以应对数据动态增减的情况,方便数据项的插入和删除。 (如果要在数组中插入和删除数据项,则必须移动其他数据项。)

总结

1、接入方式下,数组可以顺序访问或随机访问,但链表只能顺序访问;

2、在存储位置,数组逻辑相邻的元素在物理存储位置也相邻,但链表不一定一致;

3、在存储空间上,链表具有指针字段,因此存储密度不大于数组;

4、按顺序查找时,数组可以随机访问,时间复杂度为o(1),但链表不支持随机访问,平均需要o(1 )。

5、按值查找,如果数组无序,数组和链表的时间复杂度均为o(n ),但数组有序时,可以采用折半搜索将时间复杂度降低到logn );

6、插入和删除时,数组平均需要移动n/2个元素,但链表只需修改指针;

7、空间分配方面:

对于静态存储分配,数组限制了存储元素的数量;对于动态存储分配,可以扩展存储空间,但需要移动大量元素,这会降低操作效率,并且如果内存中没有连续的存储空间,分配将失败。

链表中存储的节点空间只能在需要时申请分配,内存有空间就可以分配,操作灵活高效

8 .经典数据结构涵盖各种抽象数据类型(ADT ),包括堆栈、队列、有序列表、排序表、哈希表和分布式表、树、首选队列、集合和图表。 在任何情况下,都可以选择数组或链表的数据结构来实现抽象数据类型(ADT )。 数组和链表称为基本数据结构,因为数组和链表是构建几乎所有ADT的基础

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