数据结构——线性表(顺序存储)

线性表的顺序存储

顺序存储的线性表称顺序表

顺序存储
特点
建立
方式
1地址连续,2随机存取,3顺序存储
1首地址,2储存空间大小,3表长
1静态,2动态

物理顺序存储方式

数组下标 顺序表 内存地址
0 a1 LOC(A)
1 a2 LOC(A)+sizeof(Elemtype)
i-1 ai LOC(A)+(i-1)*sizeof(Elemtype)
n-1 an LOC(A)+(n-1)*sizeof(Elemtype)
MaxSize-1 LOC(A)+(MaxSize-1)*sizeof(Elemtype)

优缺点

优点 缺点
存储密度大,不需要为元素的逻辑关系额外开辟空间 插入和删除操作需要移动大量元素,平均时间复杂度O(n)
随机存取,可快速存取表中任一元素 对存储要求高,会出现存储碎片

(注意,随机存取这个概念很重要,它不是存储)

顺序存储
1、线性表是一种逻辑结构存储单元地址连续;顺序表和链表是储存结构;
2、线性表的顺序表示

//线性表的静态分配
#define MaxSize 50	//定义线性表的最大长度
typedef struct{
   //注意:线性表元素位序从1开始,而数组从0开始
	ElemType data[MaxSize];
	int length;
}SqList;
//线性表的动态分配
#define InitSize 100	//定义表的初始长度
typedef struct{
   
	ElemType *data;
	int MaxSize,length;
}SeqList;

SeqList L;//初始化一个叫做L的线性表
L.data=new ElemType[InitSize];
//动态分配虽然使用指针,但是它不是链式存储,而是顺序存储,因为开辟的空间是连续的

3、顺序表的操作
插入操作
在顺序表第i个元素的位置插入一个新元素e

bool ListInsert(SqList &L,int i,Elemtype e){
   
	if(i<1||i>L.length+1)//判断i的范围是否有效
		return false;//顺序表首位是1,末位是length,length+1则正好插到最后
	if(L.length>=MaxSize)//储存空间已满,不可插入
		return 
  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值