【嵌入式开发之数据结构】线性表逻辑结构及顺序存储的特点和不足

线性表的逻辑结构

线性表是包含若干数据元素的一个线性序列。记为:

L=(a_{0},a_{1},......,a_{i-1},a_{i},a_{i+1},......,a_{n-1})

其中:L为表名,a_{i}(0\leqslant i\leqslant n-1) ;

           n为表长,n> 0时,线性表L为非空表,否则为空表。

线性表L可用二元组形式描述:

L=(D,R)

即线性表L包含数据元素集合D和关系集合R

D=\{a_{i}|a_{i}\in datatype,i=1,2,......,n-1,n\geqslant 0\}

R=\left \{ \left \langle a_{i} ,a_{i+1}\right \rangle | a_{i},a_{i+1}\in D,0\leqslant i\leqslant n-2 \right \} 

其中:关系符\left \langle a_{i},a_{i+1} \right \rangle被称为有序对,表示任意相邻的两个元素之间的一种先后次序关系,a_{i}a_{i+1}的直接前驱, a_{i+1}a_{i}的直接后继。

设有一个顺序表L=\left \{ 1,2,3,4,5,6 \right \},使用二元组描述L=\left ( D,R \right ),则

D=\left \{ 1,2,3,4,5,6 \right \}\left ( n=6 \right )

R=\left \{ \left \langle 1,2 \right \rangle ,\left \langle 2,3 \right \rangle,\left \langle 3,4 \right \rangle,\left \langle 4,5 \right \rangle,\left \langle 5,6 \right \rangle\right \}

 线性表的特征

  1. 对非空表,a_{0}是表头,无前驱;
  2. a_{n-1}是表尾,无后继;
  3. 其他的每个元素a_{i}有且仅有一个前驱a_{i-1}和一个后继a_{i+1}

 顺序存储结构的表示

 若线性表L=\left ( a_{0} ,a_{1} ,......,a_{n-1} \right )中的各元素依次存储于计算机一片连续的存储空间。

Loc(a_{i})a_{i}的地址,Loc(a_{0})=b,每个元素占d个单位的,则:

Loc(a_{i})=b+i\times d

顺序存储结构的特点

  1. 逻辑上相邻的两个元素a_{i},a_{i+1}的存储位置在物理上也是相邻的;
  2. 对数据元素a_{i}的存取为随机存取或按地址存取;
  3. 存储密度高,其密度为:

存储密度D=(数据结构中元素所占存储空间)/(整个数据结构所占用的空间)

顺序存储的不足 

  1. 对表的插入和删除等运算的时间复杂度高。
  2. 要求系统提供一片较大的连续存储空间。
  3. 插入和删除等操作运算耗时,且存在元素在存储器中大片移动的现象。

线性表的基本运算

设线性表L=\left ( a_{0} ,a_{1} ,......,a_{n-1} \right ),对L的基本运算有:

  1. 建立一个空表:list\_create(L)
  2. 置空表:list\_clear(L)
  3. 判断线性表是否为空:list\_empty(L),若为空,返回值为1,否则返回0;
  4. 求表长:length(L)
  5. 取表中某个元素:GetList(L,i),即a_{i},要求0\leqslant i\leqslant length(L)-1
  6. 定位运算:Locate(L,x),确定元素x在表L中的位置(或序号),如果元素x在表L中,则返回位置i,如果不在则返回-1;
  7. 插入:Insert(L,x,i),将元素x插入到表L中第i个元素a_{i}之前,且表长+1。插入前L=\left ( a_{0} ,a_{1} ,......a_{i-1},a_{i},a_{i+1},......,a_{n-1} \right ),0\leqslant i\leqslant n,i=n时插入到表尾;插入后L=\left ( a_{0} ,a_{1} ,......a_{i-1},x,a_{i},a_{i+1},......,a_{n-1} \right )。 
  8. 删除:Delete(L,i),删除L中第i个元素a_{i},且长度减1,要求0\leqslant i\leqslant n-1。删除前L=\left ( a_{0} ,a_{1} ,......a_{i-1},a_{i},a_{i+1},......,a_{n-1} \right ),0\leqslant i\leqslant n,i=n,删除后L=\left ( a_{0} ,a_{1} ,......a_{i-1},a_{i+1},......,a_{n-1} \right ),0\leqslant i\leqslant n,i=n

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个嵌入式新手的成长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值