顺序表和链表的区别

顺序表和链表的区别?

顺序表和链表的区别

演示机型:华为MateBook X系统版本:win10 1、存储分配方式不同:顺序存储结构是用一段连续的存储单元依次存储线性表的数据元素,单项链表是采用链式存储结构,用一组任意的存储单元存放线性表的元素 。
2、空间利用率不同:顺序表的空间利用率显然要比链表高 。因链表在存储数据时 , 每次只申请一个节点的空间,且空间的位置是随机的,这种申请存储空间的方式会产生很多空间碎片,一定程序上造成了空间浪费 。不仅如此,由于链表中每个数据元素都必须携带至少一个指针 , 因此链表对所申请空间的利用率也没有顺序表高 。
3、开辟空间的方式不同:顺序表存储数据实行的是 “一次开辟,永久使用”,即存储数据之前先开辟好足够的存储空间,空间一旦开辟后期无法改变大?。ㄊ褂枚榈那榭龀猓?。而链表则不同,链表存储数据时一次只开辟存储一个节点的物理空间 , 如果后期需要还可以再申请 。因此,若只从开辟空间方式的角度去考虑 , 当存储数据的个数无法提前确定,又或是物理空间使用紧张以致无法一次性申请到足够大小的空间时,使用链表更有助于问题的解决 。
顺序表和链表的区别

顺序表存储位置是相邻连续的,可以随即访问的一种数据结构,一个顺序表在使用前必须指定起长度,一旦分配内存,则在使用中不可以动态的更改 。他的优点是访问数据是比较方便,可以随即的访问表中的任何一个数据 。
链表是通过指针来描述元素关系的一种数据结构 , 他可以是物理地址不连续的物理空间 。不能随即访问链表元素,必须从表头开始 , 一步一步搜索元素 。它的优点是:对于数组,可以动态的改变数据的长度 , 分配物理空间 。
在使用中:如果一个数组在使用中,查询比较多,而插入,删除数据比较少,数组的长度不变时,选顺序表比较合理 。如果插入,删除,长度不定的数组,可以选链表 。
###其它资料参考###1)存储分配的方式
顺序表的存储空间是一次性分配的,链表的存储空间是多次分配的 。
2)存储密度的比较(存储密度=结点值域所占的存储量/结点结构所占的存储总量)
顺序表的存储密度=1,链表的存储密度<1.
1)存取方式
顺序表可以随机存取 , 也可以顺序存?。涣幢碇荒芩承虼娲?。
【顺序表和链表的区别】2)插入/删除时移动元素的个数
顺序表平均需要移动近一半元素;链表不需要移动元素,只需要修改指针 。
###其它资料参考###顺序表和静态链表的物理结构(即存储结构)是相同的 , 在计算机内存中以数组的形式保存的线性表,是用一组地址连续的存储单元依次存储数据元素的线性结构,但两者的数据结构(逻辑结构)是不同的:
顺序表:着眼于整个数组,采用动态分配的一维数组 , 仍然借助了指针进行数据操作,具体描述如下:
typedef struct
{
ElemType *elem
int length
int listsize
}Sqlist
在线性表的插入和删除操作时,需要借助指针来移动元素 。
静态表:不设指针而使用链表结构,数组元素的一个分量用于存放数据,另一个用来作为“游标”指示下一结点在数组中的相对位置 , 数据的存储尽管是采用一维数组的形式存储在计算机中 , 但仍然是继承了链表指向不一定总是指向紧挨着其的结点,描述如下:
typedef struct
{
Elemtype data
int cur
}component,SLinkList[MAXSIZE]
这种存储结构,仍需要预先分配一个较大的空间,但在作为线性表的插入和删除操作时不需移动元素,仅需修改指针(游标) , 故仍具有链式存储结构的主要优点 。
鉴于两者的数据结构不同 , 对用的数据操作也就不同 。

顺序表和链表的区别

猜你喜欢