数据结构 - 第2章 线性表 - 2.2 线性表的顺序表示

本文详细介绍了线性表的顺序表示,包括顺序表的定义,指出其逻辑顺序与物理顺序相同,并阐述了在顺序表中插入、删除和按值查找操作的时间复杂度分析,强调了顺序表的随机存取特性和较高的存储密度。
摘要由CSDN通过智能技术生成

第2章 线性表

2.2 线性表的顺序表示

2.2.1 顺序表的定义

线性表的顺序存储又称顺序表。它是用一组地址连续的存储单元依次存储数据元素,也就是说顺序表中元素的逻辑顺序与其物理顺序相同

设线性表L存储的起始位置为LOC(A),sizeof(ElemType)是每个数据元素所占存储空间的大小,则L中第n个元素的内存地址是 LOC(A)+(n-1)*sizeof(ElemType),即这是一个等差数列

线性表中的任一元素都可以随机存取,所以线性表的顺序存储结构是一种随机存取的存储结构。在高级语言中,我们通常用“静态或动态数组”(注意:不同的高级语言对于该类型的数据结构名称可能不一样)来描述线性表的顺序存储结构

//静态数组
#define MaxSize 50
typedef struct{
     ElemType data [MaxSize];
     int length;
}SqList;
//动态数组
#define MaxSize 100
typedef struct{
     ElemType *data;
     int MaxSize,length;
}SqList;

顺序表最主要的特点是随机访问,顺序表的存储密度也比较高

2.2.2 顺序表上基本操作的实现

(1)插入操作

在顺序表L的第i(1<i||<L.length+1)个位置插入元素(这里有个判断逻辑,先判断要插入的第i个位置是否合法)

插入操作的时间复杂度:

1)最好情况:在表尾插入,元素后移语句将不执行,时间复杂度为O(1)

2)最坏情况:在表头插入,n个元素皆后移一位,时间复杂度O(n)

3)平均情况:表中n个元素实际上形成了n+1个可插入位置,则每个位置的插入概率为pi=1/(n+1),则需要移动的平均次数是pi**(1+2+3,…,+n)=pi*n(1+n)/2=1/(n+1)*n(n+1)/2=n/2,则时间复杂度为O(n)

(2)删除操作

1)最好情况:删除表尾元素,无需移动元素,时间复杂度为O(1)

2)最坏情况:删除表头元素,需移动n-1个元素,时间复杂度为O(n)

3)平均情况:每个被删掉的元素概率为pi=1/n,当删除第i个元素时,需要移动n-i个元素,求均值 pi*[(n-1)+,…,+(n-n)]=pi*n(n-1)/2=(n-1)/2

(3)按值查找

最好情况:查找的元素就在表头,仅需比较一次,时间复杂度为O(1)

最坏情况:查找的元素在表尾(或不存在)时,需要比较n次,时间复杂度为O(n)

平均情况:E=pi*n(n+1)/2=n+1/2,平均时间复杂度为O(n)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值