线性表的类型定义、顺序表示和实现
- 格式:ppt
- 大小:2.74 MB
- 文档页数:46
第1讲线性表本章主要掌握如下内容:线性表的定义和基本操作,线性表的实现,线性表的顺序存储结构及链式存储结构,线性表的应用。
知识点分析(一)线性表的定义和基本操作1.线性表基本概念1)定义:是由相同类型的结点组成的有限序列。
如:由n个结点组成的线性表(a1, a2, …, a n)a1是最前结点,a n是最后结点。
结点也称为数据元素或者记录。
2)线性表的长度:线性表中结点的个数称为其长度。
长度为0的线性表称为空表。
3)结点之间的关系:设线性表记为(a1,a2,…a i-1 , a i, a i+1 ,…a n),称a i-1是a i的直接前驱结点....(简称前驱),a i+1是a i的直接后继结点....(简称后继)。
4)线性表的性质:①线性表结点间的相对位置是固定..的,结点间的关系由结点在表中的位置确定。
②如果两个线性表有相同的数据结点,但它们的结点顺序不一致,该两个线性表也是不相等的。
注意:线性表中结点的类型可以是任何数据(包括简单类型和复杂类型),即结点可以有多个成分,其中能唯一标识表元的成分称为关键字(key),或简称键。
以后的讨论都只考虑键,而忽略其它成分,这样有利于把握主要问题,便于理解。
『经典例题解析』线性表的特点是每个元素都有一个前驱和一个后继。
( )【答案】错误。
【解析】线性表的第一个数据元素没有前驱,最后一个元素没有后继。
其余的所有元素都有一个前驱和后继。
2.线性表的抽象数据类型线性表是一个相当灵活的数据结构,其长度可以根据需要增加或减少。
从操作上讲,用户不仅可以对线性表的数据元素进行访问操作,还可以进行插入、删除、定位等操作。
1)线性表的基本操作假设线性表L有数据对象 D={ai | ai∈ElemSet,i=1,2,3,…,n,n>=0},数据元素之间的关系R={<ai-1,ai>|ai-1,ai∈D,i=1,2,…,n},则线性表L的基本操作如下所示:●InitList(&L):其作用是构造一个长度为0的线性表(空线性表);●DestoryList(&L):其作用是销毁当前的线性表L;●ClearList(&L):清空线性表L,使之成为空表;●ListLength(L):返回线性表L的长度,即线性表中数据元素的个数;●ListEmpty(L) :判断线性表L是否为空表,是则返回True,否则返回False;●GetElem(L,i,&e):将线性表L中第i个数据元素的值返回到变量e中;●LocateELem(L,e,compare( )) :判断线性表L中是否存在与e满足compare()条件的数据元素,有则返回第一个数据元素;●PriorElem(L,cur_e,&pri_e):返回线性表L中数据元素cur_e的前驱结点;●NextElem(L,cur_e,&next_e):返回线性表L中数据元素cur_e的后继结点;●ListInsert(&L,i,e):向线性表L的第i个位置之前插入一个数据元素,其值为e;●ListDelete(&L,i,&e):删除线性表L的第i个数据元素,并将该数据元素的值返回到e中;●ListTraverse(L,visit()):遍历线性表中的每个数据元素。
线性表的定义和基本操作线性表的定义提到线性这个词,并不陌⽣,在中学过线性的逻辑结构。
线性逻辑结构是⼀对⼀关系,结点之间排成了⼀列或者⼀⾏,所以说线性表也是⼀种逻辑关系。
有了对线性表的认知,那么来看⼀下它的概念:线性表是具有相同类型的 n (n>=0) 个元素的有限序列,其中 n 为表长,当 n=0 时,该表为空表。
为什么要相同类型?计算机在处理⼤量数据的时候,把相同的数据元素称作为数据对象。
往往要处理相同的数据元素,也就处理⼀种数据对象。
不会把⾳频和图⽚杂糅到⼀起进⾏处理。
也不会把抽象事物,⽐如说⼈和汽车组合到⼀起进⾏处理。
因为这样没有意义,也没有⾼的效率。
对于相同类型,在接下来所学到的所有的数据结构中都有这样的要求。
因为具有相同类型的数据结构,它在解决实际问题,实现算法时,才更加的有意义。
其次,对于这个类型的范围,它的定义其实并不狭隘,并不仅仅局限于我们常见的类型,⽐如说整型、浮点型这样的类型。
对于从实际⽣活中抽象出来的类型,⽐如说⼀本书、⼀个⼈也是可以作为⼀个元素的。
它与 C++ 中的⾯向对象的类⽐较相似。
除了相同类型,定义中还有⼀个⽐较重要的点,那就是是有限序列。
什么是有限?就是说明该线性表的长度是有限的,因为计算机⽆法处理⽆限多的数据。
第⼆个是序列,根据下⾯的表⽰⽅法可以发现,线性表中每⼀个元素都是有序号的,序列的意思就是有序号的⼀种排列。
这就是在线性表定义中⽐较重要的两个点。
若 L 命名为线性表,则⼀般表⽰为:在 L 当中,线性表的每⼀个元素都具有相同类型,都是属于同⼀个数据对象的数据元素,分别是 a1、a2⼀直到 a n。
可以发现,对于所有的元素它都是有序号的。
那么在表中,第⼀个元素,称它为表头元素,最后⼀个元素称它为表尾元素。
除了这样,该线性表还有⼀些其他的逻辑关系。
在线性表中,每⼀个元素除了表头元素,它都有⼀个前驱结点。
也就是 a i+1的前驱结点,即是 a i。
同样在表中,每⼀个元素除了表尾元素,它都有⼀个后继结点。
线性表的顺序存储——顺序表之前我们讲了线性表, 本篇来阐述下线性表的顺序存储——顺序表定义线性表的顺序存储⼜称为顺序表, 它是⽤⼀组地址连续的存储单元依次存储线性表中的数据元素. 逻辑上相邻的两个数据元素在物理位置上同样相邻.规律顺序表中逻辑顺序与物理顺序相同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,同时这也是数组的最⼤容量。
接着定义了⼀个结构体。
结构体就是把多个基本数据类型组合到⼀起构成⼀个新的数据类型。
2015年学术型硕士研究生招生考试大纲(数据结构)学科、专业:食品安全与智能控制(0832Z1)
一、绪论
1、什么是数据结构
2、基本概念和术语
3、抽象数据类型的表示与实现
4、算法和算法分析
二、线性表
1、线性表的类型定义
2、线性表的顺序表示和实现
3、线性表的链式表示和实现
三、栈和队列
1、栈
2、栈的应用举例
3、队列
四、串
1、串类型的定义
2、串的表示和实现
五、数组和广义表
1、数组的定义
2、数组的顺序表示和实现
3、矩阵的压缩存储
4、广义表的定义
5、广义表的存储结构
六、树和二叉树
1、树的定义和基本术语
2、二叉树
3、遍历二叉树和线索二叉树
4、树和森林
5、赫夫曼树及其应用
七、图
1、图的定义和术语
2、图的存储结构
3、图的遍历
4、图的连通性问题
5、最短路径
八、查找
1、静态查找表
2、动态查找表
3、哈希表
九、内部排序
1、插入排序
2、快速排序
3、选择排序
4、归并排序
5、基数排序
十、外部排序
1、外存信息的存取
2、外部排序的方法
参考书目:《数据结构(C语言版)》,严蔚敏、吴伟民编著,清华大学出版社,第一版,2011。
线性表结构线性表是计算机科学中一种常见的数据结构,它具有容易理解、实现简单及操作性能良好的特点,因而在计算机应用中得到了广泛的使用。
本文将介绍线性表结构的定义、结构特点、相关操作以及实际应用。
一、线性表的定义一个线性表(Linear Table)是一种抽象的数据结构,它由n(n>0)个相同类型的数据元素(成员)组成,其中每个数据元素有且仅有一个直接前驱和一个直接后继,表中最前面一个元素称为头元素,最后一个元素称为尾元素。
二、线性表的特点线性表是一种基本的数据结构,它具备以下几个基本特点:(1)表中元素有顺序关系,元素之间的次序由它们在表中出现的次序决定。
(2)线性表中的每个元素都有且仅有一个直接前驱和一个直接后继,表中的第一个元素没有前驱,表中的最后一个元素没有后继。
(3)线性表中的每个元素都属于相同的数据类型。
(4)线性表是限定性结构,它只能完成表中元素的顺序存取,不能完成元素的随机存取。
三、线性表的应用(1)线性表可以用来存储和操作顺序序列的数据,如求积分、求傅立叶变换等;(2)线性表可用于处理姓名、课程名称、学号等顺序性的数据;(3)线性表可以用于求解算法中的搜索、排序等问题,如快速排序,归并排序等。
四、线性表的操作线性表的操作要求在不改变原表结构的情况下对原表中数据进行插入、删除、更改、查找等操作,常用的操作有:(1)求长度:求表的长度即求表中元素的个数;(2)求特定元素:查找表中某一特定元素;(3)插入元素:向表中插入新的元素;(4)删除元素:删除表中指定位置的元素;(5)拼接表:将两个不同的表拼接成一个表;(6)按序访问:按照表元素在表中出现的次序进行操作。
五、线性表的实际应用线性表在实际应用中被广泛使用,下面简单介绍几个常见的应用场景:(1)链表是重要的动态存储结构,可以用其实现稀疏矩阵的存储;(2)在关系数据库中,用户可以使用线性表来表示关系表本身;(3)操作系统中,可以使用线性表来存储进程调度表、用户登录信息表等;(4)线性表还可以用于各种算法的求解,比如排序算法和回溯法等。