线性表-顺序存储

本文详细介绍了线性表的顺序存储结构,包括地址计算公式、存储特点、存储密度和随机存取的优势。同时,文章阐述了顺序存储在插入、删除、查找和输出等基本操作的实现,强调了这些操作的时间复杂度,并指出顺序存储的主要缺点在于插入和删除可能导致大量数据移动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 学习数据结构已有一段时间,题也做了不少,现在看了一本新的教材,很有体会,遂现在把知识点整理一遍+pta上的习题错题(因时间有限,暂时只能看错题,等考试前再系统看一遍)

1.顺序存储中数据元素的地址计算公式:
假设每一个数据元素占C字节,且a1的存储地址为Loc(a1),则根据顺序存储的特点可以得出第i个数据元素的地址计算公式为:
*Loc(ai)=Loc(a1)+(I-1)C, 1<=I<=n;
2.线性表顺序存储的特点
(1)在线性表中,逻辑上相邻的数据元素,在物理存储位置上也是相邻的。
(2)存储密度高。
存储密度的公式为:
存储密度=数据元素本身值所需的存储空间/该数据元素实际所占用的空间
顺序存储结构中,数据元素的存储密度为1.
(3)便于随机存取。
在线性表基地址已知的情况下,只要明确数据元素在线性表中的位序号就可由1中的式子计算出该元素在顺序存储中的地址,计算机就可以根据地址快速的对该地址空间的元素进行读与写。
缺点:
(1)要预先分配“足够应用”的存储空间,可能会导致资源的浪费,也可能导致空间不够实际应用,需要再次请求增加分配空间来扩充存储容量。
(2)不便于插入和删除操作,因为会导致大量的数据元素移动。
3.顺序表上基本操作的实现
(1)顺序存储结构的描述

#define LIST_INIT_SIZE 80    //线性表初始分配空间的容量
#define LISTINCREMENT 10  //线性表可以扩充
typedef int Status;
typedef int ElemType;       
typedef struct{
   
    ElemType * elem;         //线性表的存储空间基地址
    int length;              //线性表的当前长度
    int listsize;            //线性表当前的存储空间容量
}SqList;                     //对于线性表L,其存储空间的基地址访问形式为:L.elem; 访问第i个数据元素ai为 L.elem[i-1];表长的访问为L.length;分配的空间容量的访问为:L.listsize;插入代码片

2)顺序表的初始化(创建一个空的顺序表)
分配预定义大小的存储空间->如果空间分配失败->顺序表的长度为0->顺序表的存储空间容量

Status InitList(SqList *L){
         // L是指针,指向的是sqlist类型的变量
    L->elem = (ElemType*)malloc(LIST_INIT_SIZE * sizeof(E
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值