线性表的顺序存储结构

合集下载

数据结构期末试题及答案

数据结构期末试题及答案

数据结构期末试题及答案一、单项选择题(每题2分,共20分)1. 在数据结构中,线性表的顺序存储结构和链式存储结构的主要区别在于:A. 数据元素的存储关系B. 数据元素的存储空间C. 数据元素的存储顺序D. 数据元素的存储位置答案:A2. 下列关于栈的描述中,错误的是:A. 栈是一种后进先出(LIFO)的数据结构B. 栈只能进行插入和删除操作C. 栈顶元素可以被访问D. 栈可以进行顺序存储和链式存储答案:B3. 在二叉树的遍历算法中,不使用递归算法的遍历方式是:A. 前序遍历B. 中序遍历C. 后序遍历D. 层序遍历答案:D4. 哈希表的冲突解决方法中,不包括以下哪种:A. 开放定址法B. 链地址法C. 线性探测法D. 排序法答案:D5. 在图的遍历算法中,深度优先搜索(DFS)和广度优先搜索(BFS)的主要区别在于:A. 搜索的顺序B. 存储结构C. 遍历的深度D. 遍历的宽度答案:A6. 快速排序算法的时间复杂度最坏情况下为:A. O(n)B. O(nlogn)C. O(n^2)D. O(n^3)答案:C7. 下列关于二叉搜索树的描述中,正确的是:A. 每个节点的左子树只包含小于该节点的键值B. 每个节点的右子树只包含大于该节点的键值C. 以上两个选项都正确D. 以上两个选项都不正确答案:C8. 在非递归的二叉树遍历算法中,通常需要使用的数据结构是:A. 栈B. 队列C. 链表D. 数组答案:A9. 一个有n个顶点的无向图,其边数最多为:A. nB. n(n-1)/2C. n(n+1)/2D. n^2答案:B10. 一个长度为n的数组进行归并排序时,需要的辅助空间大小为:A. O(1)B. O(n)C. O(nlogn)D. O(n^2)答案:B二、填空题(每题2分,共10分)1. 在数据结构中,______是一种特殊的线性表,它的元素个数是固定的。

答案:数组2. 链表中,每个节点包含数据域和______。

线性表的顺序存储结构是一种什么存储结构

线性表的顺序存储结构是一种什么存储结构

线性表的顺序存储结构是一种什么存储结构线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的(注意,这句话只适用大部分线性表,而不是全部。

比如,循环链表逻辑层次上也是一种线性表(存储层次上属于链式存储),但是把最后一个数据元素的尾指针指向了首位结点)。

我们说“线性”和“非线性”,只在逻辑层次上讨论,而不考虑存储层次,所以双向链表和循环链表依旧是线性表。

在数据结构逻辑层次上细分,线性表可以分成通常线性表和受到限制线性表。

通常线性表也就是我们通常所说的“线性表”,可以民主自由的删掉或嵌入结点。

受到限制线性表主要包含栈和队列,受到限制则表示对结点的操作方式受限制。

线性表的逻辑结构简单,便于实现和操作。

因此,线性表这种数据结构在实际应用中是广泛采用的一种数据结构。

线性表就是一种常用的数据结构,以下了解线性表及其顺序存储,并对栈和队列及它们的顺序同时实现得出了详尽的设计叙述。

在实际应用中,线性表都是以栈、队列、字符串等特殊线性表的形式来使用的。

由于这些特殊线性表都具有各自的特性,因此,掌握这些特殊线性表的特性,对于数据运算的可靠性和提高操作效率都是至关重要的。

线性表就是一个线性结构,它就是一个所含n≥0个结点的非常有限序列,对于其中的结点,存有且仅有一个已经开始结点没前驱但存有一个后继结点,存有且仅有一个终端结点没后继但存有一个前驱结点,其它的结点都存有且仅有一个前驱和一个后继结点。

通常地,一个线性表可以则表示成一个线性序列:k1,k2,…,kn,其中k1就是已经开始结点,kn就是终端结点。

是一个数据元素的有序(次序)集1、子集中必存有唯一的一个“第一元素”;2、集合中必存在唯一的一个“最后元素” ;3、除最后一个元素之外,均存有唯一的后继(后件);4、除第一个元素之外,均有唯一的前驱(前件)。

由n(n≥0)个数据元素(结点)a1,a2,…,an共同组成的非常有限序列。

线性表 知识点总结

线性表 知识点总结

线性表知识点总结线性表的特点:1. 有序性:线性表中的元素是有序排列的,每个元素都有唯一的前驱和后继。

2. 可变性:线性表的长度是可变的,可以进行插入、删除操作来改变表的元素数量。

3. 线性关系:线性表中的元素之间存在明确的前驱和后继关系。

4. 存储结构:线性表的存储结构有顺序存储和链式存储两种方式。

线性表的操作:1. 查找操作:根据元素的位置或值来查找线性表中的元素。

2. 插入操作:将一个新元素插入到线性表中的指定位置。

3. 删除操作:将线性表中的某个元素删除。

4. 更新操作:将线性表中的某个元素更新为新的值。

线性表的顺序存储结构:顺序存储结构是将线性表的元素按照其逻辑顺序依次存储在一块连续的存储空间中。

线性表的顺序存储结构通常采用数组来实现。

数组中的每个元素都可以通过下标来访问,因此可以快速的进行查找操作。

但是插入和删除操作会导致元素位置的变动,需要进行大量数据搬移,效率较低。

线性表的链式存储结构:链式存储结构是将线性表的元素通过指针相连,形成一个链式结构。

每个元素包含数据和指向下一个元素的指针。

链式存储结构不需要连续的存储空间,可以动态分配内存,适合插入和删除频繁的场景。

但是链式结构的元素访问不如顺序结构高效,需要通过指针来逐个访问元素。

线性表的应用场景:1. 线性表适用于数据元素之间存在明确的前后关系,有序排列的场景。

2. 顺序存储结构适用于元素的插入和删除操作较少,对元素的随机访问较频繁的场景。

3. 链式存储结构适用于插入和删除操作较频繁的场景,对元素的随机访问较少。

线性表的操作的时间复杂度:1. 查找操作:顺序存储结构的时间复杂度为O(1),链式存储结构的时间复杂度为O(n)。

2. 插入和删除操作:顺序存储结构的时间复杂度为O(n),链式存储结构的时间复杂度为O(1)。

线性表的实现:1. 顺序存储结构的实现:使用数组来存储元素,通过下标来访问元素。

2. 链式存储结构的实现:使用链表来实现,每个元素包含数据和指向下一个元素的指针。

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

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

线性表的顺序存储——顺序表之前我们讲了线性表, 本篇来阐述下线性表的顺序存储——顺序表定义线性表的顺序存储⼜称为顺序表, 它是⽤⼀组地址连续的存储单元依次存储线性表中的数据元素. 逻辑上相邻的两个数据元素在物理位置上同样相邻.规律顺序表中逻辑顺序与物理顺序相同L = ($a_{1}$, $a_{2}$, ..., $a_{i}$, $a_{i + 1}$, ..., $a_{n}$)其中在逻辑上相邻的两个数据元素,在顺序表中也存放在相同的存储单元当中,每⼀个⼩格⼦就代表⼀个存储单元。

注线性表中的元素的位序是从1开始, ⽽数组中元素下标是从0开始的若线性表存储的起始位置为Loc(A), sizeof(ElemType)为每个数据元素所占⽤的存储空间⼤⼩, 那么根据这⼀特点,我们可以计算出每⼀个数据元素存储的地址。

第⼀个元素的地址是 LOC(A),计算第⼆个元素的地址就可以⽤第⼀个元素的地址加上第⼀个数据元素 $a_{1}$ 所消耗的存储空间,⽤ sizeof 可求得该数据元素所消耗的存储空间⼤⼩。

这⾥需要注意的⼀点是,n 与 MaxSize 是有含义上的不同的,其中 $a_{n}$ 代表的是顺序表中最后⼀个数据元素,⽽ MaxSize 代表的是数组的最后⼀个存储单元。

顺序表的两种实现⽅法顺序表可以⽤数组来实现。

根据数组的两种分配⽅式,也就有两种描述顺序表的⽅法。

分别是静态描述分配顺序表的⽅法和动态描述分配顺序表的⽅法。

⾸先来看数组静态分配时时如何描述⼀个顺序表的。

静态描述分配顺序表#define MaxSize 50typedef struct{ElemType data[MaxSize];int length;}SqList;这就是描述顺序表的语句。

第⼀句是定义了⼀个宏,也就是定义线性表的最⼤长度为 50,同时这也是数组的最⼤容量。

接着定义了⼀个结构体。

结构体就是把多个基本数据类型组合到⼀起构成⼀个新的数据类型。

C语言:2.2 线性表及其顺序存储结构

C语言:2.2 线性表及其顺序存储结构
(a1, a2,...,ai ,...,an )
线性表中数据元素的个数n称为线性表的长度
2.线性表的顺序存储结构
2.2.1 线性表及其运算
… a1 a2 … ai-1 ai … an …
第1个元素的存储地址,即线性表的起始地 址,称作线性表的基地址
每个数据元素所占的
线性表的顺序存储结构具有的特点: 存储空间(子节数) (1)所有元素所占的存储空间是连续的 (2)各元素在存储空间中是按逻辑顺序
v[i-1]=b;
//插入新元素
n=n+1;
//线性表长度增加1
return;
}
4.线性表在顺序存储结构下的删除运算 2.2.1 线性表及其运算
例2 删除线性表(21,18,30,75,66,42,56,87) 的第5个元素。
V(1:10) 21 18 30 75 4626 4526 5867 87
2. 线性表:允许在任意位置进行插入、删除运算 栈:只允许在一端进行插入、删除运算的线性表, 具有先进后出、后进先出的特点 队列:只允许在队尾插入,在排头进行删除 运算的线性表,具有先进先出的特点
3.由线性表在顺序存储结构下的插入与删除运算效 率比较低,这种存储方式对于大线性表或元素经常 需要变动的线性表不太合适.
S(1:10)
1.什么是队列
2.2.3 队列栈及其应用
队列(Queue)是指允许在一端进行插入,而在 另一端进行删除的线性表。
出队
ABCDE F
入队
排头指针 front
队尾指针 rear
2.队列的应用
输入输出缓冲区的结构








线性表及其顺序存储结构

线性表及其顺序存储结构

理解线性表的定义有以下要点:
⑴ 序列——顺序性:元素具有线性顺序,第一个元素无前驱,最后一 个元素无后继,其他每个元素有且仅有一个前驱和一个后继。 ⑵ 有限——有限性:元素个数有限,在计算机中处理的对象都是有限 的。 ⑶ 相同类型——相同性:元素取自于同一个数据对象,这意味着每个 元素占用相同数量的存储单元。
3)入队
void InsertQueue(CircularQueue *q, ElemType x) { if((q->rear+1)%MAXSIZE==q->front) { printf("\n 队满,上溢!"); exit(1); } q->data[q->rear]=x; /*新元素插入到队尾*/ q->rear=(q->rear+1)%MAXSIZE; /*尾指针加1*/ }
出队列 ← a1 a2 a3 … an ← 入队列 ↑ ↑ 队头 队尾 队列示意图
在队列中,最先插入的元素,将最先能够 被删除。反之,最后插入的元素,将最后才 能被删除。因此,队列又称为“先进先出” 或后进后出的线性表。
2. 队列的顺序存储结构和基本运算 队列的顺序存储结构称为顺序队列。顺序 队列通常用一个一维数组来存放队列中的数 据元素。此外,还需设置两个整形变量front 和rear作为队头指示器和队尾指示器,分别 指示队头和队尾元素在向量空间中的位置。
⑷ 元素类型不确定——抽象性:数据元素的类型是抽象的、不具体的, 需要根据具体问题确定。

顺序表用一段地址连续的存储单元依次存储线性表的 数据元素。线性表(a1,a2,……,an)的顺序存储示 意图如图2.5所示。

由于线性表中每个数据元素的类型相同,可以用C++ 语言中的一维数组来实现顺序表,也就是把线性表中 相邻的元素存储在数组中相邻的位置,如图2.6所示

1.3 线性表及其顺序存储结构

1.3 线性表及其顺序存储结构

1.3 线性表及其顺序存储结构1.3.1 线性表的基本概念1.线性表的定义在数据结构中,线性表(Linear List)是最简单也是最常用的一种数据结构。

线性表是由n(n≥0)个数据元素a1, a2, …, a n组成的有限序列。

其中,数据元素的个数n定义为表的长度。

当n=0时称为空表,记作( )或 ,若线性表的名字为L,则非空的线性表(n>0)记作:L=(a1,a2,…,a n)这里a i(i=1,2,…,n)是属于数据对象的元素,通常也称其为线性表中的一个结点。

线性表的相邻元素之间存在着前后顺序关系,其中第一个元素无前驱,最后一个元素无后继,其他每个元素有且仅有一个直接前驱和一个直接后继。

可见,线性表是一种线性结构。

例如,英文字母表(A, B, C, …, Z)就是一个长度为26的线性表,表中的每一个英文字母是一个数据元素,四季(春、夏、秋、冬)是一个长度为4的线性表,其中每一个季节是一个数据元素。

矩阵也是一个线性表,只不过它是一个比较复杂的线性表。

在矩阵中,既可以把每一行看成一个数据元素(既每一行向量为一个数据元素),也可以把每一列看成一个数据元素(即每一列向量为一个数据元素)。

其中每一个数据元素(一个行向量或者一个列向量)实际上又是一个简单的线性表。

在复杂的线性表中,一个数据元素由若干数据项组成,此时,把数据元素称为记录(record),而由多个记录构成的线性表又称为文件(file)。

例如,一个按照姓名的拼音字母为序排列的通信录就是一个复杂的线性表,见表1-4,表中每个联系人的情况为一个记录,它由姓名、性别、电话号码、电子邮件和住址5个数据项组成。

表1-4 复杂线性表2.非空线性表的特征非空线性表具有以下一些结构特征:●有且只有一个根结点,它无前件;●有且只有一个终端结点,它无后件;●除根结点与终端结点外,其他所有结点有且只有一个前件,也有且只有一个后件。

结点个数n称为线性表的长度,当n=0时,称为空表。

线性表的顺序存储结构实验报告总结

线性表的顺序存储结构实验报告总结

线性表的顺序存储结构实验报告总结一、需求分析⒈本程序中,要求输入到表A,B中的元素是整形的,并且要按非递增顺序输入,否则系统会给出“出错信息”。

输出结果应该是一个不含有重复元素的非递增的表。

⒉本程序以用户和计算机的对话方式执行,即在计算机演示界面上显示“提示信息”后,由用户在键盘上输入相应的信息;相应的输入数据和运算结果显示在其后。

⒊程序执行的命令包括:(1)构造线性表A (2)构造线性表B (3)检验表A,B是否非递减有序(4)求表A与B的合并(5)删除表中值相同的多余元素(6)结束。

4.测试数据(1)A=123(2)A=9 5 0 -2B=1050-1-3-5 -10二、概要设计⒈为实现上述算法,需要线性表的抽象数据类型:ADT Stack {数据对象:D={ai:|ai∈ElemSet,i=1…n,n≥0}数据关系:R1={<ai-1,ai>|ai-1,ai∈D,i=2,…n}基本操作:init(list *L)操作结果:构造一个空的线性表L。

InputList(List *L)初始条件:线性表L已经存在操作结果:人工输入了一张表。

CheckList(List *L)初始条件:线性表L已经存在操作结果:判断L是否非递增有序,若为否,则重新输入。

MergeList(List *La,List *Lb,List *Lc)初始条件:非递增线性表La,Lb已经存在操作结果:合并La,Lb得到Lc,Lc仍按非递增有序排列。

DeleteSame(List *L)初始条件:非递增线性表L已经存在操作结果:删除了L中值相同的元素。

PrintList(List L)初始条件:线性表L已经存在操作结果:打印出表L。

}ADT List2. 本程序有三个模块:⑴主程序模块void main(){初始化;do{接受命令;显示结果;}while(执行完毕)}⑵线性表单元模块:实现线性表抽象数据类型;⑶结点结构单元模块:定义线性表中的结点结构。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
E is =

n +1 i =1
p i ( n i + 1)
1 不失一般性,若在线性表的任何位置插入元素都是等概率的,即 p i = 不失一般性,若在线性表的任何位置插入元素都是等概率的, , n + 1 上式可化简为: 上式可化简为: 1 n+1 n
Eis =
∑(n i +1) = 2 n +1
第二章 线性表
2.1 线性表的类型定义 2.2 线性表的顺序表示和实现
2.3 线性表的链式表示和实现
2.4 一元多项式的表示及相加
2.2 线性表的顺序表示和实现 线性表的顺序表示指的 是用一组地址连续的存储单 元依次存储线性表的数据元 素.
£2.2 线性表的顺序存储结构
(1)线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性 ) 表的数据元素.如下图2.1所示 所示: 表的数据元素.如下图 所示: 存储地址 b b+l … b+(i-1)l … b+(n-1)l b+nl … b+(maxlen-1)l 内存状态 a1 a2 … ai … an 空闲 数据元素在线性表中的位序 1 2 … i … n
// 为顺序表分配大小为 maxsize 的数组空间
if (!L.elem) exit(OVERFLOW); L.length = 0; L.listsize = maxsize; return OK; 算法时间复杂度 O(1) 时间复杂度: 时间复杂度 } // InitList_Sq
(4)线性表的插入和删除运算 ) 序号 数据元素 1 2 3 4 5 6 7 8 12 13 21 24 28 30 42 77 (a) 序号 数据元素 1 2 3 4 5 6 7 8 9 12 13 21 24 25 28 30 42 77 (b) 序号 数据元素 1 2 3 4 5 6 7 8 12 13 21 24 28 30 42 77 (a) 序号 数据元素 1 2 3 4 5 6 7 12 13 21 28 30 42 77
LOC (ai +1 ) = LOC (ai ) + l
线性表的第i个数据元素 的存储位置为 线性表的第 个数据元素ai的存储位置为: 个数据元素 的存储位置为:
LOC (ai ) = LOC (a1 ) + (i 1) × l
的存储位置, 式中LOC(a1 )是线性表的第一个数据元素 a 1的存储位置,通常称做线性表的起始位置 或基地址. 或基地址. 只要确定了存储线性表的起始位置,线性表中任一数据元素都可随机存取. 只要确定了存储线性表的起始位置,线性表中任一数据元素都可随机存取.线性 表的顺序存储结构是一种随机存取的存储结构. 表的顺序存储结构是一种随机存取的存储结构.
length; // 当前长度 listsize; // 当前分配的存储容量
// (以sizeof(ElemType)为单位)
} SqList; // 俗称 顺序表
Status InitList_Sq( SqList& L, int maxsize ) { // 构造一个最大容量为 maxsize 的顺序表 L.elem = new ElemType[maxsize];
删除运算 算法2.4如下: 算法 如下: 如下 Status ListDelete_Sq (SqList &L, int i, ElemType &e) { //在顺序线性表 中删除第 个元素,并用 返回其值 在顺序线性表L中删除第 个元素, 在顺序线性表 中删除第i个元素 并用e返回其值 //i的合法值为 的合法值为1≤i≤ListLength_Sq(L) 的合法值为 if (i<1|| i>L.length) return ERROR; //i值不合法 值不合法 p = & (L.elem[i-1]); //p为被删除元素的位置 - 为被删除元素的位置 e = *p; //被删除元素的值赋给 被删除元素的值赋给e 被删除元素的值赋给 q = L.elem + L.length-1; //表尾元素的位置 - 表尾元素的位置 for (++p; p<=q; ++p) * (p-1) = *p; (p- //被删除元素之后的元素 //被删除元素之后的元素 左移 ――L.length; return OK; } //ListDelete_Sq //表长减 表长减1 表长减
特点: 特点:以元素在 计算机内" 计算机内"物理 位置相邻" 位置相邻"来表 示线性表中数据 元素之间的逻辑 关系
线性表的这种机内表示称做线性表的顺序存储结构或顺序映像(sequential mapping). 线性表的这种机内表示称做线性表的顺序存储结构或顺序映像 . 通常称这种存储结构的线性表为顺序表. 通常称这种存储结构的线性表为顺序表.
i = 1; // i 的初值为第 1 元素的位序 p = L.elem; // p 的初值为第 1 元素的存储位置 while (i <= L.length && !(*compare)(*p++, e) ++i; (*compare)(*p++, e)) if (i <= L.length) return i; //找到满足条件的元素 else return 0; // 没有找到满足条件的元素 算法的时间复杂度 时间复杂度为 算法的时间复杂度为: } // LocateElem_Sq O( ListLength(L) )
int LocateElem_Sq(SqList L, ElemType e, Status (*compare)(ElemType, ElemType)) {
// 在顺序表中查询第一个满足判定条件的数据元素, 在顺序表中查询第一个满足判定条件的数据元素, // 若存在,则返回它的位序,否则返回 0 若存在,则返回它的位序,
插入 25
删除 24
(b)
图2.2 线性表插入前后的情况 (a)插入前 =8 插入前n= 插入前 (b)插入后 =9 插入后n= 插入后
图2.3 线性表删除前后的情况 (a)删除前 =8 删除前n= 删除前 (b)删除后 =7 删除后n= 删除后
算法2.3如下 如下: 插入运算 算法 如下: Status ListInsert_Sq (SqList &L, int i, ElemType e) { //在顺序线性表 中第 个位置之前插入新的元素 , 在顺序线性表L中第 个位置之前插入新的元素e, 在顺序线性表 中第i个位置之前插入新的元素 //i的合法值为 的合法值为1≤i≤ListLength_Sq(L)+1 的合法值为 if (i<1|| i>L.length+1) return ERROR; //i值不合法 值不合法 if (L.length>=L.listsize) { //当前存储空间已满,增加分配 当前存储空间已满, 当前存储空间已满 newbase = (ElemType *) realloc (L.elem, (L.listsize+LISTINCREMENT)*sizeof(ElemType)); if (!newbase) exit(OVERFLOW); //存储分配失败 存储分配失败 L.elem = newbase; //新基址 新基址 L.listsize += LISTINCREMENT; //增加存储容量 增加存储容量 } q = & (L.elem[i-1]); //q为插入位置 - 为插入位置 for (p = & (L.elem[L.length-1]); p>=q; ――p) - * (p+1) = *p; //插入位置及之后的元素右移 插入位置及之后的元素右移 * q = e; //插入 插入e 插入 ++L.length; //表长增 表长增1 表长增 return OK; } //ListInsert_Sq
(5)时间复杂度 ) 从上述算法可见, 从上述算法可见,当在顺序存储结构的线性表中某个位置上插入或删除一个数据 元素时,其时间主要耗费在移动元素上, 元素时,其时间主要耗费在移动元素上,而移动元素的个数取决于插入或删除元素的位 置. 假设pi是在第 个元素之前插入一个元素的概率,则在长度为n的线性表中插入一 是在第i个元素之前插入一个元素的概率 假设 是在第 个元素之前插入一个元素的概率,则在长度为 的线性表中插入一 个元素时所需移动元素次数的期望值为: 个元素时所需移动元素次数的期望值为:
(6)顺序表的合并算法 ) 算法2.5如下 如下: 算法 如下: void MergeList_Sq (SqList La, SqList Lb, SqList &Lc){ //已知顺序线性表 和Lb中的数据元素按值非递减排列. 已知顺序线性表La和 中的数据元素按值非递减排列 中的数据元素按值非递减排列. 已知顺序线性表 //归并 和Lb得到新的顺序线性表 ,Lc的数据元素也按值非递减排列. 归并La和 得到新的顺序线性表 得到新的顺序线性表Lc, 的数据元素也按值非递减排列 的数据元素也按值非递减排列. 归并 pa = La.elem; pb = Lb.elem; Lc.listsize = Lc.length = La.length + Lb.length; pc = Lc.elem = (ElemType*)malloc(Lc.listsize*sizeof(ElemType)); if (!Lc.elem) exit (OVERFLOW); //存储分配失败 存储分配失败 pa_last = La.elem + La.length – 1; pb_last = Lb.elem + Lb.length – 1; while (pa <= pa_last && pb <= pb_last) { //归并 归并 if (*pa <= *pb) *pc++ = *pa++; else *pc++ = *pb++; } while (pa <= pa_last) *pc++ = *pa++; //插入 的剩余元素 插入La的剩余元素 插入 while (pb <= pb_last) *pc++ = *pb++; //插入 的剩余元素 插入Lb的剩余元素 插入 } //MergeLi除第 个元素的概率,则在长度为n的线性表中删除一 是删除第i个元素的概率 对于删除过程,假设qi是删除第 个元素的概率,则在长度为 的线性表中删除一 个元素时所需移动元素次数的期望值为: 个元素时所需移动元素次数的期望值为: n E dl = ∑ q i ( n i ) i =1 1 qi = 同样假设是等概率的情况, 则有: 同样假设是等概率的情况,即 n ,则有: n 1 n 1 E dl = ∑ ( n i ) = n i =1 2 结论:由此可见,在顺序存储结构的线性表中插入或删除一个数据元素, 结论:由此可见,在顺序存储结构的线性表中插入或删除一个数据元素,平均 约移动表中一半元素.若表长为n,则算法ListInsert_Sq和ListDelete_Sq的时间复杂 约移动表中一半元素.若表长为 ,则算法 和 的时间复杂 度为O(n). 度为 .
相关文档
最新文档