数据结构(一):线性表的顺序存储和链式存储

1. 线性表的定义和概念:

线性表(List) :零个或多个数据元素的有限系列。

线性表有两个重要的特性:1)线性表中元素的个数是有限的;

                                           2)线性表中每个元素是有序的;In another opinon,  除第一个元素无前驱节点,最后一个元素无后继节点之外,每一个元素都有且只有一个前驱节点和一个后继结点(这句话其实只是针对最基础的线性表,例如:循环链表每个元素都有前驱节点和后继节点)。

线性表的实现可以采用顺序存储的方式,也可以采用链式存储的方式。

2. 线性表之顺序存储:

      1)线性表的顺序存储就是使用一块连续的内存空间进行存储。一般而言我们是使用一个固定长度的数组来实现的。抽象定义如下:

#define LIST_MAX_LENGTH  XXX         //线性表中可以存储的最大元素个数

typedef int ElemType;                //元素类型

typedef struct {
    ElemType data[LIST_MAX_LENGTH];  //定义一个固定长度的数据
    int length;                      //记录当前线性表中元素个数
}sqList;                             

       2)由于采用顺序存储的方式,需要实现分配固定大小的连续空间(指定LIST_MAX_LENGTH),这就需要实现确定该链表的大概长度范围,否则可能因开辟空间太小造成线性表的溢出或者开辟空间太大的浪费。

       3)对顺序存储的线性表进行插入操作时:在插入元素时线性表可能已满,再行存储可能造成溢出,因此需要进行线性表已满的判断处理;在进行删除操作的时候,如果线性表为空,则根本无需进行删除操作。 对于顺序存储,如果进行插入操作,需要将后续元素进行统一后移,这个平均的时间复杂度为O(n/2), 删除操作也是同样,需要将该元素之后的所有元素进行前移,平均的时间复杂度也是O(n/2),  这就导致了顺序存储不适于频繁的插入和删除操作,而对于查询操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叨陪鲤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值