数据结构第03次课-线性表A
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
// 元素前移一个位置 表长减1 // 表长减1
19
练习题: LA=(3,5,8,11) =(3,5,8,11 练习题:设有线性表 LA=(3,5,8,11)和 LB=(2,6,8,9,11,15,20); LB=(2,6,8,9,11,15,20); ① 若LA和LB分别表示两个集合A和B,求新集合 LA和LB分别表示两个集合A 分别表示两个集合 B( 操作,相同元素不保留); A=A U B(‘并’操作,相同元素不保留); 预测输出: 预测输出:LA=(3,5,8,11, 2,6,9,15,20) ( ) LA与LB表归并 要求仍有序(相同元素要保留) 表归并, ② 将LA与LB表归并,要求仍有序(相同元素要保留) 预测输出:LC=( 3,5,6,8,8,9,11,11来自百度文库15,20 6,8,8,9,11,11, 预测输出:LC=(2, 3,5,6,8,8,9,11,11,15,20)
18
1 2 3 4 5 6 7 8
12 13 21 24 28 30 42 77
实现步骤: 实现步骤:? • 将第 至第 位的元素向前移动一个位置; 将第i 至第n 位的元素向前移动一个位置; • 表长减 。 表长减1。 注意:事先需要判断,删除位置i 是否合法? 注意:事先需要判断,删除位置 是否合法 应当有1≤i≤n 或 i=[1, n] 核心语句: 核心语句: for (j=i+1;j<=n;j++) a[ja[j-1]=a[j]; n--; --;
数据元素 线性起点
下标,是元素的 下标, 序号,表示元素 序号, 在表中的位置
ai的直接前趋 ai的直接后继 线性终点 n为元素总个 n=0时称为 空表 时称为
数,即表长
7
例1 分析一副扑克的点数组成的英文表
数据元素都是牌面点数; 元素间关系是线性 数据元素都是牌面点数 元素间关系是线性 (2,3,4,…,J,Q,K,A)
(逻辑、存储 逻辑、 和运算) 和运算)
线性表
第2章 章
5
第2章 线性表 章
2.1 线性表的逻辑结构 2.2 线性表的顺序表示和实现 2.3 线性表的链式表示和实现 2.4 应用举例
2.1 线性表的逻辑结构
2.1.1 线性表的定义:用数据元素的有限序列表示 线性表的定义:
(a1, a2, … ai-1,ai, ai+1 ,…, an) + ,
显然,顺序表修改操作的时间效率是 显然,顺序表修改操作的时间效率是T(n)=O(1)
15
2)插入 在线性表的第i个位置前插入一个元素 2)插入 在线性表的第i个位置前插入一个元素
在线性表的第i个位置前插入一个元素的示意图如下: 在线性表的第i个位置前插入一个元素的示意图如下:
1 2 3 4 插入25 插入25→ 5 6 7 8 12 13 21 24 28 30 42 77 1 2 3 4 5 6 7 8 9 12 13 21 24 25 28 30 42 77
数据元素都是记录 元素间关系是线性 数据元素都是记录; 元素间关系是线性 记录 同一线性表中的元素必定具有相同特性 同一线性表中的元素必定具有相同特性
8
练:判断下列叙述的正误: 判断下列叙述的正误:
√
1. 线性表的逻辑结构定义是唯一的,不依赖 线性表的逻辑结构定义是唯一的, 于计算机。 于计算机。 2. 线性结构反映结点间的逻辑关系是一对一 的。 3. 一维数组是线性表,但二维或 维数组不 一维数组是线性表,但二维或N维数组不 是。 4. “同一数据逻辑结构中的所有数据元素都 同一数据逻辑结构中的所有数据元素都 具有相同的特性” 具有相同的特性 ” 是指数据元素所包含 的数据项的个数都相等。 的数据项的个数都相等。
思考:若插入在尾结点之后,则根本无需移动(特别快); 思考:若插入在尾结点之后,则根本无需移动(特别快); 若插入在首结点之前,则表中元素全部要后移(特别慢); 若插入在首结点之前,则表中元素全部要后移(特别慢); 若要考虑在各种位置插入( 种可能) 平均移动次数 该如何计算? 移动次数, 若要考虑在各种位置插入(共n+1种可能)的平均移动次数,该如何计算? 种可能
13
一个一维数组M,下标的范围是0 M,下标的范围是 例1 一个一维数组M,下标的范围是0到 9,每个数组元素用相邻的5个字节存储。 每个数组元素用相邻的5个字节存储。 存储 存储器按字节编址,设存储数组元素M 存储器按字节编址,设存储数组元素M[0] 的起始地址是98 98, 的起始地址是98,则M[3]的起始地址 113 是 地址计算通式为: 解:地址计算通式为: LOC(ai) = LOC(a1) + L *(i-1) ( ) 因此:LOC( M[3] ) = 98 + 5 ×(3-0) =113 因此:
每课一贴: 每课一贴: 两个人在森林里,遇到了一只大老虎。 就赶 两个人在森林里,遇到了一只大老虎。A就赶 紧从背后取下一双更轻便的运动鞋换上。 急死了 急死了, 紧从背后取下一双更轻便的运动鞋换上。B急死了, 骂道: 你干嘛呢,再换鞋也跑不过老虎啊! 骂道:“你干嘛呢,再换鞋也跑不过老虎啊!” A说:“我只要跑得比你快就好了。”二十一世纪, 说 我只要跑得比你快就好了。 二十一世纪, 没有危机感是最大的危机。即使是电信,银行, 没有危机感是最大的危机。即使是电信,银行, 保险, 保险,甚至是公务员这些我们以为非常稳定和有 保障的职业,也会面临许多的变数。 保障的职业,也会面临许多的变数。更多的老虎 来临时,我们有没有准备好自己的跑鞋? 来临时,我们有没有准备好自己的跑鞋?
3
线性结构特点: 线性结构特点:在数据元素的非空有限集中
– 存在唯一的一个被称作“第一个”的数据元素 存在唯一的一个被称作“第一个” 唯一的一个被称作 – 存在唯一的一个被称作“最后一个”的数据元素 存在唯一的一个被称作“最后一个” 唯一的一个被称作 – 除第一个元素外,集合中的每个数据元素均只有一个前驱 除第一个元素外,集合中的每个数据元素均只有一个前驱 – 除最后一个元素外,集合中的每个数据元素均只有一个后继 除最后一个元素外,集合中的每个数据元素均只有一个后继 简言之,线性结构反映结点间的逻辑关系是 一对一 一对一(1:1) 的 简言之,
例2 分析学生情况登记表
学号 2001011810205 2001011810260 2001011810284 2001011810360 : 姓名 管春燕 周 刚 石文娟 杨 扬 : 性别 女 男 女 男 : 年龄 18 18 18 18 : 班级 2001级电信016班 2001级电信017班 2001级通信011班 2001级通信012班 :
14
2.2.2 顺序表的实现(或操作) 顺序表的实现(或操作) 回忆:数据结构基本运算操作有: 回忆:数据结构基本运算操作有: 修改、插入、删除、查找、 修改、插入、删除、查找、排序 1) 修改 通过数组的下标便可访问某个 特定元素并修改之。 特定元素并修改之。
核心语句: 核心语句: V[i]=x;
线性结构的定义: 线性结构的定义:
若结构是非空有限集, 若结构是非空有限集,则有且仅有一个开始结 点和一个终端结点, 点和一个终端结点,并且所有结点都最多只有一个 直接前趋和一个直接后继。 直接前趋和一个直接后继。
:(a 可表示为:( 1 , a2 , ……,
a n)
4
线性结构包括线性表、堆栈、队列、字符串、 线性结构包括线性表、堆栈、队列、字符串、 数组等等,其中,最典型、最常用的是--数组等等,其中,最典型、最常用的是
9
√
×
×
2.2 线性表的顺序表示和实现
2.2.1 顺序表的表示 2.2.2 顺序表的实现 2.2.3 顺序表的运算效率分析 顺序表小结 顺序表小结
10
2.2.1 顺序表的表示
线性表的顺序表示又称为顺序存储结构或顺序映像。 线性表的顺序表示又称为顺序存储结构或顺序映像。 顺序存储结构 顺序存储定义: 逻辑上相邻的数据元素存储在 顺序存储定义: 逻辑上相邻的数据元素存储在物 的数据元素存储在物 把 理上相邻的存储单元中的存储结构 的存储单元中的存储结构。 理上相邻的存储单元中的存储结构。 简言之,逻辑上相邻, 简言之,逻辑上相邻,物理上也相邻 顺序存储方法: 顺序存储方法: 用一组地址连续 地址连续的存储单元依次 用一组 地址连续 的存储单元依次 存储线性表的元素,可通过数组V[n]来实现 数组V[n]来实现。 存储线性表的元素,可通过数组V[n]来实现。
11
线性表的顺序存储结构示意图
地址 b=LOC(a1) b+ L b +(i-1)L +(i-1)L 内容 a1 a2 …… ai ai+1 …… b +(n-1)L +(n-1)L an 元素在表中的位序 L 1 2 i i+1 n 空闲区
12
线性表顺序存储特点: 线性表顺序存储特点:
1. 逻辑上相邻的数据元素,其物理上也相邻; 逻辑上相邻的数据元素,其物理上也相邻; 2. 若已知表中首元素在存储器中的位置,则其他元素 若已知表中首元素在存储器中的位置, 存放位置亦可求出( )。计算方法是 存放位置亦可求出(利用数组下标)。计算方法是 (参见存储结构示意图): 设首元素a1的存放地址为LOC(a1)(称为首地址), 设首元素 的存放地址为 (称为首地址), 首地址 设每个元素占用存储空间(地址长度) 字节, 设每个元素占用存储空间(地址长度)为L字节, 字节 则表中任一数据元素的存放地址 存放地址为 则表中任一数据元素的存放地址为: LOC(ai) = LOC(a1) + L *(i-1) ( ) LOC(ai+1) = LOC(ai)+L 注意:Java语言中的数组的下标从 开始, 语言中的数组的下标从0 注意:Java语言中的数组的下标从0开始, V[n]的有效范围是V[0]~V[n的有效范围是V[0] 即:V[n]的有效范围是V[0]~V[n-1]
// 元素后移一个位置 插入x // 插入x 表长加1 // 表长加1
17
3)删除 删除线性表的第 线性表的第i 3)删除 删除线性表的第i个位置上的元素
删除顺序表中某个指定的元素的示意图如下: 删除顺序表中某个指定的元素的示意图如下:
1 2 3 4 5 6 7 8 9 12 13 21 24 25 28 30 42 77
按规律插入 插入到尾部
20
2.2.3 顺序表的运算效率分析
时间效率分析: 时间效率分析 • 算法时间主要耗费在移动元素的操作上,因此 算法时间主要耗费在移动元素的操作上, 移动元素的操作上 计算时间复杂度的基本操作(最深层语句频度) 计算时间复杂度的基本操作(最深层语句频度) T(n)= O (移动元素次数 移动元素次数) 移动元素次数 • 移动元素的个数取决于插入或删除元素的位置 移动元素的个数取决于插入或删除元素的位置. 讨论1: 讨论 :若在长度为 n 的线性表的第 i 位前 插入一 元素,则向后移动元素的次数f(n)为: 元素,则向后移动元素的次数 为 f(n) = n – i + 1
1
数据结构课程的内容
2
生活实例: 生活实例: (2,3,4,…,J,Q,K,A)
学号 2001011810205 2001011810260 2001011810284 2001011810360 : 姓名 管春燕 周 刚 石文娟 杨 扬 : 性别 女 男 女 男 : 年龄 18 18 18 18 : 班级 2001级电信016班 2001级电信017班 2001级通信011班 2001级通信012班 :
16
实现步骤: 实现步骤:? • 将第n至第 位的元素向后移动一个位置; 至第i 的元素向后移动一个位置 向后移动一个位置; 至第 • 将要插入的元素写到第 个位置; 将要插入的元素写到第i个位置 个位置; • 表长加 。 表长加1。 注意:事先应判断: 插入位置i 是否合法?表是否已 注意:事先应判断 插入位置 是否合法 表是否已 应当有1≤i≤n+1 或 i=[1,n+1] 满? 应当有 核心语句: 核心语句: (j=n;j>=i;j---) for (j=n;j>=i;j--) a[j+1]=a[j]; a[i]=x; n++;
19
练习题: LA=(3,5,8,11) =(3,5,8,11 练习题:设有线性表 LA=(3,5,8,11)和 LB=(2,6,8,9,11,15,20); LB=(2,6,8,9,11,15,20); ① 若LA和LB分别表示两个集合A和B,求新集合 LA和LB分别表示两个集合A 分别表示两个集合 B( 操作,相同元素不保留); A=A U B(‘并’操作,相同元素不保留); 预测输出: 预测输出:LA=(3,5,8,11, 2,6,9,15,20) ( ) LA与LB表归并 要求仍有序(相同元素要保留) 表归并, ② 将LA与LB表归并,要求仍有序(相同元素要保留) 预测输出:LC=( 3,5,6,8,8,9,11,11来自百度文库15,20 6,8,8,9,11,11, 预测输出:LC=(2, 3,5,6,8,8,9,11,11,15,20)
18
1 2 3 4 5 6 7 8
12 13 21 24 28 30 42 77
实现步骤: 实现步骤:? • 将第 至第 位的元素向前移动一个位置; 将第i 至第n 位的元素向前移动一个位置; • 表长减 。 表长减1。 注意:事先需要判断,删除位置i 是否合法? 注意:事先需要判断,删除位置 是否合法 应当有1≤i≤n 或 i=[1, n] 核心语句: 核心语句: for (j=i+1;j<=n;j++) a[ja[j-1]=a[j]; n--; --;
数据元素 线性起点
下标,是元素的 下标, 序号,表示元素 序号, 在表中的位置
ai的直接前趋 ai的直接后继 线性终点 n为元素总个 n=0时称为 空表 时称为
数,即表长
7
例1 分析一副扑克的点数组成的英文表
数据元素都是牌面点数; 元素间关系是线性 数据元素都是牌面点数 元素间关系是线性 (2,3,4,…,J,Q,K,A)
(逻辑、存储 逻辑、 和运算) 和运算)
线性表
第2章 章
5
第2章 线性表 章
2.1 线性表的逻辑结构 2.2 线性表的顺序表示和实现 2.3 线性表的链式表示和实现 2.4 应用举例
2.1 线性表的逻辑结构
2.1.1 线性表的定义:用数据元素的有限序列表示 线性表的定义:
(a1, a2, … ai-1,ai, ai+1 ,…, an) + ,
显然,顺序表修改操作的时间效率是 显然,顺序表修改操作的时间效率是T(n)=O(1)
15
2)插入 在线性表的第i个位置前插入一个元素 2)插入 在线性表的第i个位置前插入一个元素
在线性表的第i个位置前插入一个元素的示意图如下: 在线性表的第i个位置前插入一个元素的示意图如下:
1 2 3 4 插入25 插入25→ 5 6 7 8 12 13 21 24 28 30 42 77 1 2 3 4 5 6 7 8 9 12 13 21 24 25 28 30 42 77
数据元素都是记录 元素间关系是线性 数据元素都是记录; 元素间关系是线性 记录 同一线性表中的元素必定具有相同特性 同一线性表中的元素必定具有相同特性
8
练:判断下列叙述的正误: 判断下列叙述的正误:
√
1. 线性表的逻辑结构定义是唯一的,不依赖 线性表的逻辑结构定义是唯一的, 于计算机。 于计算机。 2. 线性结构反映结点间的逻辑关系是一对一 的。 3. 一维数组是线性表,但二维或 维数组不 一维数组是线性表,但二维或N维数组不 是。 4. “同一数据逻辑结构中的所有数据元素都 同一数据逻辑结构中的所有数据元素都 具有相同的特性” 具有相同的特性 ” 是指数据元素所包含 的数据项的个数都相等。 的数据项的个数都相等。
思考:若插入在尾结点之后,则根本无需移动(特别快); 思考:若插入在尾结点之后,则根本无需移动(特别快); 若插入在首结点之前,则表中元素全部要后移(特别慢); 若插入在首结点之前,则表中元素全部要后移(特别慢); 若要考虑在各种位置插入( 种可能) 平均移动次数 该如何计算? 移动次数, 若要考虑在各种位置插入(共n+1种可能)的平均移动次数,该如何计算? 种可能
13
一个一维数组M,下标的范围是0 M,下标的范围是 例1 一个一维数组M,下标的范围是0到 9,每个数组元素用相邻的5个字节存储。 每个数组元素用相邻的5个字节存储。 存储 存储器按字节编址,设存储数组元素M 存储器按字节编址,设存储数组元素M[0] 的起始地址是98 98, 的起始地址是98,则M[3]的起始地址 113 是 地址计算通式为: 解:地址计算通式为: LOC(ai) = LOC(a1) + L *(i-1) ( ) 因此:LOC( M[3] ) = 98 + 5 ×(3-0) =113 因此:
每课一贴: 每课一贴: 两个人在森林里,遇到了一只大老虎。 就赶 两个人在森林里,遇到了一只大老虎。A就赶 紧从背后取下一双更轻便的运动鞋换上。 急死了 急死了, 紧从背后取下一双更轻便的运动鞋换上。B急死了, 骂道: 你干嘛呢,再换鞋也跑不过老虎啊! 骂道:“你干嘛呢,再换鞋也跑不过老虎啊!” A说:“我只要跑得比你快就好了。”二十一世纪, 说 我只要跑得比你快就好了。 二十一世纪, 没有危机感是最大的危机。即使是电信,银行, 没有危机感是最大的危机。即使是电信,银行, 保险, 保险,甚至是公务员这些我们以为非常稳定和有 保障的职业,也会面临许多的变数。 保障的职业,也会面临许多的变数。更多的老虎 来临时,我们有没有准备好自己的跑鞋? 来临时,我们有没有准备好自己的跑鞋?
3
线性结构特点: 线性结构特点:在数据元素的非空有限集中
– 存在唯一的一个被称作“第一个”的数据元素 存在唯一的一个被称作“第一个” 唯一的一个被称作 – 存在唯一的一个被称作“最后一个”的数据元素 存在唯一的一个被称作“最后一个” 唯一的一个被称作 – 除第一个元素外,集合中的每个数据元素均只有一个前驱 除第一个元素外,集合中的每个数据元素均只有一个前驱 – 除最后一个元素外,集合中的每个数据元素均只有一个后继 除最后一个元素外,集合中的每个数据元素均只有一个后继 简言之,线性结构反映结点间的逻辑关系是 一对一 一对一(1:1) 的 简言之,
例2 分析学生情况登记表
学号 2001011810205 2001011810260 2001011810284 2001011810360 : 姓名 管春燕 周 刚 石文娟 杨 扬 : 性别 女 男 女 男 : 年龄 18 18 18 18 : 班级 2001级电信016班 2001级电信017班 2001级通信011班 2001级通信012班 :
14
2.2.2 顺序表的实现(或操作) 顺序表的实现(或操作) 回忆:数据结构基本运算操作有: 回忆:数据结构基本运算操作有: 修改、插入、删除、查找、 修改、插入、删除、查找、排序 1) 修改 通过数组的下标便可访问某个 特定元素并修改之。 特定元素并修改之。
核心语句: 核心语句: V[i]=x;
线性结构的定义: 线性结构的定义:
若结构是非空有限集, 若结构是非空有限集,则有且仅有一个开始结 点和一个终端结点, 点和一个终端结点,并且所有结点都最多只有一个 直接前趋和一个直接后继。 直接前趋和一个直接后继。
:(a 可表示为:( 1 , a2 , ……,
a n)
4
线性结构包括线性表、堆栈、队列、字符串、 线性结构包括线性表、堆栈、队列、字符串、 数组等等,其中,最典型、最常用的是--数组等等,其中,最典型、最常用的是
9
√
×
×
2.2 线性表的顺序表示和实现
2.2.1 顺序表的表示 2.2.2 顺序表的实现 2.2.3 顺序表的运算效率分析 顺序表小结 顺序表小结
10
2.2.1 顺序表的表示
线性表的顺序表示又称为顺序存储结构或顺序映像。 线性表的顺序表示又称为顺序存储结构或顺序映像。 顺序存储结构 顺序存储定义: 逻辑上相邻的数据元素存储在 顺序存储定义: 逻辑上相邻的数据元素存储在物 的数据元素存储在物 把 理上相邻的存储单元中的存储结构 的存储单元中的存储结构。 理上相邻的存储单元中的存储结构。 简言之,逻辑上相邻, 简言之,逻辑上相邻,物理上也相邻 顺序存储方法: 顺序存储方法: 用一组地址连续 地址连续的存储单元依次 用一组 地址连续 的存储单元依次 存储线性表的元素,可通过数组V[n]来实现 数组V[n]来实现。 存储线性表的元素,可通过数组V[n]来实现。
11
线性表的顺序存储结构示意图
地址 b=LOC(a1) b+ L b +(i-1)L +(i-1)L 内容 a1 a2 …… ai ai+1 …… b +(n-1)L +(n-1)L an 元素在表中的位序 L 1 2 i i+1 n 空闲区
12
线性表顺序存储特点: 线性表顺序存储特点:
1. 逻辑上相邻的数据元素,其物理上也相邻; 逻辑上相邻的数据元素,其物理上也相邻; 2. 若已知表中首元素在存储器中的位置,则其他元素 若已知表中首元素在存储器中的位置, 存放位置亦可求出( )。计算方法是 存放位置亦可求出(利用数组下标)。计算方法是 (参见存储结构示意图): 设首元素a1的存放地址为LOC(a1)(称为首地址), 设首元素 的存放地址为 (称为首地址), 首地址 设每个元素占用存储空间(地址长度) 字节, 设每个元素占用存储空间(地址长度)为L字节, 字节 则表中任一数据元素的存放地址 存放地址为 则表中任一数据元素的存放地址为: LOC(ai) = LOC(a1) + L *(i-1) ( ) LOC(ai+1) = LOC(ai)+L 注意:Java语言中的数组的下标从 开始, 语言中的数组的下标从0 注意:Java语言中的数组的下标从0开始, V[n]的有效范围是V[0]~V[n的有效范围是V[0] 即:V[n]的有效范围是V[0]~V[n-1]
// 元素后移一个位置 插入x // 插入x 表长加1 // 表长加1
17
3)删除 删除线性表的第 线性表的第i 3)删除 删除线性表的第i个位置上的元素
删除顺序表中某个指定的元素的示意图如下: 删除顺序表中某个指定的元素的示意图如下:
1 2 3 4 5 6 7 8 9 12 13 21 24 25 28 30 42 77
按规律插入 插入到尾部
20
2.2.3 顺序表的运算效率分析
时间效率分析: 时间效率分析 • 算法时间主要耗费在移动元素的操作上,因此 算法时间主要耗费在移动元素的操作上, 移动元素的操作上 计算时间复杂度的基本操作(最深层语句频度) 计算时间复杂度的基本操作(最深层语句频度) T(n)= O (移动元素次数 移动元素次数) 移动元素次数 • 移动元素的个数取决于插入或删除元素的位置 移动元素的个数取决于插入或删除元素的位置. 讨论1: 讨论 :若在长度为 n 的线性表的第 i 位前 插入一 元素,则向后移动元素的次数f(n)为: 元素,则向后移动元素的次数 为 f(n) = n – i + 1
1
数据结构课程的内容
2
生活实例: 生活实例: (2,3,4,…,J,Q,K,A)
学号 2001011810205 2001011810260 2001011810284 2001011810360 : 姓名 管春燕 周 刚 石文娟 杨 扬 : 性别 女 男 女 男 : 年龄 18 18 18 18 : 班级 2001级电信016班 2001级电信017班 2001级通信011班 2001级通信012班 :
16
实现步骤: 实现步骤:? • 将第n至第 位的元素向后移动一个位置; 至第i 的元素向后移动一个位置 向后移动一个位置; 至第 • 将要插入的元素写到第 个位置; 将要插入的元素写到第i个位置 个位置; • 表长加 。 表长加1。 注意:事先应判断: 插入位置i 是否合法?表是否已 注意:事先应判断 插入位置 是否合法 表是否已 应当有1≤i≤n+1 或 i=[1,n+1] 满? 应当有 核心语句: 核心语句: (j=n;j>=i;j---) for (j=n;j>=i;j--) a[j+1]=a[j]; a[i]=x; n++;