数据结构与算法线性表.ppt

合集下载

数据结构与算法Python语言描述【共37张PPT】

数据结构与算法Python语言描述【共37张PPT】
}
// 加工型——map操作! void TraverseList(List &L,
void (*visit)(&ElemType)){ for (i = 0; i < L.length; i++)
(*visit)(L.elem[i]); }
// 注意引用参数的使用!!!
Status GetElem(List L, int i, ElemType &e) {
线性表的顺序表示和实现
GetElem( L, i, &e ) //取线性表中第i个数据元素
初始条件:线性表L已存在。
操作结果:依次对L的每个元素调用函数visit()。
• 直接前驱、直接后继 操作结果:用e返回L中第i个元素的值。
操作结果:若cur_e是L的元素,但不是最后一个,则用next_e
for(i = 1; i <= Lb_len; i++){
• 线性表的顺序表示和实现
• 线性表的链式表示和实现
线性表的顺序表示
• 是指用一组地址连续的存储单元依次存放线性表 的数据元素
以元素在计算机内“物理位置相邻”来表示线性表中数 据元素之间的逻辑相邻
线性表的顺序表示和实现
• 是指用一组地址连续的存储单元依次存放线性表 的数据元素
设每个数据元素需占用C个存储单元 – LOC(ai) = LOC(ai-1) + C – LOC(ai) = LOC(a1) + (i-1)×C
i = 1; p = L.elem;
//在有效范围内查询 while(i <= L.length && !(*compare)(*p++, e))

数据结构与算法--线性表(C++)PPT课件

数据结构与算法--线性表(C++)PPT课件

精选ppt
4
几点说明:
a1 a2 a3 a4 a5 a6
▪(4) 线性表中元素的个数n 称为线性表的长度,
n=0 时称为空表;
▪(5) ai是线性表的第i 个元素,称i 为数据元素ai 的
序号,每一个元素在线性表中的位置,仅取决于它的序 号。
精选ppt
5
线性表的基本操作
1.int Length() const 初始条件:线性表已存在。 操作结果:返回线性表元素个数。
Essential of Lecture Two :
一、线性表的定义 二、线性表---顺序表 三、顺序表的基本操作 四、顺序表的优缺点 五、顺序表的应用
难点
精选ppt
重点
1
一、线性表的定义 ( Linear List )
▪ 【定义】:由n(n≧0)个数据元素(结点)a1,a2, …an组 成的有限序列。其中数据元素的个数n定义为表的长度。
线性表(a1,a2,a3, ... an) 的顺序存储结构
Loc(ai ) = Loc( a1 )+ ( i-1 ) * L
精选ppt
L个单元
a1 a2

ai-1
ai ai+1

an
Loc( a1) Loc( ai )
14
顺序表(SqList)类的定义
// 顺序表类
template <class elemType>
当n=0时称为空表,常常将非空的线性表(n>0)记作:

(a1,a2, ... ... , an)
▪ 例1、26个英文字母组成的字母表
(A,B,C ,... ... , Z)
▪ 例2、某校从1978年到1983年各种型号的计算机拥有 量的变化情况。

数据结构第二章线性表.ppt

数据结构第二章线性表.ppt
构造原理
用一组地址连续的存储单元依次存储线性表的数据元素,数 据元素之间的逻辑关系通过数据元素的存储位置直接反映。
k个单元 (a1,a2,a3,... ...,an)
a1 a2 a3
……
an
LOC(ai)
d1+k=d2 d3
………
dn
所谓一个元素的地址是指该元素占用的
若干(连续的)存储单元的第一个单元的地址。
LOC(a5)=100+(5-1)*4=116
线性表 11
顺序存储结构示意图
(a1,a2,a3,... ...,an)
当前已经占用的空间
尚未使用的空间
a1 a2 a3 … … an-1 an
01 2
n-2 n-1 n
……
n+1
M-1
事先分配给线性表的空间
线性表 12
一般来说,长度为n的线性表(a1,a2,…,an)在计算机中 的结构如下:
INSERT(L,x,i)。 6.删除线性表中第i个数据元素DELETE(L,i)。 7.对线性表中的数据元素进行升序或者降序排序。 8.将两个或两个以上的线性表合并成为一个线性表。 9.将一个线性表分解为两个或两个以上的线性表路】 依次输出线性表中的每个元素的值。
编写在线性表A中删除线性表B中出现的元素的算法。
1 3 57 9
12346
579
【算法思路】 依次检查线性表B中的每个元素,看它是否在线性表
A中。若在A中,则将其从A中删除。
线性表
5
void delete(Sqlist *A,Sqlist *B) {
int i,k;
datatype x;
for(i=1;i<=LENGTH(B);i++) {

北京林业大学《数据结构与算法》课件PPT 第2章 线性表

北京林业大学《数据结构与算法》课件PPT 第2章 线性表

线性表P = (p0,p1,p2,…,pn)
P(x) = 10 + 5x - 4x2 + 3x3 + 2x4
指数 (下标i)
0
1
2
3
系数p[i] 10
5
-4
3
数组表示
(每一项的指数i隐含 在其系数pi的序号中)
4
2
北京林业大学信息学院
Rn(x) = Pn(x) + Qm(x)
线性表R = (p0 + q0,p1 + q1,p2 + q2,…,pm + qm,pm+1,…,pn)
数,即表长
例1 分析26 个英文字母组成的英文表
( A, B, C, D, …… , Z) 数据元素都是字母; 元素间关系是线性 例2 分析学生情况登记表
学号
041810205 041810260 041810284 041810360

姓名
于春梅 何仕鹏 王爽 王亚武

性别
女 男 女 男 :
年龄
下标i 0
1
2
系数 b[i]
8
22 -9
指数 1
7
8
线性表P =((p1, e1), (p2, e2),…,(pm, em))
创建一个新数组c 分别从头遍历比较a和b的每一项
✓指数相同,对应系数相加,若其和不为零,则在c中增加一个新项 ✓指数不相同,则将指数较小的项复制到c中 一北个京多林项业大式学已信遍息历学完院毕时,将另一个剩余项依次复制到c中即可
线性表
北京林业大学信息学院
第2章 线性表
教学目标
1. 了解线性结构的特点 2.掌握顺序表的定义、查找、插入和删除 3.掌握链表的定义、创建、查找、插入和删除 4.能够从时间和空间复杂度的角度比较两种存储结

数据结构线性表PPT.ppt

数据结构线性表PPT.ppt

数据结构线性表PPT.ppt幻灯片 1:标题页数据结构之线性表幻灯片 2:目录线性表的定义线性表的存储结构线性表的基本操作线性表的应用实例线性表的优缺点幻灯片 3:线性表的定义线性表是一种最基本、最简单的数据结构。

它是由 n(n≥0)个数据元素组成的有限序列。

在这个序列中,每个数据元素的位置是确定的,并且它们之间存在着线性的逻辑关系。

比如说,我们日常使用的学号列表、购物清单等,都可以看作是线性表的实例。

线性表中的数据元素可以是各种各样的数据类型,比如整数、字符、结构体等。

幻灯片 4:线性表的特点存在唯一的“第一个”元素和“最后一个”元素。

除第一个元素外,每个元素都有唯一的前驱元素。

除最后一个元素外,每个元素都有唯一的后继元素。

这种线性的逻辑关系使得对线性表的操作相对简单和直观。

幻灯片 5:线性表的存储结构线性表有两种常见的存储结构:顺序存储结构和链式存储结构。

顺序存储结构是指用一组地址连续的存储单元依次存储线性表中的数据元素。

链式存储结构则是通过指针将各个数据元素链接起来。

幻灯片 6:顺序存储结构在顺序存储结构中,数据元素存储在一块连续的内存空间中。

优点是可以随机访问,即可以直接通过下标快速找到对应的元素。

缺点是插入和删除操作可能需要移动大量的元素,效率较低。

幻灯片 7:链式存储结构链式存储结构中,每个数据元素由两部分组成:数据域和指针域。

数据域用于存储数据元素的值,指针域用于指向后继元素的存储位置。

优点是插入和删除操作比较方便,不需要移动大量元素。

缺点是不能随机访问,需要通过指针依次遍历找到目标元素。

幻灯片 8:线性表的基本操作常见的基本操作包括:初始化线性表、销毁线性表、判断线性表是否为空、获取线性表的长度、获取指定位置的元素、在指定位置插入元素、删除指定位置的元素、查找指定元素等。

幻灯片 9:初始化线性表初始化操作就是为线性表分配内存空间,并将其初始化为空表。

幻灯片 10:销毁线性表销毁操作则是释放线性表所占用的内存空间。

数据结构线性表ppt课件

数据结构线性表ppt课件

01
02
03
04
插入操作
在链表的指定位置插入一个新 节点,需要修改相邻节点的指
针。
删除操作
删除链表的指定节点,需要修 改相邻节点的指针。
查找操作
从链表的头节点开始,顺序遍 历链表,直到找到目标元素或
遍历到链表末尾。
遍历操作
从链表的头节点开始,顺序访 问每个节点,直到遍历到链表
末尾。
04 线性表应用举例 与问题分析
多项式表示与计算问题
01
02
03
多项式表示方法
数组表示法和链表表示法 。
数组表示法
将多项式的系数按次序存 放在一个数组中,通过下 标表示对应的幂次。
链表表示法
每个节点包含系数和指数 两个数据域,以及一个指 向下一个节点的指针域。
一元多项式相加算法设计
• 算法思想:将两个多项式中的同类项系数相加,得到新的 多项式。
删除操作
删除指定位置i的元素,需要将i之后的元素都向前移动 一个位置。
03 链式存储结构及 其实现
链式存储结构原理及特点
链式存储结构原理
使用一组任意的存储单元存储线 性表的数据元素(这组存储单元 可以是连续的,也可以是不连续 的)。
链式存储结构特点
逻辑上相邻的元素在物理位置上 不一定相邻,元素之间的逻辑关 系是通过指针链接来表示的。
...,an组成的有序序列。
性质
集合中必存在唯一的一个“第一元素 ”。
集合中必存在唯一的一个“最后元素 ”。
除最后元素之外,均有唯一的后继。
除第一元素之外,均有唯一的前驱。
线性表与数组关系
数组是线性表的一种表现和实现形式。
线性表更侧重于逻辑概念,而数组则是这种逻辑概念在计算机中的一种存储方式。

第2章 线性表 (数据结构教程PPT课件)

第2章 线性表 (数据结构教程PPT课件)

3.在数组a中检索(查找)值为X的数据元素
int locate (int a[ ],int n, int x) { int i; i=0; while((i<=n-1)&&(a[i]!=x)) i++; if(i<=n-1) return (i); /*返回的是存储位置*/ else return (0);} }
(2)按值查找即定位 Locate_LinkList(L,x) Lnode * Locate_LinkList( LinkList L, datatype x) /*在单链表L中查找值为x的结点,找到后 返回其指针,否则返回空*/ { Lnode * p=L->next; while ( p!=NULL && p->data != x) p=p->next; return p; }
2.2.2 典型操作的算法实现
1. 初始化线性表L
SeqList *init_SeqList( )
{ SeqList *L; L=malloc(sizeof(SeqList)); L->last=-1; return L; }
2.在数组a第i个数据元素之(ai-1)前插入数据 元素X insert (int a[ ],int n,int i, int x) { int j; for(j=n-1;j>=i-1;j--) a[j+1]=a[j]; /* 结点移动 */ a[i-1]=x; /*新元素插入*/ n++; /*修改长度*/ }
4.删除数组a第i个数据元素(ai-1) delete (int a[ ],int n,int i) { int j; for(j=i;j<=n;j++) a[j-1]=a[j]; /* 结点移动 */ n--; /*修改长度*/ }

数据结构(线性表)总结课件-2024鲜版

数据结构(线性表)总结课件-2024鲜版

链表的查找
从头结点开始遍历链表,比较每个结点的 数据域与查找值,直到找到目标结点或遍 历完整个链表。
链表的遍历
从头结点开始,顺着指针依次访问每个结 点,直到尾结点。
链表的删除
删除指定位置的结点,需要修改相邻结点 的指针链接关系,并释放被删除结点的存 储空间。 2024/3/28
链表的插入
在指定位置插入一个新结点,需要修改相 邻结点的指针链接关系。
使用线性表来存储学生成绩信息,每个元素代表一个学生的成绩记录,
包含学号、姓名、各科成绩等属性。可以方便地进行学生成绩的录入、
查询、排序等操作。
20
05
线性表性能评价与改进策略
2024/3/28
21
时间复杂度分析
插入操作
在已知位置插入一个元素,需要移动插入位置 及之后的元素,时间复杂度为O(n)。
2
链表由一系列结点(每一个结点包含数据域和指 针域)组成,结点可以在运行时动态生成。
3
链表的特点是插入和删除操作灵活,不需要移动 大量元素,但查找操作相对较慢,需要从头结点 开始遍历。
2024/3/28
14
单链表、双向链表和循环链表
01
02
03
单链表
每个结点只包含一个指向 后继结点的指针,从头结 点开始,顺着指针可以遍 历整个链表。
02
数组的大小在创建时就已经确定,无法动态扩展。
不利于数据的动态变化
03
对于经常进行插入和删除操作的数据,使用数组作为存储结构
可能不是最优选择。
12
03
链式存储结构——链表
2024/3/28
13
链表定义及特点
1
链表是一种物理存储单元上非连续、非顺序的存 储结构,数据元素的逻辑顺序是通过链表中的指 针链接次序实现的。

数据结构与算法(共11张PPT)

数据结构与算法(共11张PPT)

(b)入队3个元素(c)出队3个元素
(b) d, e, b, g入队
利用一组连续的存储单元(一维数组)依次存放从队 在循环队列中进行出队、入队操作时,队首、队尾指
队列示意图
在非空队列里,队首指针始终指向队头元素,而队
(b) d, e, b, g入队
8
Q.rear
a5
a4
Q.front
(d)入队2个元素
a1, a2, … , an
的指修针改 和是队依列先中进元先素出的Q的变.re原化a则情r 进况行。的,如图所示。
a3
Q.front
a2
a1
首到队尾的各个元素,称为顺序队列。
(c)
d, e出队Q.front
Q.front
◆出队:首先删去front所指的元素,然后将队首指针front+1,并
◆rear所指的单元始终为空(a。)空队列
i
i, j, k入队
(e)
1
2
3
k
r
01
j5
2
front
43
i
b, g出队
(f )
r, p,
p rear
s, t入队
循环队列操作及指针变化情况
入队时尾指针向前追赶头指针,出队时头指针向前追赶尾指针 ,故队空和队满时头尾指针均相等。因此,无法通过front=rear来 判断队列“空”还是“满”。解决此问题的方法是:约定入队前,
数据结构与算法
1算法基础 2数据结构
3栈
4队列
5链表 6树和二叉树
7查找
4队列
✓队列的基本概念 ✓队列运算
✓循环队列及其运算
4队列
1.队列的基本概念

数据结构线性表ppt课件(2024)

数据结构线性表ppt课件(2024)
2024/1/30
顺序存储定义
用一段地址连续的存储单元依次 存储线性表的数据元素。
存储方式
逻辑上相邻的元素,其物理存储 位置也相邻。
8
顺序表基本操作实现
初始化操作
创建一个空表,分配存储空间。
插入操作
在指定位置插入一个元素,需移动插入位置后的所有元素。
删除操作
删除指定位置的元素,需移动删除位置后的所有元素。
数据结构线性表ppt课 件
2024/1/30
1
目录
2024/1/30
• 线性表基本概念与特点 • 顺序存储结构及其实现 • 链式存储结构及其实现 • 线性表应用与案例分析 • 线性表性能分析与优化策略 • 总结回顾与拓展延伸
2
01
线性表基本概念与特点
2024/1/30
3
线性表定义及性质
线性表定义:由n(n>=0)个具有相 同类型的数据元素(结点)a1,a2,
动态分配
如果使用动态数组或链表实现线性表,空间复杂度为O(n),其中n为当前线性表中的元素数量。这种 实现方式可以灵活应对元素数量的变化。
2024/1/30
26
优化策略探讨
使用更高效的数据结构
例如,可以使用哈希表或二叉搜索树等数据结构 来优化查找操作的时间复杂度。
批量操作优化
对于批量插入、删除或查找操作,可以通过一次 性处理多个元素来减少操作次数,从而提高效率 。
任何一种逻辑结构都可以用多种存储结构表示。
03
5
线性表基本操作
插入操作
在指定位置插入一 个元素。
查找操作
查找指定元素的位 置。
初始化操作
建立一个空的线性 表。
2024/1/30

数据结构与算法分析第2章线性表2精品PPT课件

数据结构与算法分析第2章线性表2精品PPT课件
●线性表的逻辑结构特征: (1)有且仅有一个开始结点a1,没有前驱,
只有一个直接后继a2 (2)有且只有一个终端结点an,没有后继,
只有一个直接前驱 (3)其余内部结点ai(1<i<n)有且仅有一个
前驱ai-1和一个后继ai+1
一、线性表的概念
● 线性表的基本运算:创建、删除线性表;增、 删、查、改结点;辅助管理操作:求表长等。
三、链表
(1)单链表——建表算法
● 头插法:
head 123
P->next = head->next Head->next = p
12
1
● 尾插法: head 11
last->next = p p->next = NULL
22
3
三、链表
(1)单链表——结点的删除算法
pre dele
head
3
2
1
Link <T> * head; //定义头指针 int len; //存储链表的长度 public: linkList( ){
head= new Link <T>( ); len=0; } ~linkList( ) { Link<T> *p; while(head!=NULL) {
p=head; head=head->next; date <class T>
Class CarrList:public CList<T>{
●顺pr序Tiva*表taeL::ist;按//T顺类型序的方指式针,存存储储的线性线表性实表例,采用定长 的一维int数ma组xS存ize储; 结//实构例。的最大长度

数据结构线性表PPT

数据结构线性表PPT

2
因此插入算法的平均时间复杂度为O(n)。
(9) 删除数据元素ListDelete(L,i,e)
删除顺序表L中的第i(1≤i≤ListLength(L))个元 素。
思路:如果i值不正确,则显示相应错误信息; 否则将线性表第i个元素以后元素均向前移动一个 位置,这样覆盖了原来的第i个元素,达到删除该元 素的目的,最后顺序表长度减1。
2.2.2 顺序表基本运算的实现
一旦采用顺序表存储结构,我们就可以用C/C++ 语言实现线性表的各种基本运算。为了方便,假设 ElemType为char类型,使用如下自定义类型语句:
typedef char ElemType;
1. 建立顺序表 其方法是将给定的含有n个元素的数组的
每个元素依次放入到顺序表中,并将n赋给顺 序表的长度成员。算法如下:
void unionList(List LA,List LB,List &LC) {
int lena,lenc,i; ElemType e; InitList(LC); for (i=1;i<=ListLength(LA);i++)
/*将LA的所有元素插入到Lc中*/ { GetElem(LA,i,e);
int ListEmpty(SqList *L) {
return(L->length==0); }
本算法的时间复杂度为O(1)。
(4) 求线性表的长度ListLength(L)
该运算返回顺序表L的长度。实际上只需返回 length成员的值即可。
int ListLength(SqList *L) {
} }
由 于 LocateElem(LA,e) 运 算 的 时 间 复 杂 度 为 O(ListLength(LA)),所以本算法的时间复杂度为:

数据结构课件-线性表顺序表-PPT精品文档

数据结构课件-线性表顺序表-PPT精品文档

2.1.2 线性表的ADT表示
ADT List{
数据对象:L={ai | ai∈元素集合,i=1,2,…n,n≥0} 数据关系:R= {〈ai-1,ai〉 | ai-1,ai∈元素集合,i=1, 2,……n} 基本操作:{ 构造空表initList(&L) 销毁线性表destroyList(&L)
最常见的数据组织方式:表格形式的数据
编号 名称 SO2含量 水质指标 悬浮物指标
宗地号
周长
面积
使用者
土地等级
点号
等级
X
Y
H
学号
姓名
性别
籍贯
年龄
成绩
2.1 线性表的基本概念和运算
2.1.1 逻辑结构定义
定义:线性表是由n(n≥0)个数据元素a1,a2,……, an构成的有限序列。n为表的长度,n=0时称为空表。 非空的线性表(n>0)记作( a1,a2,……,an )。
THE NEXT IS
线性表的存储结构及相应算法的实现 • 顺序存储:顺序表 • 链接存储:链表 数组 指针
2.2 线性表的顺序存储结构
2.2.1 顺序表
用一组连续的存储单元依次存储线性表的元素 Loc(ai+1)=Loc(ai) + c Loc(ai)=Loc(a1) + (i-1)*c 1≤i≤n c为线性表每个元素占用的存储单元
• 取直接前趋 priorElem(L, cur_e,&prior_e)
• 取直接后继 nextElem(L, cur_e,&next_e) 学号 01 02 03
04 … 30
成绩 78 90 87
84 … 83
PRIOR(L, 87)

数据结构课件之线性表

数据结构课件之线性表
学C
我觉得老师讲解得非常详细,特别是对于一些难以理解的概念和算法 ,通过老师的讲解和示例,我很快就掌握了。
未来发展趋势预测
线性表作为基础数据结构,其重要性不言而喻。随着大数据、人工智能等领域的不 断发展,对线性表的处理能力和效率要求也越来越高。
未来可能会出现更多针对线性表的优化算法和技术,以满足不同应用场景的需求。
存储空间动态分配,可以充分利 用计算机内存空间,实现灵活的
内存动态管理。
插入、删除等操作不需要移动大 量元素,只需要修改相应的指针
即可,因此具有较高的效率。
逻辑结构与物理结构不一定一致 ,因此可以方便地实现各种复杂
的数据结构。
链式存储结构实现方式
每个节点包含两个指针域,分别 指向其前驱节点和后继节点。
从线性表的中间位置开始,同时 向前和向后遍历,直到遍历完整 个线性表。这种遍历方式在某些
算法中有特殊应用。
03
线性表顺序存储结构
Chapter
顺序存储结构定义
顺序存储结构是用一段连续的存储空间来依次存放线性表的 各个元素。
在这种存储结构中,线性表中第一个元素的存储地址作为线 性表的起始地址,每个元素的存储地址是其逻辑序号与元素 所占存储单元大小的乘积加上起始地址。
设置初始状态
将线性表的长度设为0,表示初始 时线性表为空。
插入操作
01
02
03
确定插入位置
根据需要插入元素的位置 ,确定该位置在线性表中 的序号。
移动元素
从线性表的最后一个元素 开始,依次将每个元素向 后移动一个位置,直到达 到插入位置。
插入新元素
在插入位置处插入新元素 ,并更新线性表的长度。
删除操作
线性表的操作算法

数据结构线性表pptppt课件

数据结构线性表pptppt课件

线性表与数组关系
联系
数组是一种特殊的线性表,其元素按照顺序存储在连续的内存空 间中,可以通过下标直接访问元素。
区别
线性表是一种更为抽象的数据结构,它只规定了元素之间的逻辑 关系,而并没有规定元素的具体存储方式。数组则是一种具体的 存储结构,它规定了元素在内存中的存储方式和访问方式。此外 ,线性表还支持动态调整大小,而数组的大小在定义时需要确定 ,不能动态调整。
80%
复杂度分析
多项式计算的复杂度与多项式的 项数有关,通常为O(n),其中n 为多项式的项数。
一元多项式相加问题
问题描述
01
给定两个一元多项式,求它们的和。
解决方案
02
将两个多项式分别用线性表表示,然后遍历两个线性表,将相
同指数的项相加,得到新的线性表表示的和多项式。
示例代码
03 略
稀疏矩阵压缩存储问题
数据结构线性表pptppt课件

CONTENCT

• 线性表基本概念与特点 • 顺序存储结构及其操作 • 链式存储结构及其操作 • 线性表应用举例与问题分析 • 线性表性能评价与改进策略 • 总结回顾与拓展延伸
01
线性表基本概念与特点
线性表定义及逻辑结构
线性表定义
线性表是一种具有n个元素的有限序 列,其中元素按照顺序排列,每个元 素有且仅有一个前驱和一个后继(除 首尾元素外)。
删除操作
删除指定位置的元素,需要移 动删除位置之后的元素,时间 复杂度为O(n)。
查找操作
顺序查找的时间复杂度为O(n) ,二分查找的时间复杂度为 O(log n)(针对有序线性表) 。
空间复杂度分析
静态分配
预分配固定大小的数组空间,空间复 杂度为O(1)。

数据结构课件之线性表(ppt 86页)

数据结构课件之线性表(ppt 86页)

删除算法
int DelList(SeqList *L,int i,ElemType *e)
/*在顺序表L中删除第i个数据元素,并用指针参数e返回其值*/
{ int k;
if((i<1)||(i>L->last+1))
{ printf(“删除位置不合法!”); return(ERROR); }
*e= L->elem[i-1]; /* 将删除的元素存放到e所指向的变量中*/
loc(ai) =loc(a1)+(i-1)×k
8
15.10.2019
顺序存储结构示意图
存储地址
Loc(a1) Loc(a1)+(2-1)k

loc(a1)+(i-1)k

loc(a1)+(n-1)k
...
loc(a1)+(maxlen-1)k
内存空间状态
a1 a2

ai

an
9
逻辑地址
1 2

i
操作前提:L为未初始化线性表。 操作结果:将L初始化为空表。 操作前提:线性表L已存在。 操作结果:将L销毁。 操作前提:线性表L已存在 。 操作结果:将表L置为空表。
………
}ADT LinearList
6
15.10.2019
2.2 线性表的顺序存储
2.2.1 线性表的顺序存储结构 2.2.2 线性表顺序存储结构上的基本运算
17
15.10.2019
删除算法示意
将线性表(4,9,15,21,28,30,30,42,51,62)中的第5个元素 删除。
序号
1 2 3 4 5 6 7 8 9 10 4 9 15 21 28 30 30 42 51 62
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

线性结构分类
按操作划分
线性表
• 所有表目都是同一类型结点的线性表 • 不限制操作形式 • 根据存储的不同分为:顺序表,链表
栈(LIFO, Last In First Out)
• 插入和删除操作都限制在表的同一端进行
队列(FIFO, First In First Out)
• 插入操作在表的一端, 删除操作在另一端
bool append(const T value); // 在表尾添加一个元素value,表的长度增1
bool insert(const int p, const T value);
// 在位置p上插入一个元素value,表的长度增1
bool delete(const int p);
// 删除位置p上的元素,表的长度减 1
bool getPos(int & p, const T value)
// 查找值为value的元素并返回其位置
bool getValue(const int p, T& value);
// 把位置p的元素值返回到变量value中
bool setValue(const int p, const T value);// 用value修改位置p的元素值
有序性:各数据元素在线性表中都有自己的位置,且 数据元素之间的相对位置是线性的
线性结构
包括:
简单的
• 线性表 •栈 • 队列 • 散列表
高级的
• 广义表 • 多维数组 • 文件
……
线性结构分类
按访问方式划分
直接访问型(direct access) 顺序访问型( sequential access) 目录索引型(directory access)
对于有限集K , 它存在一个唯一的终止结点,该结点有一个唯一 的前驱而没有后继;
其它的结点皆称为内部结点,每一个内部结点都有且仅有一个唯 一的前驱,也有一个唯一的后继;
a0, a1, …, an-1
< ai, ai+1> ai是ai+1的前驱, ai+1是ai的后继
线性结构
特点:
均匀性:虽然不同线性表的数据元素可以是各种各样 的,但对于同一线性表的各数据元素必定具有相同的 数据类型和长度
顺序表
数组存储 读写其元素很方便 ,通过下标即可指
定位置
只要确定了首地址,线性表中任意数据元素都 可以随机存取。地址计算如下所示:
loc(ki) = loc(k0) + c* i c = sizeof(ELEM)
顺序表
逻辑地址 (下标)
0 1
… i

数据元素
k0 k1 … ki
n-1
kn-1
存储地址 数据元素
Loc(k0) k0 Loc(k0)+c k1
……
Loc(k0)+i*c
ki

Loc(k0)+(n-1)*c kn-1
顺序表是一种随机存取的存储结构
顺序表类定义
class arrList : public List<T> {
// 顺序表,向量
private:
// 线性表的取值类型和取值空间
2.1 线性表 (linear list)
三个方面
线性表的逻辑结构 线性表的存储结构 线性表运算分类
线性表的逻辑结构
线性表:
由称为元素(element)的数据项组成的一种有限且 有序的序列,这些元素也可称为结点或表目
二元组(K , r) :
由结点集K,以及定义在结点集K上的线性关系 r 所组 成的线性结构
T *aList ;
// 私有变量,存储顺序表的实例
int maxSize;
// 私有变量,顺序表实例的最大长度
int curLen;来自// 私有变量,顺序表实例的当前长度
int position;
// 私有变量,当前处理位置
public:
// 顺序表的运算集
arrList(const int size) {
数据结构与算法
第2章 线性表
主要内容
线性结构 顺序表 链表 线性表实现方法的比较
线性结构
元素间满足线性关系
“一对一”的关系 按此关系结构中的所有元素排成一个线性序列
二元组B = (K, R) , K = {a0, a1, …, an-1 }, R = {r} :
结点集K中有一个唯一的开始结点,它没有前驱,但有一个唯一 的后继;
// 创建一个新的顺序表,参数为表实例的最大长度
maxSize = size; aList = new T[maxSize]; curLen = position = 0;
}
~arrList() {
// 析构函数,用于消除该表实例
delete [] aList;
}
void clear() {
// 将顺序表存储的内容清除,成为空表
线性表所包含的结点个数称为线性表的长度,它是线 性表的一个重要参数;长度为0的线性表称为空表;
线性表的关系 r,简称前驱/后继关系,具有反对称性 和传递性
线性表逻辑结构
主要属性包括:
线性表的长度 表头(head) 表尾 (tail) 当前位置(current position)
线性表的存储结构
bool getPos (int &p, const T value);
// 把值为value的元素所在位置返回到变量p中
};
2.2 顺序表(array-based list)
采用定长的一维数组存储结构 也称向量
主要特性:
元素的类型相同 元素顺序地存储在连续存储空间中,
每一个元素有唯一的索引值 使用常数作为向量长度
定长的一维数组结构
又称为向量型的顺序存储结构
变长的线性表存储结构
链接式存储结构
线性表的存储结构
顺序表
按索引值从小到大存放在一片相邻的连续区域 紧凑结构,存储密度为1
链表
单链表 双链表 循环链表
………..
线性表运算分类
创建线性表的一个实例list(-) 清除线性表(即析构函数)~list() 获取有关当前线性表的信息 访问线性表并改变线性表的内容或结
构 线性表的辅助性管理操作
线性表的运算
建立线性表 清除线性表 插入一个新元素 删除某个元素 修改某个元素 排序 检索
线性表类模板
template <class T>
class List {
void clear();
// 置空线性表
bool isEmpty();
// 线性表为空时,返回true
相关文档
最新文档