自考数据结构导论02142第二章线性表ppt课件.ppt
《自考数据结构导论02142第二章线性表ppt课件.ppt》由会员分享,可在线阅读,更多相关《自考数据结构导论02142第二章线性表ppt课件.ppt(110页珍藏版)》请在三一办公上搜索。
1、1,第二章 线性表,2,第2章 线性表,2.1 线性表的基本概念2.2 线性表的顺序存储2.3 线性表的链接存储2.4 其它运算在单链表上的实现2.5 其它链表2.6 顺序实现与连接实现的比较2.7 小结,3,4,本章总述,本章主要讨论了线性表及它的两种存储实现:顺序实现和链接实现;另外,简单介绍了串这种特殊的线性表的运算和存储实现。,线性表是一种最简单最常见的数据结构,5,本章重点 线性结构的定义和特点;线性表的运算;顺序表和单链表的组织方法和算法设计。本章难点 单链表上的算法设计。,6,字母表(A,B,C,D.Z)数字表(0,1,2,3,4,5,6,7,8,9),学生名单,7,问题:线性结
2、构的特点?,8,2.1 线性表的基本概念,线性表是由n(n0)个数据元素(结点)a1,a2,an组成的有限序列。 数据元素的个数n定义为表的长度, n=0时称为空表,记作()或 将非空的线性表(n0)记作: L=(a1,a2,an) 数据元素ai(1in)只是个抽象符号,其具体含义在不同情况下可以不同。,9,线性表的基本术语:起始结点、终端结点、直接前驱、直接后继线性表长度,空表,L=(a1,a2,an),注意:线性表中只有一个起始结点,一个终端结点,起始结点没有直接前驱,有一个直接后继。终端结点有一个直接前驱,没有直接后继。除此二结点外,每个结点都有且只有一个直接前驱和一个直接后继。,10,
3、线性表的逻辑结构特征,对于非空的线性表: 有且仅有一个起始结点a1,没有直接前驱,有且仅有一个直接后继a2; 有且仅有一个终端结点an,没有直接后继,有且仅有一个直接前驱an-1; 其余的内部结点ai(2in-1)都有且仅有一个直接前驱ai-1和一个直接后继ai+1。,11,线性表的基本运算,1,初始化 Initiate(L)2,求表长度 Length(L)3,取表元 Get(L,i)4,定位 Locate(L,x)5,插入 Insert(L,x,i)6,删除 Delete(L,i)区分引用型和加工型操作,12,2.2 线性表的顺序实现,定义 顺序表是线性表的顺序存储存储结构,即以一段连续内存
4、存放的线性表此时,内存的顺序性体现了数据间的逻辑关系线性表中相邻的结点在存储结构中仍相邻,13,假定有一组数据,数据间有顺序:12 10 5 78 56 45 32 88 71 11,此处数据间的顺序即表示数据间的逻辑关系即线性关系,这一组数据为线性表,0,1,2,3,4,5,6,7,8,9,11,12,10,5,78,56,45,32,88,71,线性表的顺序存储结构,14,假设已知a1地址为Loc(a1),每个数据占c个单元则计算ai地址,Loc(ai) =,Loc(a1) +,c *(i-1),a1 a2 a3 a4 a5 a6 a7 a8 a9 a10,15,此处数据间的顺序即表示数据
5、间的逻辑关系即线性关系,这一组数据为线性表,0,1,2,3,4,5,6,7,8,9,顺序存储线性表时,需要存储:存储单元大小、数据个数,线性表大小:10线性表长度:7所存放数据的类型:,MaxSize,Length,DataType,16,a1,a2,an,0,1,length-1,1,2,n,内存,data数组下标,元素序号,maxsize-1,顺序表的结构体定义#define maxsize 100typedef struct datatype datamaxsize; int length; Seqlist;Seqlist L;问题:L有什么成员?,17,附讲: 结构体,结构体是一种构造
6、数据类型 用途:把不同类型的数据组合成一个整体-自定义数据类型 引入结构体的好处:加强数据项之间的联系,如学生的基本信息,包括学号、姓名、性别、年龄、班级、成绩等数据项。这些数据项描述了一个学生的几个不同侧面。,独立的变量表示:,结构体变量表示:,char no9; /学号char name20; /姓名char sex; /性别unsigned int age; /年龄unsigned int classno; /班级float grade; /成绩,18,1、结构体类型的定义,struct 结构体类型名 数据类型名1 成员名1; 数据类型名2 成员名2; 数据类型名n 成员名n;,stru
7、ct是关键字,不能省略,合法标识符可省:无名结构体,成员类型可以是基本型或构造型,以分号;结尾,例1:struct Student_Info char no9; /学号 char name20; /姓名 char sex; /性别 unsigned int age; /年龄 unsigned int classno; /班级 float grade; /成绩;,例2:struct Date int year; /年 int month; /月 int day; /日;,19,在结构体中数据类型相同的成员,既可逐个、逐行分别定义,也可合并成一行定义,就象一次定义多个变量一样。,struct St
8、udent_Info char no9; /学号 char name20; /姓名 char sex; /性别 unsigned int age; /年龄 unsigned int classno; /班级 float grade; /成绩;,struct Student_Info char no9, name20, sex; unsigned int age, classno; float grade; ;,struct Date int year; /年 int month; /月 int day; /日;,struct Date int year, month, day;,注意:结构类型
9、只是用户自定义的一种数据类型,用来定义描述结构的组织形式,不分配内存,只有用它来定义某个变量时,才会为该变量分配结构类型所需要大小的内存单元。所占内存的大小是它所包含的成员所占内存大小之和。,20,2、结构体变量的定义和引用,struct 结构体类型名 数据类型名1 成员名1; 数据类型名n 成员名n;struct 结构体类型名 变量名列表;,结构体变量的定义,间接定义法:先定义结构类型,再定义结构变量,21,2、结构体变量的定义和引用,struct 结构体类型名 数据类型名1 成员名1; 数据类型名n 成员名n; 变量名列表;,结构体变量的定义,直接定义法:定义结构体类型的同时定义结构体变量
10、,struct Student_Info char no9; /学号 char name20; /姓名 char sex; /性别 unsigned int age; /年龄 unsigned int classno; /班级 float grade; /成绩 student1, student2;,struct char no9; /学号 char name20; /姓名 char sex; /性别 unsigned int age; /年龄 unsigned int classno; /班级 float grade; /成绩 student1, student2;,或,无名结构体定义,变量
11、只能一次定义,22,结构体变量的引用,引用规则,结构体变量不能整体引用,只能引用变量成员,引用方式:,结构体变量名.成员名 /非指针型结构体变量的引用,可以将一个结构体变量赋值给另一个结构体变量,结构体嵌套时逐级引用,结构体指针-成员名 或 (*结构体指针).成员名/指针型结构体变量的引用,成员(分量)运算符结合性:从左向右,成员(分量)运算符结合性:从左向右,结构体变量名.成员名.子成员名最低级子成员名,23,3、结构体变量的赋值,结构体变量初始化赋值,先定义结构体类型,再定义结构体变量时赋初值,注意:赋初值时, 中间的数据顺序必须与结构体成员的定义顺序一致,否则就会出现混乱。,struct
12、 Student_Info stu = 20020306, ZhangMing, M, 18, 1, 90;,struct Student_Info stu = 18, ZhangMing, M, 20020306, 1, 90;,24,3、结构体变量的赋值,结构体变量初始化赋值,定义结构体类型的同时,定义结构体变量并赋初值,struct Date int year, month, day; birthday = 1986, 12, 10;,struct int year, month, day; birthday = 1986, 12, 10;,或,struct Student_Info c
13、har no9; /学号 char name20; /姓名 char sex; /性别 unsigned int age; /年龄 unsigned int classno; /班级 float grade; /成绩 student = 20020306, ZhangMing, M, 18, 1, 90;,25,strcpy (stu1.no, stu.no); strcpy (stu1.name, stu.name);stu1.sex = stu.sex;stu1.age = stu.age;stu1.classno = stu.classno;stu1.grade = stu.grade;
14、,struct Student_Info stu; strcpy (stu.no, 20020306); strcpy (stu.name, ZhangMing);stu.sex = M;stu.age = 18;stu.classno = 1;stu.grade = 90;struct Student_Info stu1;stu1 = stu;,3、结构体变量的赋值,结构体变量在程序中赋值,如果在定义结构体变量时并未对其赋初始值,那么在程序中要对它赋值的话,就只能一个一个地对其成员逐一赋值,或者用已赋值的同类型的结构体变量对它赋值,memcpy (,26,结论顺序表是用一维数组实现的线性表,
15、数组下标可以看成是元素的相对地址逻辑上相邻的元素,存储在物理位置也相邻的单元中,顺序存储结构的特点1.线性表的逻辑结构与存储结构一致 2.可以对数据元素实现随机读取,27,图2-1 线性表顺序存储结构示意图,28,设线性表中所有结点的类型相同,则每个结点所占用存储空间大小亦相同。假设表中每个结点占用L个存储单元,其中第一个单元的存储地址则是该结点的存储地址,并设表中开始结点a1的存储地址是d,那么结点ai的存储地址LOC(ai),LOC(ai)=d+(i-1)*L,29,若线性表采用顺序存储结构,每个元素占用4个存储单元,第1个元素的存储地址为100, 则第12个元素的存储地址是 。 A112
16、 B144 C148 0412,答案:B,30,基本运算在顺序表上的实现,插入、删除、定位,31,插入,线性表的插入运算是指在表的第i(1in+1)个位置上,插入一个新结点x,使长度为n的线性表:(a1,ai-1,ai,an)变成长度为n+1的线性表: (a1,ai-1,x,ai,an), 当表空间已满,不可再做插入操作 当插入位置为非法位置,不可做正常插入操作,32,将表中位置为n ,n-1,i上的结点,依次后移到位置n+1,n,i+1上,空出第i个位置在该位置上插入新结点x。仅当插入位置i=n+1时,才无须移动结点,直接将x插入表的末尾该顺序表长度加1 下图为在位置3插入新结点x=66示意
17、图。,顺序表插入操作过程,L.length-1,0,注意位置和下标的区别,21,18,30,75,42,56,87,66,3,33,void InsertSeqList ( Seqlist *L,DataType x,int i ) int j; if ( i L.length + 1 ) exit(“位置错误”); if ( L.length = MaxSize ) exit(“溢出); for( j=L.length-1; j=i; j-) L.data j = L.dataj-1 ; L.data i-1 = x; L.length+;,假设L已指向某线性表,L是Seqlist类型指针,
18、34,假设线性表中含有n个数据元素,在进行插入操作时,有 个位置可插入在每个位置插入数据的概率是:在i位置插入时,要移动 个数据假定在n+1个位置上插入元素的可能性均等,则平均移动元素的个数为:,插入算法的分析,n+1,1/(n+1),12,10,5,78,56,45,32,44,33,n-i+1,78,56,45,32,44,33,平均时间复杂度O(n),35,在长度为n的顺序表的第i(1in+1)个位置上插入一个元素,元素的移动次数为( ) A.n-i+1 B.n- i C.i D.i-1,答案:A,36,2. 删除,线性表的删除运算是指将表的第i个结点删去,使长度为n的线性表 (a1,a
19、i-1,ai,ai+1,an)变成长度为n-1的线性表 (a1,ai-1,ai+1,an),当要删除元素的位置i不在表长范围内(即i1或iL-length)时,为非法位置,不能做正常的删除操作,37,顺序表删除操作过程,1,若i=n,则只要删除终端结点,无须移动结点;2,若1in-1,则必须将表中位置 i+1,i+2,n的结点,依次前移到位置i,i+1,n-1上,以填补删除操作造成的空缺。 3,该表长度减1,仅当删除位置i=n时, 才无须移动结点,直接令表长度-1即可,38,顺序表删除操作过程,12,10,5,78,56,45,32,44,33,22,56,45,32,44,33,22,12,
20、10,5,78,56,45,32,44,33,22,56,45,32,44,33,22,lngth-1结束,j初值:删除位置ij终值:最后的前一个位置L.length,data = data ;,j-1,j,39,具体算法描述,void DeleteSeqList(SeqList *L,int i) int j; if( i L.length ) Error(“位置错误”); for( j = i ;j L.length ; j+ ) L.data j-1 =L.data j ; L.length-;,40,假设线性表中含有n个数据元素,在进行删除操作时,有 位置可删除在每个位置删除数据的概率
21、是:在i位置删除时,要移动 个数据假定在n个位置上删除元素的可能性均等,则平均移动元素的个数为:,删除算法的分析,n,1/n,12,10,78,56,45,32,5,44,33,22,n-i+1,56,45,32,44,33,22,长度:,10,9,41,在进行删除操作时,若假定删除每个元素的可能性均等,则平均移动元素的个数为:,平均时间复杂度O(n),42,习题:在长度为n的顺序表的第i(1in)个位置上删除一个元素,元素的移动次数为( ) A.n-i+1 B.n- i C.i D.i-1,答案:B,43,顺序存储结构表示的线性表,在做插入或删除操作时,平均需要移动大约一半的数据元素。当线性
22、表的数据元素量较大,并且经常要对其做插入或删除操作时,这一点需要值得考虑。,分析结论,44,3. 定位(查找),定位运算LocateSeqlist(L,X)的功能是求L中值等于X的结点序号的最小值,当不存在这种结点时结果为0。,45,从第一个元素 a1 起依次和x比较,直到找到一个与x相等的数据元素,则返回它在顺序表中的存储下标或序号;或者查遍整个表都没有找到与 x 相等的元素,返回0。,定位,L.length-1,0,46,定位,int locateSeqList (SeqList L, DataType x) i=1; while( (i=L.length) ,47,线性表的顺序存储结构必
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 自考 数据结构 导论 02142 第二 线性 ppt 课件
链接地址:https://www.31ppt.com/p-1372461.html