数据结构-第2章-线性表.pptx
《数据结构-第2章-线性表.pptx》由会员分享,可在线阅读,更多相关《数据结构-第2章-线性表.pptx(35页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据结构 新世纪应用型高等教育新世纪应用型高等教育计算机类课程规划教材计算机类课程规划教材新世纪应用型高等教育教材编审委员会新世纪应用型高等教育教材编审委员会 组编组编 主编主编 曹春萍曹春萍2.1 线性表的基本概念第第2 2章章线性表线性表线性表(线性表(linear-list)是一组具有相同特征的数据元素的有限序列。如,某)是一组具有相同特征的数据元素的有限序列。如,某校十个教学班级的学生人数(校十个教学班级的学生人数(50,53,55,52,56,59,60,55,57,51)构成一个线性表。构成一个线性表。线性表可用一个标示符来命名。如用线性表可用一个标示符来命名。如用List来命名上
2、述线性表,则可表示为:来命名上述线性表,则可表示为:List=(50,53,55,52,56,59,60,55,57,51)线性表中所包含的数据元素的个数称为线性表的长度,可用线性表中所包含的数据元素的个数称为线性表的长度,可用n表示。表示。n=0表表示线性表为空,称为空表。示线性表为空,称为空表。线性表中的数据元素可分别用线性表中的数据元素可分别用a1,a2,a3,ai,an表示。其中表示。其中a1是第一个数据元素,是第一个数据元素,an是最后一个数据元素,每个数据元素在表中都有一个唯是最后一个数据元素,每个数据元素在表中都有一个唯一确定的位置,可用下标一确定的位置,可用下标i表示第表示第i
3、个数据元素在表中的位置。个数据元素在表中的位置。2.1 线性表的基本概念第第2 2章章线性表线性表2.1.1 2.1.1 线性表的定义线性表的定义线性表线性表(linear-list)是一组具有相同特征的数据元素的有限序列。如,某)是一组具有相同特征的数据元素的有限序列。如,某校十个教学班级的学生人数(校十个教学班级的学生人数(50,53,55,52,56,59,60,55,57,51)构成一个线性表。构成一个线性表。线性表可用一个标示符来命名。如用线性表可用一个标示符来命名。如用List来命名上述线性表,则可表示为:来命名上述线性表,则可表示为:List=(50,53,55,52,56,59
4、,60,55,57,51)线性表中所包含的数据元素的个数称为线性表的长度,可用线性表中所包含的数据元素的个数称为线性表的长度,可用n表示。表示。n=0表表示线性表为空,称为空表示线性表为空,称为空表。2.1 线性表的基本概念第第2 2章章线性表线性表2.1.2 2.1.2 线性表的特点线性表的特点线性表是一种线性结构,其中的数据元素有序且有限。一个非空的线性表线性表是一种线性结构,其中的数据元素有序且有限。一个非空的线性表具有如下特点具有如下特点:u 有有且仅有一个开始数据元素,该元素没有前驱;且仅有一个开始数据元素,该元素没有前驱;u 有有且仅有一个终端数据元素,该元素没有后继;且仅有一个终
5、端数据元素,该元素没有后继;u 除除开始数据元素外,其它的数据元素有且仅有一个直接前驱;开始数据元素外,其它的数据元素有且仅有一个直接前驱;u 除除终端数据元素外,其它的数据元素有且仅有一个直接后继。终端数据元素外,其它的数据元素有且仅有一个直接后继。2.1 线性表的基本概念第第2 2章章线性表线性表2.1.3 2.1.3 线性表的抽象数据类型线性表的抽象数据类型 线性表的抽象数据类型定义如下:ADT List 定义:一组具有相同特征的数据元素的有限序列 表示:List=(a1,a2,a3,ai,an)基本操作:Initiate(List)操作结果:初始化操作。置一个空的线性表List。Cle
6、arList(List)初始条件:线性表List存在。操作结果:将线性表List置为空表。2.1 线性表的基本概念第第2 2章章线性表线性表 ListEmpty(List)初始条件:线性表List存在。操作结果:若线性表List为空,则返回true;否则返回false。Length(List)初始条件:线性表List存在。操作结果:返回线性表List的长度,若为空,则返回0。Get(List,i,e)初始条件:线性表List存在,1iLength(List)。操作结果:返回线性表List的第i个数据元素,由e返回。Find(List,i,e)初始条件:线性表List存在。操作结果:返回线性表L
7、ist中第一个值为e的数据元素的位置(第 几个元素),值由i返回。若没有找到,则返回-1。2.1 线性表的基本概念第第2 2章章线性表线性表Insert(List,i,e)初始条件:线性表List存在,1iLength(List)+1。操作结果:在线性表List的第i个位置插入元素e,线性表长度加1。Delete(List,i)初始条件:线性表List存在,1iLength(List)。操作结果:删除线性表List第i个位置上的数据元素,线性表长度减1。GetPrior(List,e,pre_e)初始条件:线性表List存在。操作结果:若e是线性表List中的数据元素,且不是第一个数据元素,则
8、用&pre_e返回e的前驱;否则返回NULL。GetNext(List,e,next_e)初始条件:线性表List存在。操作结果:若e是线性表中List的数据元素,且不是最后一个数据元素,则用&next_e返回e的后继;否则返回NULL。2.2 线性表的顺序存储和操作实现第第2 2章章线性表线性表2.2.1 2.2.1 线性表线性表为了用计算机处理线性表,必须为它选择为了用计算机处理线性表,必须为它选择合适的存储结构。线性表的存储结构有顺序、合适的存储结构。线性表的存储结构有顺序、链式、索引、散列等多种方式,其中顺序存链式、索引、散列等多种方式,其中顺序存储和链式存储是两种最简单常用的存储结构
9、。储和链式存储是两种最简单常用的存储结构。本小节主要介绍线性表的顺序存储和相关操本小节主要介绍线性表的顺序存储和相关操作。作。线性表的顺序存储是指用一组地址连续的线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的每一个数据元存储单元依次存储线性表中的每一个数据元素。素。2.2 线性表的顺序存储和操作实现第第2 2章章线性表线性表 2.2.1 2.2.1 线性表线性表 采用采用顺序存储结构的线性表称为顺序表。其特点是:顺序存储结构的线性表称为顺序表。其特点是:线性表线性表的逻辑顺序与物理顺序一致;的逻辑顺序与物理顺序一致;p 线性表线性表的数据元素之间的关系可以通过物理存储之间的相邻
10、关系来体现;的数据元素之间的关系可以通过物理存储之间的相邻关系来体现;p 假设假设顺序表中第一个数据元素的存储位置为顺序表中第一个数据元素的存储位置为LOC(a1)LOC(a1),每一个数据元素占,每一个数据元素占用的存储单元数为用的存储单元数为c c,则第,则第i i个数据元素的存储位置为:个数据元素的存储位置为:pLOC(ai)=LOC(a1)+(i-1)*cLOC(ai)=LOC(a1)+(i-1)*c2.2 线性表的顺序存储和操作实现第第2 2章章线性表线性表 2.2.2 2.2.2 线性表的基本操作线性表的基本操作 1.1.初始化顺序表初始化顺序表动态分配存储空间,并把顺序表置为空。
11、动态分配存储空间,并把顺序表置为空。Status Initiate_Sq(SqList*L)Status Initiate_Sq(SqList*L)L-L-list=(ElemType*)malloc(LIST_SIZE*sizeof(ElemType);list=(ElemType*)malloc(LIST_SIZE*sizeof(ElemType);/*/*分配内存单元分配内存单元*/if if(!L-list)(!L-list)printf(“Memory allocate failed!n”);printf(“Memory allocate failed!n”);return retu
12、rn ERROR;ERROR;L-L-length=0;length=0;/*/*空表长度为空表长度为0*/0*/L-L-list_size=LIST_SIZE;list_size=LIST_SIZE;/*/*初始存储容量初始存储容量*/return return OK;OK;2.2 线性表的顺序存储和操作实现第第2 2章章线性表线性表 2.2.清除顺序表中所有元素,并将顺序表置为空清除顺序表中所有元素,并将顺序表置为空void ClearList_Sq(SqList*L)void ClearList_Sq(SqList*L)if if(L-list)(L-list)free(L-free(L
13、-list);list);/*/*释放顺序表空间释放顺序表空间*/L-L-list=NULL;list=NULL;L-L-length=0;length=0;/*/*空表长度为空表长度为0*/0*/L-L-list_size=0;list_size=0;2.2 线性表的顺序存储和操作实现第第2 2章章线性表线性表9.9.遍历遍历顺序表中的元素顺序表中的元素Status Tranverse_Sq(SqList*L)Status Tranverse_Sq(SqList*L)int j;int j;if(L-length length 1)/*/*顺序表为空顺序表为空*/return ERROR;r
14、eturn ERROR;printf(“The List is:n”);printf(“The List is:n”);for(j=0;j length 1;j+)for(j=0;j length 1;j+)printf(“list%d=%dn”,j,L-listjprintf(“list%d=%dn”,j,L-listj););/*/*此处设元素类型为整型此处设元素类型为整型*/return OK;return OK;2.2 线性表的顺序存储和操作实现第第2 2章章线性表线性表【例例2-12-1】已有一手机通讯录,各联系人信息按照姓名字母顺序递增的方式排列。现需添已有一手机通讯录,各联系人信
15、息按照姓名字母顺序递增的方式排列。现需添加一联系人信息,希望添加后各联系人信息仍按照姓名字母顺序递增的方式排列加一联系人信息,希望添加后各联系人信息仍按照姓名字母顺序递增的方式排列设计设计思路:将手机通讯录用线性表的结构表示,采用顺序存储方式。即将其视为一个顺思路:将手机通讯录用线性表的结构表示,采用顺序存储方式。即将其视为一个顺序表。首先要判断该顺序表中是否还有剩余空间,如已存满,则利用上述序表。首先要判断该顺序表中是否还有剩余空间,如已存满,则利用上述reallocatereallocate函数重新函数重新分配空间;然后在该顺序表中从后往前寻找插入位置,将姓名字母比待插入联系人姓名字母大分
16、配空间;然后在该顺序表中从后往前寻找插入位置,将姓名字母比待插入联系人姓名字母大(靠后)的记录向后移动,然后插入新的联系人信息。(靠后)的记录向后移动,然后插入新的联系人信息。2.2 线性表的顺序存储和操作实现第第2 2章章线性表线性表程序描述如下:程序描述如下:Status Insert_Sq(SqList*L,ElemType*elem)Status Insert_Sq(SqList*L,ElemType*elem)int j;int j;if(L-length=L-list_size)if(L-length=L-list_size)/*/*是否还有剩余空间是否还有剩余空间*/if(rea
17、llocate(L)=ERROR)if(reallocate(L)=ERROR)/*/*重新分配空间是否失败重新分配空间是否失败*/return return ERROR;ERROR;for(j=L-length 1;j=0;j-for(j=L-length 1;j=0;j-)/*-)/*元素(联系人信息)后移元素(联系人信息)后移*/if(strcmp(L-listj.name,elem-name)0)if(strcmp(L-listj.name,elem-name)0)memcpy memcpy(&L-listj+1,&L-listj,sizeof(ElemType);(&L-listj+
18、1,&L-listj,sizeof(ElemType);elseelsebreak;break;/*/*将新元素放入顺序表第将新元素放入顺序表第i i个位置处个位置处*/memcpymemcpy(&L-listj+1,elem,sizeof(ElemType);(&L-listj+1,elem,sizeof(ElemType);L-length+;L-length+;/*/*顺序表长度加顺序表长度加1*/1*/return OK;return OK;2.3 线性表的链式存储和操作实现第第2 2章章线性表线性表线性表的顺序存储只存储数据元素本身的信息,数据元素之间的关系通过物理存储之间线性表的顺
19、序存储只存储数据元素本身的信息,数据元素之间的关系通过物理存储之间的相邻关系来体现,可以实现随机存取,但也存在插入、删除操作不方便等缺点。而线性表的的相邻关系来体现,可以实现随机存取,但也存在插入、删除操作不方便等缺点。而线性表的链式存储通过同时存储数据元素本身的信息和自己的直接后继(或直接前驱)的存储位置,把链式存储通过同时存储数据元素本身的信息和自己的直接后继(或直接前驱)的存储位置,把所有的数据元素链接起来,克服了顺序存储的缺点所有的数据元素链接起来,克服了顺序存储的缺点。在链式存储中,这两部分信息组成的数据元素在链式存储中,这两部分信息组成的数据元素aiai的存储映像,称为结点(的存储
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 线性
限制150内