#第三部分 线性部分之线性表(第4章)
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
所谓线性关系 (Linear Relation)(也称为线性 线性关系 结构)是指在数据元素的非空有限集中有且仅 有一个被称为“首元素”的数据元素,有且仅 有一个被称为“尾元素”的数据元素,其余数 据元素均有且仅有一个直接前驱元素,有且仅 有一个直接后继元素。 例如,我们的课本(假设共有n页)就是一种 线性结构:(1) 它有且仅有一个“第1页”; (2) 有且仅有一个“第n页”; (3) 第i页 (1 < i < n) (即其余各页)有且仅有一个直接前驱即第i – 1页,有且仅有一个直接后继即第i + 1页。
∑
i =1
n +1
1 1 1 n ( n + 1) n pi ⋅ li = ∑ ⋅ ( n − i + 1) = ⋅ ( n + ( n − 1) + L + 1) = ⋅ = n +1 n +1 2 2 i =1 n + 1
湖北工业大学计算机学院 沈华 22
《数据结构与应用算法——C语言描述》配套课件
插入元素操作 ListInsert_sq 在顺序表指定位置插入一个数据元素的过程: Step1 将原来第i个位置上的元素至最后一个 元素统统向后平移一位(假设顺序表在插入前 没有满),这样做既可以保证被平移的这些元 素之间和没被平移的元素之间的逻辑关系不被 破坏(它们的物理位置仍相邻),同时又将第 i个位置空出来; Step2 将待插入元素插入到第i个位置上; Step3 线性表长度加1。
线性表的顺序存储结构
例如 线性表L (a1, a2, a3, a4, a5, a6) 的顺序存 储结构图如下: sqlist L;
[0] [1] a1 [2] a2 [3] a3 [4] a4
文本
[5] a5
[6] a6
…… [MAX-1] …… 6 L.len
L.data
湖北工业大学计算机学院 沈华
湖北工业大学计算机学院 沈华 23
《数据结构与应用算法——C语言描述》配套课件
例:在下图所示顺序表的第4个位置上插入一 个新的数据元素e。
[0] a1 [1] a2 [2] a3 [3] a4
文本
[4] a5
[5] a6
…… [MAX-1] …… 6 L.len
L.data
湖北工业大学计算机学院 沈华
线性表的顺序存储结构
例如 线性表L (a1, a2, a3, a4, a5, a6) 的顺序存 储结构图如下: sqlist L;
[0] a1 [1] a2 [2] a3 [3] a4
文本
[4] a5
[5] a6
…… [MAX-1] …… 6 L.len
17
L.data
湖北工业大学计算机学院 沈华
《数据结构与应用算法——C语言描述》配套课件
24
《数据结构与应用算法——C语言描述》配套课件
[0] a1
[1] a2
[2] a3
[3]
[4] a4
文本
[5] a5
[6] a6
…… [MAX-1] …… 6 L.len
L.data
(a) 将第 个元素到第 个元素一起向后平移 位,空出第 个位置(对应的下标为 ) 将第4个元素到第 个元素一起向后平移1位 空出第4个位置 对应的下标为3) 个元素到第6个元素一起向后平移 个位置(
《数据结构与应用算法——C语言描述》配套课件
查找元素操作 LocateElem_sq 算法4.7
int LocateElem_sq(SqList L, ElemType e) { int i; if(1 == ListEmpty_sq(L)) return 0; //查找失败 for(i = 0; i < L.len && L.data[i] != e; i++); if(i < L.len) return i + 1; //查找成功返回数据元素的位序 return 0; //查找失败 O(n) }
湖北工业大学计算机学院 沈华
4
《数据结构与应用算法——C语言描述》配套课件
什么是线性表?
线性表的定义 几个相关概念 线性表的基本运算
湖北工业大学计算机学院 沈华
5
《数据结构与应用算法——C语言描述》配套课件
线性表的定义
Definition 线性表是n (n ≥ 0)个具有相同特性的数据 线性表 元素的有限序列。 记作: (a1, a2, …, ai-1, ai, ai+1, …, an)
湖北工业大学计算机学院 沈华 2
《数据结构与应用算法——C语言描述》配套课件
第三部分内容结构图
湖北工业大学计算机学院 沈华
3
《数据结构与应用算法——C语言描述》配套课件
第四章 线性表 Linear List
什么是线性表?(即线性表抽象数据类型) 线性表的存储结构及基本运算的实现 线性表的应用(主要是单链表的应用)
湖北工业大学计算机学院 沈华
7
《数据结构与应用算法——C语言描述》配套课件
线性表的定义
数据元素之间的逻辑关系(续) a1, a2,…, ai-1均称为ai的前驱元素 前驱元素; 前驱元素 ai+1, ai+2,…, an均称为ai的后继元素 后继元素; 后继元素 通过前面的定义可知: ai (i=2,3,…,n)有且仅有一个直接前驱元素; ai (i=1,2,…,n-1)有且仅有一个直接后继元素。
18
《数据结构与应用算法——C语言描述》配套课件
线性表的顺序存储结构
顺序表中基本运算的实现及算法分析 初始化操作 InitList 查找元素操作 LocateElem 插入元素操作 ListInsert 删除元素操作 ListDelete
湖北工业大学计算机学院 沈华
19
《数据结构与应用算法——C语言描述》配套课件
湖北工业大学计算机学院 沈华 9
《数据结构与应用算法——C语言描述》配套课件
几个相关概念
位序 我们说a1是线性表L的第1个数据元素,a2是 线性表L的第2个数据元素,ai是线性表L的 第i个数据元素,an是线性表的第n个数据元 素,这里的1、2、i和n分别称为a1、a2、ai和 an在L中的位序(Position Number in List)。
《数据结构与应用算法——C语言描述》配套课件
第三部分 线性部分
本部分将主要讨论几种线性结构:线性表、栈、 队列、串和广义表、数组。 这些数据(逻辑)结构均可用来描述数据元素 之间的线性关系 线性关系,它们的区别仅体现在运算和 线性关系 数据类型上。
湖北工业大学计算机学院 沈华
1
《数据结构与应用算法——C语言描述》配套课件
[0] a1 [1] a2 [2] a3 [3] e [4] a4
文本
[5] a5
[6] a6
…… [MAX-1] …… 6 L.len
L.data
(b) 在空出的第 个位置(对应的下标为 )上插入新元素 在空出的第4个位置 对应的下标为3)上插入新元素e 个位置(
[0] a1 [1] a2 [2] a3 [3] e [4] a4
湖北工业大学计算机学院 沈华
6
《数据结构与应用算法——C语言描述》配套课件
线性表的定义
数据元素之间的逻辑关系 在线性表中,相邻的数据元素之间存在 序偶的关系,即 序偶 ai-1领先于ai, ai领先于ai+1(i=1,2,…,n-1), 称 ai-1是ai的直接前驱元素 i+1是 ai 的直接 直接前驱元素,a 直接前驱元素 直接 后继元素。 后继元素
湖北工业大学计算机学院 沈华
8
《数据结构与应用算法——C语言描述》配套课件
几个相关概念
线性表的长度 线性表所含的数据元素个数 n 称为线性表的 长度(the length of list)。 空线性表 把长度为零的线性表(即不包含任何数据元 素的线性表)称为空线性表(empty list), 简称空表。
静态存储分配方式下实现上述基本运算
湖北工业大学计算机学院 沈华
20
《数据结构与应用算法——C语言描述》配套课件
初始化操作 InitList_sq 算法4.1 int InitList_sq(SqList *L) { (*L).len = 0; return 0; //表示初始化成功 } O(1)
湖北工业大学计算机学院 沈华 21
《数据结构与应用算法——C语言描述》配套课件
线性表的顺序存储结构
动态存储分配下的顺序表类型定义 动态 typedef struct{ ElemType *data; int len; int listsize; }sqlist_d;
16
湖北工业大学计算机学院 沈华
《数据结构与应用算法——C语言描述》配套课件
湖北工业大学计算机学院 沈华
10
《数据结构与应用算法——C语言描述》配套课件
线性表的几个基本运算
InitList (&L) 初始化运算 ListEmpty (L) 判空运算 ListFull(L) 判满运算 CreateList(L) 创建运算 ListLength (L) 求长度运算 LocateElem (L, e) 定位运算或称为查找运算 ListInsert (&L, i, e) 插入运算 ListDelete (&L, i, &e) 删除运算 VisitList(L, i, &e) 访问运算
湖北工业大学计算机学院 沈华 14
《数据结构与应用算法——C语言描述》配套课件
线性表的顺序存储结构
静态存储分配下的顺序表类型定义 静态 #define MAX 100 typedef struct{ ElemType data[MAX]; int len; }sqlist;
15
湖北工业大学计算机学院 沈华
湖北工业大学计算机学院 沈华 13
《数据结构与应用算法——C语言描述》配套课件
线性表的顺序存储结构
顺序表中数据元素存储地址间的关系 用Loc(ai)表示数据元素ai的存储地址,并假 设每个数据元素占m个存储单元,则有:
Loc (ai ) = Loc (ai −1 ) + m, i = 2,3,..., n Loc (ai ) = Loc (a1 ) + (i − 1)m, i = 2,3,..., n Loc (a j ) = Loc (ai ) + ( j − i )m, i = 2,3,..., n
26
《数据结构与应用算法——C语言描述》配套课件
时间复杂度分析
最好情况 最好情况是指在第n+1个位置上插入一个新元 素,此时不需要向后移动任何元素,即向后移 动n – (n + 1) + 1 = 0个元素,故时间开销为 O(1); 最坏情况 最坏情况是指在第1个位置上插入一个新元素, 此时需要向后移动原顺序表中的所有元素,即 向后移动n –1 + 1 = n个元素,故时间开销为 O(n);
文本
[5] a5
[6] a6
…… [MAX-1] …… 7 L.len
25
L.data
(c) 修改顺序表的长度(长度加 ) 修改顺序表的长度(长度加1) 湖北工业大学计算机学院 沈华
《数据结构与应用算法——C语言描述》配套课件
算法4.8
int ListInsert_sq(SqList *L, int i, ElemType e) { int j; if(i < 1 || i > (*L).len + 1) return -1; if(1 == ListFull_sq(*L)) return -2; for(j = (*L).len; j >= i; j--) (*L).data[j] = (*L).data[j-1]; (*L).data[i-1] = e; (*L).len++; return 0; 湖北工业大学计算机学院 沈华 }
湖北工业大学计算机学院 沈华 27
《数据结构与应用算法——C语言描述》配套课件
平均情况 平均情况是分析在长度为n的顺序表中任意合 法位置上插入一个新元素,平均需要向后移动 的数据元素个数。 用pi表示在第i个位置上插入的可能性,用li表 示需要向后移动的数据元素个数。假设是在等 概率的情况下进行分析,那么有:
湖北工业大学计算机学院 沈华
11
《数据结构与应用算法——C语言描述》配套课件
线性表的存储结构及基本运算的实现
线性表的顺序存储结构(顺序表) 线性表的链式存储结构(单链表) 线性表的其他链式存储结构
湖北工业大学计算机学院 沈华
12
《数据结构与应用算法——C语言描述》配套课件
线性表的顺序存储结构
什么是线性表的顺序存储结构? 用一组地址连续的 一组地址连续的存储单元来依次 依次存放线性 一组地址连续的 依次 表中的数据元素。 即用地址上的相邻关系来表示数据元素逻辑 上的相邻关系。 采用顺序存储的线性表简称为顺序表 顺序表 (Sequential List)。