【数据结构】线性表的顺序表示(顺序表的定义和基本操作)

线性表的顺序表示(顺序表的定义和基本操作:初始化/插入/删除/查找)

2.2.1 顺序表的定义

1.定义

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

        所谓顺序存储,就是把逻辑上相邻的元素存储在物理位置上相邻的存储单元中,元素间的关系由存储单元的邻接关系来体现。

2.实现

        顺序表中的任意一个数据元素都可以随机存取。通常用数组来描述线性表的顺序存储结构。数组可以是静态分配的,也可以是动态分配的.

        注意线性表中元素位序从1开始,而数组中元素下标从0开始。

        假定线性表的元素类型为ElemType

        1)静态分配(存储数组空间和内存固定)

        静态分配的顺序表存储结构描述为:

        

        2)动态分配(存储数组分配空间大小在运行时动态决定)

        

3.特点

2.2.2 顺序表的初始化

静态分配:

        静态分配在声明一个顺序表时,就已经为其分配了数组空间,因此初始化时只需将顺序表的当前长度设为0。

//静态分配初始化
	//SqList L;				//声明一个顺序表 
	void InitSize(SeqList &L){	
		L.length = 0;			//顺序表初始长度为0 
	} 

动态分配:

        动态分配的初始化为顺序表分配一个预定义大小的数组空间,并将顺序表的当前长度设为0.MaxSize指顺序表当前分配的存储空间大小,一旦因为插入元素而空间不足,就再进行分配.

//动态分配初始化
	//SqList L;				//声明一个顺序表 
	void InitSize(SeqList &L){
		L.data = (ElemType *)malloc(sizeof(ElemType)*Initsize);		//分配存储空间 
		L.length = 0;			//顺序表初始长度为0
		L.MaxSzie = InitSize;	//初始存储容量 
	} 

2.2.2 顺序表的插入(O(n))

        在顺序表L的第i个位置插入新元素e: ListInsert(&L,i,e);

        若i不合法(不在1 <= i <= L.length + 1范围内),返回False,插入失败;

        若i合法,将第i个元素及其后的元素均往后移动一位,腾出的空位置插入新元素e,顺序表长度+1,插入成功,返回True.

bool ListInsert(SqList &L, int i, int e)
{
	if(i < 1 || i > L.length+1) return false; 	//判断i的范围是否有效 
	if(L.length >= MaxSzie) return false;		//存储空间若满了不能插入 
	
	for(int j = L.length; j >= i; j--)
		L.data[j] = L.data[j-1];				//将第i个及其之后元素均后移一位 
	L.data[i-1] = e;							//插入元素e 
	L.length++;									//表长度+1 
	return true;
} 

 时间复杂度分析:                                               

2.2.2 顺序表的删除(O(n))

        删除顺序表L中第i个位置的元素,用引用变量e返回被删除元素的值: ListDelete(&L,i,e);

         若i不合法(不在1 <= i <= L.length 范围内),返回False;

        若i合法,将第i个元素(要删除的元素)的值赋给e,并将第i+1个元素及其后的元素均往前移动一位,表长减1,返回True.

bool ListDelte(SqList &L, int i, int &e)  //注意e要加引用符 
{
	if(i < 1 || i > L.length) return false; 	//判断i的范围是否有效 
	e = L.data[i-1];							//将被删除元素的值赋给e 
	for(int j = i; j < L.length; j++)
		L.data[j-1] = L.data[j];				//将第i个元素后面的元素均前移一位 
	L.length--;									//表长度-1 
	return true;
}

时间复杂度分析

2.2.2 顺序表的查找(O(n)或O(1))

        分按位查找和按值查找(顺序查找)两种.

        按位查找(O(1)):直接根据数组下标访问元素,获取表L中第i个位置的元素的值.GetElem(L,i);

ElemType GetElem(SqList L, int i)
{
    return L.data[i-1]; 
}

        按值查找(顺序查找)(O(n)):在顺序表L中查找第一个元素值 = e的元素,并返回其位序: LocateElem(&L,e);

时间复杂度分析

代码汇总

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值