c语言数据结构第二章课件清华出版社PPT教学课件

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(2,3,4,5,6,7,8,9,10,J,Q,K,A) 可以构成一个线性表。
2020/12/10
4
其抽象数据类型的定义如下: ADT List { 数据对象:D={ai | ai ∈ ElemSet, i=1,2,...,n, n≥0 }
数据关系:R1={ <ai-1 ,ai >| ai-1 ,ai ∈D, i=2,...,n } 序偶 < ai-1 ,ai > 表示ai-1是ai的直接前驱,反之, ai是ai-1的直接后 继。
1.集合中必存在唯一的一个"第一元素"; 2.集合中必存在唯一的一个"最后元素"; 3.除最后元素之外,其它数据元素均有唯一的 "后继"; 4.除第一元素之外,其它数据元素均有唯一的 "前驱"。
2020/12/10
3
2.1.1 抽象数据类型线性表的定义
• 通常可以下列“ n 个数据元素的序列”表示线性表
基本操作:(共四大类) {结构初始化} InitList( &L )
操作结果:构造一个空的线性表 L 。
任何数据结构在被使用之前都必须进行“初始化” ,它类似于 编程中使用的变量都必须先有定义。
{销毁结构} DestroyList( &L )
初始条件:线性表 L 已存在。 操作结果:销毁线性表 L 。 任何数据结构不再使用时都必须进行"结构销毁" ,其实质为"释放 "它所占有的存储空间。
PutElem( &L, i, &e ) 初始条件:线性表L已存在,1≤i≤LengthList(L)。 操作结果:L 中第 i 个元素赋值同 e 的值。 和GetElem操作相同,i 的值必须在线性表的长度范围内。
ListInsert( &L, i, e ) 初始条件:线性表 L 已存在,1≤i≤LengthList(L)+1。 操作结果:在 L 的第 i 个元素之前插入新的元素 e,L 的长度增1。 可在线性表中任意一个元素之前插入一个新的数据元素,i=1 意为在第 一个元素之前插入一个新的数据元素,i=LengthList(L)+1 则为在最后一个 元素之后插入一个新的数据元素。换句话说,操作结果是使新插入的数据元 素成为插入之后的线性表中第 i 个数据元素,显然,插入位置 i 的合法值 应为 1≤i≤LengthList(L)+1。 ListDelete( &L, i, &e ) 初始条件:线性表 L 已存在且非空,1≤i≤LengthList(L)。 操作结果:删除 L 的第 i 个元素,并用 e 返回其值,百度文库 的长度减 1。 } ADT List
2020/12/10
7
例2-1 已知集合 A 和 B,求两个集合的并集,使 A=A∪B,且 B 不再 单独存在。
第二章 线性表
复习:
1、抽象数据类型的定义由哪几部分组成?
2、按数据元素之间的逻辑关系不同,数 据结构有哪几类?
2020/12/10
1
本章学习内容
• 线性表 • 顺序表 • 链表
2020/12/10
2
2.1线性表
• 线性表是一种最简单的线性结构。 什么是线性结构?简单地说,线性结构是一个数 据元素的有序(次序)集合。它有四个基本特征:
2020/12/10
6
{加工型操作} ClearList( &L ) 初始条件:线性表 L 已存在。 操作结果:将 L 重置为空表。 值得注意的是,在进行了 DestroyList(L) 操作之后,线性表 L 不再
存在,即不能在以后的程序中再引用它,而在对线性表L进行 ClearList(L) 操作之后,仅是删除表中所有元素,在以后的程序中仍可对它进行某些“合 法”操作,如判空、插入等。
(Linear_List)
( a1, a2 ,..., ai ,..., an ) 序列中数据元素的个数 n 定义为线性表的表长;n=0 时的 线性表被称为空表。称 i 为 在线性表中的位序。
线性表中的数据元素可以是各种各样的,只要是属于同 一个集合即可。 例如,26个小写英文字母是一个线性表
(a,b,…,z) 同一花色的13张扑克牌
若这样的元素不存在,则返回值为0。 ListTraverse(L, visit( )) 初始条件:线性表 L 已存在,visit( ) 为元素的访问函数。 操作结果:依次对 L 的每个元素调用函数 visit( )。一旦 visit( ) 失败,则操作失败。
以上7个操作的结果都没有改变线性表中的数据元素和数据元素之间的关系,因此它们都是“引 用型”的操作。
2020/12/10
5
{引用型操作} ListEmpty( L ) //判定线性表是否为空表。 初始条件:线性表L已存在。 操作结果:若 L 为空表,则返回 TRUE,否则返回 FALSE。
ListLength( L ) //求得线性表的长度,即线性表中所含数据元素的个数。 初始条件:线性表 L 已存在。
操作结果:返回 L 中元素个数。 PriorElem( L, cur_e, &pre_e )
初始条件:线性表 L 已存在。 操作结果:若 cur_e 是 L 中的数据元素,则用 pre_e 返回它的前驱,否则操作失败,pre_e 无定义。若 cur_e 是线性表 L 中第一个数据元素,则它的前驱 pre_e 为“空元素”。 NextElem( L, cur_e, &next_e ) 初始条件:线性表 L 已存在。 操作结果:若 cur_e 是 L 中的数据元素,则用 next_e 返回它的后继,否则操作失败, next_e 无定义。若 cur_e 是线性表 L 中最后一个数据元素,则它的后继 next_e 为“空元素”。 GetElem( L, i, &e ) 初始条件:线性表 L 已存在,1≤i≤LengthList(L)。 操作结果:用 e 返回 L 中第 i 个元素的值。此操作的结果是求得线性表 L 中和位序 i 相对应 的数据元素,因此,只有当 i 的值在线性表的长度范围内才有意义。 LocateElem( L, e, compare( ) ) 初始条件:线性表 L 已存在,compare( ) 是元素判定函数。 操作结果:返回 L 中第1个与 e 满足关系 compare( ) 的元素的位序。
相关文档
最新文档