当前位置:   article > 正文

线性表-顺序存储_顺序存储结构的导址公式

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

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;插入代码片
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

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

Status InitList(SqList *L){
         // L是指针,指向的是sqlist类型的变量
    L->elem = (ElemType*)malloc(LIST_INIT_SIZE * sizeof(E
  • 1
  • 2
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号