第2章-线性表数据结构课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第2章-线性表数据结构课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 线性 数据结构 课件
- 资源描述:
-
1、国际教育学院国际教育学院 第第2 2章章 线性表线性表 第第3 3章章 栈和队列栈和队列 第第4 4章章 串串 第第5 5章章 数组和广义表数组和广义表 线性结构线性结构若结构是非空有限集,则有且仅有一个开始结若结构是非空有限集,则有且仅有一个开始结点和一个终端结点,并且所有结点都最多只有一个点和一个终端结点,并且所有结点都最多只有一个直接前趋和一个直接后继。直接前趋和一个直接后继。可表示为可表示为:(:(a a1 1,a,a2 2 ,a,an n)(逻辑、存储(逻辑、存储和运算)和运算)国际教育学院国际教育学院 只有一个首结点和尾结点;只有一个首结点和尾结点;除首尾结点外,其他结点只有一个直
2、接前驱和一除首尾结点外,其他结点只有一个直接前驱和一个直接后继。个直接后继。线性结构表达式:(线性结构表达式:(a a1 1,a,a2 2 ,a,an n)线性结构包括线性表、堆栈、队列、字符串、数线性结构包括线性表、堆栈、队列、字符串、数组等等,其中,最典型、最常用的是组等等,其中,最典型、最常用的是线性表线性表简言之,线性结构反映结点间的逻辑关系是简言之,线性结构反映结点间的逻辑关系是 一对一一对一 的的国际教育学院国际教育学院第第2 2章章线性表线性表1.了解线性结构的特点了解线性结构的特点2.2.掌握顺序表的定义、查找、插入和删除掌握顺序表的定义、查找、插入和删除 3.3.掌握链表的定
3、义、查找、插入和删除掌握链表的定义、查找、插入和删除 4.4.能够从时间和空间复杂度的角度比较两种能够从时间和空间复杂度的角度比较两种存储结构的不同特点及其适用场合存储结构的不同特点及其适用场合 教学目标教学目标国际教育学院国际教育学院2.1 线性表的类型定义线性表的类型定义2.2 线性表的顺序表示和实现线性表的顺序表示和实现2.3 线性表的链式表示和实现线性表的链式表示和实现教学内容教学内容国际教育学院国际教育学院(a1,a2,ai-1,ai,ai1,,an)线性表的定义:线性表的定义:用数据元素的有限序列表示用数据元素的有限序列表示n=0n=0时称为时称为数据元素数据元素线性起点线性起点a
4、i的直接前趋的直接前趋ai的直接后继的直接后继下标,下标,是元素的是元素的序号,表示元素序号,表示元素在表中的位置在表中的位置n n为元素总个为元素总个数,即表长数,即表长空表空表线性终点线性终点2.1 2.1 线性表的类型定义线性表的类型定义国际教育学院国际教育学院 (A,B,C,D,Z)学号学号姓名姓名性别性别年龄年龄班级班级041810205041810205于春梅于春梅女女 18 180404级计算机级计算机1 1班班041810260041810260何仕鹏何仕鹏男男 20 200404级计算机级计算机2 2班班041810284041810284王王 爽爽女女 19 190404级
5、计算机级计算机3 3班班041810360041810360王亚武王亚武男男 18 180404级计算机级计算机4 4班班:数据元素都是记录数据元素都是记录;元素间关系是线性元素间关系是线性数据元素都是字母数据元素都是字母;元素间关系是线性元素间关系是线性同一线性表中的元素必定具有相同特性同一线性表中的元素必定具有相同特性国际教育学院国际教育学院线性表的基本操作线性表的基本操作1.1.初始化线性表初始化线性表L InitList(LL InitList(L)2.2.销毁线性表销毁线性表L DestoryList(LL DestoryList(L)3.3.清空线性表清空线性表L ClearLis
6、t(LL ClearList(L)4.4.求线性表求线性表L L的长度的长度 ListLength(LListLength(L)5.5.判断线性表判断线性表L L是否为空是否为空 IsEmpty(LIsEmpty(L)6.6.获取线性表获取线性表L L中的某个数据元素内容中的某个数据元素内容 GetElem(L,i,eGetElem(L,i,e)7.7.检索值为检索值为e e的数据元素的数据元素 LocateELem(L,eLocateELem(L,e)8.8.返回线性表返回线性表L L中中e e的直接前驱元素的直接前驱元素 PriorElem(L,ePriorElem(L,e)9.9.返回线
7、性表返回线性表L L中中e e的直接后继元素的直接后继元素 NextElem(L,eNextElem(L,e)10.10.在线性表在线性表L L中插入一个数据元素中插入一个数据元素 ListInsert(L,i,eListInsert(L,i,e)11.11.删除线性表删除线性表L L中第中第i i个数据元素个数据元素 ListDelete(L,i,eListDelete(L,i,e)国际教育学院国际教育学院算法算法2.12.1、2.22.2、2.72.7、2.122.12放在放在后面统一讲解后面统一讲解国际教育学院国际教育学院2.2 2.2 线性表的顺序表示和实现线性表的顺序表示和实现线性表
8、的顺序表示又称为线性表的顺序表示又称为顺序存储结构顺序存储结构或或顺序映像顺序映像。简言之,逻辑上相邻,物理上也相邻简言之,逻辑上相邻,物理上也相邻顺序存储方法:顺序存储方法:用用一组地址连续一组地址连续的存储单元依次存储的存储单元依次存储线性表的元素,可通过线性表的元素,可通过数组数组VnVn来实现。来实现。顺序存储定义:顺序存储定义:把逻辑上相邻的数据元素存储在物理把逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构。上相邻的存储单元中的存储结构。国际教育学院国际教育学院元素元素n n.元素元素i i.元素元素2 2元素元素1 1LoLo+mLo+(i-1)*mLo+(n-1)*m
9、存储地址存储地址存储内容存储内容Loc(元素元素i)=Lo+(i-1)*m顺序存储顺序存储国际教育学院国际教育学院#define LIST_INIT_SIZE 100 /#define LIST_INIT_SIZE 100 /最大长度最大长度#define LISTINCREMENT 10#define LISTINCREMENT 10 /分配增量分配增量typedef structtypedef struct ElemType ElemType *elemelem;/;/指向数据元素的基地址指向数据元素的基地址 intint length;/length;/线性表的当前长度线性表的当前长度
10、int listsizeint listsize;/当前分配的存储容量当前分配的存储容量 SqListSqList;顺序表的类型定义顺序表的类型定义数据结构基本运算操作有:数据结构基本运算操作有:查找、插入、删除查找、插入、删除国际教育学院国际教育学院malloc(malloc(m m):开辟:开辟m m字节长度的地址空间,字节长度的地址空间,并返回这段空间的首地址并返回这段空间的首地址sizeof(sizeof(x x):计算变量:计算变量x x的长度的长度free(free(p p):释放指针:释放指针p p所指变量的存储空间所指变量的存储空间,即彻底删除一个变量,即彻底删除一个变量补充:
11、补充:C C语言的动态分配函数(语言的动态分配函数()国际教育学院国际教育学院new new 类型名类型名T T(初值列表)(初值列表)功能:功能:申请用于存放申请用于存放T T类型对象的内存空间,并依初值列表赋以初值类型对象的内存空间,并依初值列表赋以初值结果值:结果值:成功:成功:T T类型的指针,指向新分配的内存类型的指针,指向新分配的内存失败:失败:0 0(NULLNULL)int*p1=new int;或或 int*p1=new int(10);delete delete 指针指针P P功能:功能:释放指针释放指针P P所指向的内存。所指向的内存。P P必须是必须是newnew操作的
12、返回值操作的返回值delete p1;补充:补充:C+C+的动态存储分配的动态存储分配国际教育学院国际教育学院n函数调用时传送给形参表的实参必须与形参在类函数调用时传送给形参表的实参必须与形参在类型、个数、顺序上保持一致型、个数、顺序上保持一致n参数传递有两种方式参数传递有两种方式n传值方式传值方式(参数为整型、实型、字符型等)(参数为整型、实型、字符型等)n传地址传地址参数为指针变量参数为指针变量参数为引用类型参数为引用类型参数为数组名参数为数组名补充:补充:C+C+中的参数传递中的参数传递国际教育学院国际教育学院void main()float a,b;cinab;swap(a,b);co
13、utaendlbendl;#include void swap(float m,float n)float temp;temp=m;m=n;n=temp;传值传值方式方式把实参的值传送给函数局部工作区相应的副把实参的值传送给函数局部工作区相应的副本中本中,函数使用这个副本执行必要的功能。,函数使用这个副本执行必要的功能。函数修改的是函数修改的是副本的值副本的值,实参的值不变实参的值不变国际教育学院国际教育学院传地址传地址方式方式指针变量作参数指针变量作参数void main()float a,b,*p1,*p2;cinab;p1=&a;p2=&b;swap(p1,p2);coutaendlbe
14、ndl;#include void swap(float*m,float*n)float t;t=*m;*m=*n;*n=t;形参变化影响实参形参变化影响实参国际教育学院国际教育学院传地址传地址方式方式指针变量作参数指针变量作参数void main()float a,b,*p1,*p2;cinab;p1=&a;p2=&b;swap(p1,p2);coutaendlbendl;#include void swap(float*m,float*n)float*t;t=m;m=n;n=t;形参变化不影响实参?形参变化不影响实参?国际教育学院国际教育学院传地址传地址方式方式引用类型作参数引用类型作参数
15、引用:它用来给一个对象提供一个替代的名字。引用:它用来给一个对象提供一个替代的名字。#includevoid main()int i=5;int&j=i;i=7;couti=i j=ab;swap(a,b);coutaendlbendl;#include void swap(float m,float n)float temp;temp=m;m=n;n=temp;传地址传地址方式方式引用类型作参数引用类型作参数国际教育学院国际教育学院(1 1)传递引用给函数与传递指针的效果是一)传递引用给函数与传递指针的效果是一样的,样的,形参变化实参也发生变化形参变化实参也发生变化。(2 2)引用类型作形参
16、,在内存中并没有产生)引用类型作形参,在内存中并没有产生实参的副本,它实参的副本,它直接对实参操作直接对实参操作;而一般变;而一般变量作参数,形参与实参就占用不同的存储单量作参数,形参与实参就占用不同的存储单元,所以形参变量的值是实参变量的副本。元,所以形参变量的值是实参变量的副本。因此,当因此,当参数传递的数据量较大参数传递的数据量较大时,用引用时,用引用比用一般变量传递参数的时间和空间效率都比用一般变量传递参数的时间和空间效率都好。好。引用类型作形参的三点说明引用类型作形参的三点说明国际教育学院国际教育学院(3)指针参数虽然也能达到与使用引用的效)指针参数虽然也能达到与使用引用的效果,但在
17、被调函数中需要重复使用果,但在被调函数中需要重复使用“*指针指针变量名变量名”的形式进行运算,这很容易产生错的形式进行运算,这很容易产生错误且程序的阅读性较差;另一方面,在主调误且程序的阅读性较差;另一方面,在主调函数的调用点处,必须用函数的调用点处,必须用变量的地址作为实变量的地址作为实参参。引用类型作形参的三点说明引用类型作形参的三点说明国际教育学院国际教育学院传地址传地址方式方式数组名作参数数组名作参数#includevoid sub(char);void main(void)char a10=“hello”;sub(a);coutaendl;void sub(char b)b=“wor
18、ld”;传递的是数组的首地址传递的是数组的首地址对形参数组所做的任何改变都将反映到实参数组中对形参数组所做的任何改变都将反映到实参数组中国际教育学院国际教育学院#include#define N 10int max(int a);void main()int a10;int i,m;for(i=0;iai;m=max(a);coutthe max number is:m;int max(int b)int i,n;n=b0;for(i=1;iN;i+)if(nbi)n=bi;return n;用数组作函数的参数,求用数组作函数的参数,求10个整数的最大数个整数的最大数国际教育学院国际教育学院练
19、习:练习:用数组作为函数的参数,将数组中用数组作为函数的参数,将数组中n个整数按相反的顺序存个整数按相反的顺序存放,要求输入和输出在主函数中完成放,要求输入和输出在主函数中完成#include#define N 10void sub(int b)int i,j,temp,m;m=N/2;for(i=0;im;i+)j=N-1-i;temp=bi;bi=bj;bj=temp;return;void main()int a10,i;for(i=0;iai;sub(a);for(i=0;iN;i+)coutelemL-elem=(ElemType=(ElemType*)malloc(LIST_INI
20、T_SIZE)malloc(LIST_INIT_SIZE*sizeof(ElemTypesizeof(ElemType););/分配空间分配空间 if(L-elemif(L-elem=NULL)exit(OVERFLOW);/=NULL)exit(OVERFLOW);/分配失败分配失败 L-length=0;/L-length=0;/空表长度置空表长度置0 0 return OK;/return OK;/成功返回成功返回OKOK 典型操作的算法实现典型操作的算法实现国际教育学院国际教育学院2.2.销毁线性表销毁线性表L Lvoid DestroyList(SqListvoid DestroyL
21、ist(SqList&L)&L)if(L.elem if(L.elem)free(L.elem)free(L.elem);/);/释放存储空间释放存储空间 3.3.清空线性表清空线性表L Lvoid ClearList(SqList&L)L.length=0;/将线性表的长度置为将线性表的长度置为0国际教育学院国际教育学院4.4.求线性表求线性表L L的长度的长度int GetLength(SqList&L)return(L.length);5.5.判断线性表判断线性表L L是否为空是否为空int IsEmpty(SqList&L)if(L.length=0)return TRUE;else
22、return FALSE;国际教育学院国际教育学院6.6.获取线性表获取线性表L L中的某个数据元素的内容中的某个数据元素的内容/根据指定位置,获取相应位置数据元素的内容根据指定位置,获取相应位置数据元素的内容intint GetElem(SqList GetElem(SqList&L,int&L,int i,ElemTypei,ElemType&e&e)if(iL.length)return ERROR;if(iL.length)return ERROR;/判断判断i i值是否合理,若不合理,返回值是否合理,若不合理,返回ERRORERROR e=L.elemi-1;e=L.elemi-1;
23、/第第i-1i-1的单元存储着第的单元存储着第i i个数据个数据 return OK;return OK;国际教育学院国际教育学院查找查找(根据指定数据查找,返回数据所在的位置)(根据指定数据查找,返回数据所在的位置)25 34 57 16 48 09 0 1 2 3 4 5 data查找查找 16 i25 34 57 16 48 09 i25 34 57 16 48 09 i25 34 57 16 48 09 i查找成功查找成功国际教育学院国际教育学院25 34 57 16 48 0 1 2 3 4data查找 50i25 34 57 16 48 i25 34 57 16 48 i25 34
24、 57 16 48 i25 34 57 16 48 i查找失败查找失败国际教育学院国际教育学院查找算法时间效率分析查找算法时间效率分析7.7.在线性表在线性表L L中查找值为中查找值为e e的数据元素的数据元素int LocateELem(SqList&L,ElemType&e)for(i=0;i L.length;i+)if(L.elemi=e)return i+1;return 0;国际教育学院国际教育学院niniicp 1=ACN212)(11)2(111=1nnnnnninni ACN查找算法时间效率分析查找算法时间效率分析国际教育学院国际教育学院2512478936141234567
25、892512479989361499插入插入251247893614251247893614251247893614插第插第 4 4 个结点之前,移动个结点之前,移动 6 64+14+1 次次插在第插在第 i i 个结点之前,移动个结点之前,移动 n-i+1n-i+1 次次插入插入(插在第(插在第 i i 个结点之前)个结点之前)国际教育学院国际教育学院实现步骤:实现步骤:事先应判断事先应判断:插入位置插入位置i i 是否合法是否合法?表是否已满表是否已满?应当有应当有1in+1 1in+1 或或 i=1,n+1i=1,n+1将第将第n n至第至第i i 位的元素向后移动一个位的元素向后移动一
展开阅读全文