2.2_ 顺序存储的线性表 OK
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
` ` ` `
2.2.1 线性表的逻辑结构 2 2 2 顺序存储线性表 2.2.2 2.2.3 链式存储线性表(线性链表) 2.2.4 线性表的应用 ——一元多项式的相加
¾线性表的逻辑定义 n(n≥0) 个 属 于 同 一 数 据 类 型 的 数 据 元 素 a1, a2,…, an 组成的有限序列,称为线性表。 L=(D, R) 其中 D={a1, a2, …, an}, }
R={< ai-1, ai> | ai-1,ai∈D, 2≤ i≤ n }
a1 a2
…
ai-1
ai
…
an-1
an
¾ 线性表的特性
• 有且仅有一个“头”元素 • 有且仅有一个“尾”元素 其它元素有且仅有 个前驱和 个后继元素 • 其它元素有且仅有一个前驱和一个后继元素
2 2 2 顺序存储线性表 2.2.2
1.线性表的顺序存储 线性表的顺序存储 ——用一组地址连续的存储单元依次存储线性表 中的数据元素。 设每一元素占L个单元,且已知第 一个元素的地址 有 一个元素的地址,有 Loc(ai)=Loc(a1)+(i-1)*L
存储状态 : a1 a2 : ai
:
用物理位置上的邻接关系来表示数据元素的逻辑关系
an :
`
线性表的插入 线性表的删除
`
(1)顺序表的插入
在线性表中第i个元素ai之前插入 之前插入一个元素x。 个元素x。 (插入元素之前要移动空位置后再插入)
x a1 a1 a2 a2 … ai-1 ai … ai-1 … an … an
ai
移动n-i+1个元素 移动n i 1个元素 a1 a2 … ai-1 x ai … an
InsetrList(V,n,i,x) 1 if(i<1)OR(i>n+1) if(i 1)OR(i n 1) then{参数错return} //非法位置 2 for j=n to i step (-1) 3 V[j+1] ← V[j] // 结点后移 //插入结点x //表长加1 4 end(j) 5 V[i] ← x 6 n←n+1 n 1 7 return
设pi是在第i个元素前插入一个元素的概率,则在表长为 是在第i个元素前插入 个元素的概率 则在表长为 n的表中插入(或删除)一个元素所需移动次数的平均值为:
Ein = ∑ pi (n − i + 1)
i =1 n +1
假定在顺序表中任一位置上插入一个元素的概率 假定在顺序表中任 位置上插入 个元素的概率 相等,且Σpi=1,有pi=1/(n+1),则
1 n +1 n Ein = (n − i + 1) = ∑ n + 1 i =1 2
结论:在顺序表中插入一个元素时,平均需移动 表的 半元素 表的一半元素。
(2)顺序表的删除
删除长度为n的线性表中第i个元素a 删除长度为 的线性表中第 个元素 i。
a1 a2 … ai-1 ai ai+1 … an
移动n-i个元素 a1 a2 … ai-1 ai+1 … an
D l t Li t (V, DeleteList (V n, i ) 1 if(i<1)OR(i>n+1) ( ) ( ) then{ {参数错return} } //非法位置 2 for j=i to n-1 3 V[j] ← V[j+1] // 结点前移,删除第i个结点 结点前移 除第 个结点 //表长减1 4 end(j) e d(j) 5 n←n-1 6 return
`
设qi是删除第i个元素的概率,则在表长为n的表 设 是删除第i个元素的概率 则在表长为 的表 中删除一个元素所需移动次数的平均值为: n
Ede = ∑ qi (n − i )
i =1
`
假定在顺序表中任一位置上删除一个元素的概率 相等,且Σqi=1,有qi=1/n,则
1 n n −1 Ede = ∑ (n − i ) = n i =1 2
`
结论:在顺序表中删除一个元素时,平均约需移 动表的一半元素。 动表的 半元素。
`
优点:
◦ 随机存储结构——查找元素方便,可随机存取表中的任一数据元素 ◦ 所需存储空间小——相对于链式存储而言,存储数据元素+指针
`
缺点:
◦ 插入、删除需要移动大量元素——在等概率条件下,平均要移动
表中 半的 素 表中一半的元素。
◦ 要求存储空间连续; ◦ 可能造成存储空间的闲置或溢出。 ◦ 表的容量不易扩充。
`
P102 2 2.8 8 2.11 2 11