最新【考研计算机专业课】武汉大学数据结构PPT课件 第2章线性表(共144张PPT课件).pptx
《最新【考研计算机专业课】武汉大学数据结构PPT课件 第2章线性表(共144张PPT课件).pptx》由会员分享,可在线阅读,更多相关《最新【考研计算机专业课】武汉大学数据结构PPT课件 第2章线性表(共144张PPT课件).pptx(144页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第2章章 线性表线性表 2.1 线性表的基本概念线性表的基本概念 2.2 线性表的顺序存储线性表的顺序存储2.3 线性表的链式存储线性表的链式存储(cn ch)2.4 线性表的应用线性表的应用(yngyng) 2.5 有序表有序表 第一页,共一百四十四页。2.1.1 线性表的定义线性表的定义 线性表是具有线性表是具有相同特性的数据元素相同特性的数据元素(yun s)的一个的一个有限有限序列序列。 该序列中所含元素的个数叫做线性表的长度,用该序列中所含元素的个数叫做线性表的长度,用n表示,表示,n0。 当当n=0时,表示线性表是一个空表,即表中不包含任何元素。时,表示线性表是一个空表,即表中不
2、包含任何元素。设序列中第设序列中第i(i表示表示逻辑位序逻辑位序)个元素为)个元素为ai(1in)。)。 线性表的一般表示为:线性表的一般表示为: (a1,a2,ai,ai+1,an)逻辑逻辑(lu j)结构结构2.1 线性表的基本概念线性表的基本概念 第二页,共一百四十四页。 其中其中a1为第一个元素,又称做表头元素,为第一个元素,又称做表头元素,a2为第二个元素,为第二个元素,an为最后一个为最后一个(y )元素,又称做表尾元素。元素,又称做表尾元素。 例如,在线性表例如,在线性表 (1,4,3,2,8,10)中,中,1为表头元素,为表头元素,10为表尾元素。为表尾元素。第三页,共一百四十
3、四页。2.1.2 线性表的运算线性表的运算 线性表的基本运算如下:线性表的基本运算如下: (1)初始化线性表)初始化线性表InitList(&L):构造一个空的线性表:构造一个空的线性表L。 (2)销毁)销毁(xiohu)线性表线性表DestroyList(&L):释放线性表:释放线性表L占用的内存空间。占用的内存空间。逻辑逻辑(lu j)结构抽象运算结构抽象运算ADT第四页,共一百四十四页。 (3)判线性表是否为空表)判线性表是否为空表ListEmpty(L):若:若L为空表,则返为空表,则返回真,否则返回假。回真,否则返回假。 (4)求线性表的长度)求线性表的长度ListLength(L)
4、:返回:返回L中元素个数。中元素个数。 (5)输出线性表)输出线性表DispList(L):当线性表:当线性表L不为空时,顺序显示不为空时,顺序显示L中各结点的值域。中各结点的值域。 ( 6 ) 求 线 性 表) 求 线 性 表 L 中 指 定 位 置 的 某 个中 指 定 位 置 的 某 个( m u )数 据 元 素数 据 元 素GetElem(L,i,&e):用:用e返回返回L中第中第 i(1iListLength(L)个元素的值。个元素的值。第五页,共一百四十四页。 (7)定位查找)定位查找LocateElem(L,e):返回:返回(fnhu)L中第中第1个值域与个值域与e相等的位序。
5、若这样的元素不存在,则返回相等的位序。若这样的元素不存在,则返回(fnhu)值为值为0。 ( 8 ) 插 入 数 据 元 素) 插 入 数 据 元 素 L i s t I n s e r t ( & L , i , e ) : 在: 在 L 的 第的 第i(1iListLength(L)+1)个元素之前插入新的元素个元素之前插入新的元素e,L的长度增的长度增1。 (9)删除数据元素)删除数据元素ListDelete(&L,i,&e):删除:删除L的第的第i(1iListLength(L)个元素,并用个元素,并用e返回其值,返回其值,L的长度减的长度减1。第六页,共一百四十四页。2.2.1 线性
6、表的顺序存储线性表的顺序存储顺序表顺序表 线性表的顺序存储结构就是:线性表的顺序存储结构就是:把线性表中的所有元素按照其把线性表中的所有元素按照其逻辑顺序依次存储到从计算机存储器中指定存储位置开始的一逻辑顺序依次存储到从计算机存储器中指定存储位置开始的一块连续块连续(linx)的存储空间中。的存储空间中。 这样,线性表中第一个元素的存储位置就是指定的存储位置,这样,线性表中第一个元素的存储位置就是指定的存储位置,第第i+1个元素(个元素(1in-1)的存储)的存储位置紧接在第位置紧接在第i i个元素的存储位个元素的存储位置的后面。置的后面。线性表线性表 逻辑逻辑(lu j)(lu j)结构结构
7、顺序顺序表表 存储结构存储结构区别区别(qbi)2.2 线性表的顺序存储线性表的顺序存储第七页,共一百四十四页。 假定线性表的元素假定线性表的元素(yun s)类型为类型为ElemType,则每个元素,则每个元素(yun s)所占所占用存储空间大小(即字节数)为用存储空间大小(即字节数)为sizeof(ElemType),整个线性表所占用,整个线性表所占用存储空间的大小为:存储空间的大小为: n*sizeof(ElemType)其中,其中,n表示线性表的长度。表示线性表的长度。第八页,共一百四十四页。 a a1 1 LOC(A) 0 a a2 2 LOC(A)+sizeof(ElemType)
8、 1 线性表存储空间线性表存储空间 存储地址存储地址 下标位置下标位置 a ai i LOC(A)+(i-1)*sizeof(ElemType) i-1 a an n LOC(A)+(n-1)*sizeof(ElemType) n-1 LOC(A)+(MaxSize-1)*sizeof(ElemType) MaxSize-1 顺序顺序(shnx)(shnx)表示表示意图意图第九页,共一百四十四页。 在定义在定义(dngy)一个线性表的顺序存储类型时,需要定义一个线性表的顺序存储类型时,需要定义(dngy)一个数一个数组来存储线线表中的所有元素组来存储线线表中的所有元素和定义和定义一个整型变量来
9、存储线性表一个整型变量来存储线性表的长度的长度。 假定数组用假定数组用dataMaxSize表示,长度整型变量用表示,长度整型变量用length表示,表示,并采用结构体类型表示,则元素类型为通用类型标识符并采用结构体类型表示,则元素类型为通用类型标识符ElemType的线性表的顺序存储类型可描述如下的线性表的顺序存储类型可描述如下:第十页,共一百四十四页。 typedef struct ElemType dataMaxSize; int length; SqList; /顺序顺序(shnx)表类型表类型 其中,其中,data成员存放元素,成员存放元素,length成员存放线性表的实际长度。成员
10、存放线性表的实际长度。 说明:由于说明:由于C/C+中数组的下标从中数组的下标从0开始,线性表的第开始,线性表的第i个元个元素素ai存放顺序存放顺序(shnx)表的第表的第i-1位置上。为了清楚,将位置上。为了清楚,将ai在逻辑在逻辑序列中的位置称为序列中的位置称为逻辑位序逻辑位序,在顺序表中的位置称为,在顺序表中的位置称为物理物理位序位序。第十一页,共一百四十四页。地址地址城市名城市名区号区号说明说明100Beijing010首都首都130Shanghai021直辖市直辖市160Wuhan027湖北省省会湖北省省会190Xian029陕西省省会陕西省省会210Nanjing025江苏省省会江
11、苏省省会 对于第对于第1章的逻辑结构章的逻辑结构City,假定每个元素占用,假定每个元素占用30个存储单元个存储单元(dnyun),数据从,数据从100号单元号单元(dnyun)开始由低地址向高地址方向存储,开始由低地址向高地址方向存储,对应的顺序表如下:对应的顺序表如下: 第十二页,共一百四十四页。2.2.2 顺序表基本顺序表基本(jbn)运算的实现运算的实现 一旦采用顺序表存储结构,可以用一旦采用顺序表存储结构,可以用C/C+语言语言(yyn)实现实现线性表的各种基本运算。为了方便,假设线性表的各种基本运算。为了方便,假设ElemType为为char类型,使用如下自定义类型语句:类型,使用
12、如下自定义类型语句: typedef char ElemType;第十三页,共一百四十四页。1. 建立顺序表建立顺序表其方法其方法(fngf)是将给定的含有是将给定的含有n个元素的数组的每个元素依次放入到顺个元素的数组的每个元素依次放入到顺序表中,并将序表中,并将n赋给顺序表的长度成员。算法如下:赋给顺序表的长度成员。算法如下: void CreateList(SqList *&L,ElemType a,int n) /建立顺序表建立顺序表 int i; L=(SqList *)malloc(sizeof(SqList); for (i=0;idatai=ai; L-length=n; 由给定
13、的由给定的CC+数组建立数组建立(jinl)顺序表。顺序表。第十四页,共一百四十四页。2. 顺序表基本运算算法顺序表基本运算算法 (1) 初始化线性表初始化线性表InitList(L) 该运算的结果是构造该运算的结果是构造(guzo)一个空的线性表一个空的线性表L。实际上只需将。实际上只需将length成员设置为成员设置为0即可。即可。 void InitList(SqList *&L) /引用型指针引用型指针 L=(SqList *)malloc(sizeof(SqList); /分配存放线性表的空间分配存放线性表的空间 L-length=0; 本算法的时间复杂度为本算法的时间复杂度为O(1
14、)。顺序顺序(shnx)表表LL指针指向一个指针指向一个(y )顺序表顺序表第十五页,共一百四十四页。引用的作用引用的作用(zuyng)(zuyng): 当不用引用时当不用引用时main() SqList *sq; InitList(sq); op(sq);void InitList (SqList *L) L=(SqList *)malloc(sizeof(SqList); L-length=0;?sqL0?sqmain:调用调用(dioyng)InitList返回返回(fnhu)到到main:顺序表顺序表第十六页,共一百四十四页。引用的作用引用的作用(zuyng):当使用引用时:当使用引用
15、时main() SqList *sq; InitList(sq); op(sq);void InitList (SqList *&L) /用引用用引用 L=(SqList *) malloc (sizeof(SqList); L-length=0;?sqL0sqmain:调用调用(dioyng)InitList返回返回(fnhu)到到main:顺序表顺序表第十七页,共一百四十四页。 (2) 销毁线性表销毁线性表DestroyList(L) 该运算该运算(yn sun)的结果是释放线性表的结果是释放线性表L占用的内存空间。占用的内存空间。 void DestroyList(SqList *&L)
16、 free(L); 本算法的时间复杂度为本算法的时间复杂度为O(1)。 第十八页,共一百四十四页。 思考题:思考题:这里采用顺序这里采用顺序(shnx)指针,而不是直接给定顺指针,而不是直接给定顺序序(shnx)表。两者有什么区别?表。两者有什么区别?例如例如(lr),如果直接采用顺序表:,如果直接采用顺序表:void InitList(SqList &L) /引用型引用型 L.length=0;第十九页,共一百四十四页。 (3) 判定是否为空表判定是否为空表ListEmpty(L) 该运算该运算(yn sun)返回一个值表示返回一个值表示L是否为空表。若是否为空表。若L为空表,则返回为空表,
17、则返回1,否则返回否则返回0。 int ListEmpty(SqList *L) return(L-length=0); 本算法的时间复杂度为本算法的时间复杂度为O(1)。第二十页,共一百四十四页。 (4)求线性表的长度)求线性表的长度ListLength(L) 该运算返回该运算返回(fnhu)顺序表顺序表L的长度。实际上只需返回的长度。实际上只需返回(fnhu)length成员的值即可。成员的值即可。 int ListLength(SqList *L) return(L-length); 本算法的时间复杂度为本算法的时间复杂度为O(1)。第二十一页,共一百四十四页。 (5)输出线性表)输出线
18、性表DispList(L) 该运算当线性表该运算当线性表L不为不为(b wi)空时,顺序显示空时,顺序显示L中各元素的值。中各元素的值。 void DispList(SqList *L) int i;if (ListEmpty(L) return;for (i=0;ilength;i+)printf(%c,L-datai);printf(n); 第二十二页,共一百四十四页。 本算法中基本本算法中基本(jbn)运算为运算为for循环中的循环中的printf语句,故时间语句,故时间复杂度为:复杂度为: O(L- -length)或或O(n)(n表示表示L中的元素个数)中的元素个数)第二十三页,共一
19、百四十四页。 (6)求某个)求某个(mu )数据元素值数据元素值GetElem(L,i,e) 该运算返回该运算返回L中第中第 i(1iListLength(L)个元素的值,存放在个元素的值,存放在e中。中。 int GetElem(SqList *L,int i,ElemType &e) if (iL-length) return 0;e=L-datai-1;return 1; 本算法的时间复杂度为本算法的时间复杂度为O(1)。 第二十四页,共一百四十四页。 (7) 按元素值查找按元素值查找LocateElem(L,e) 该运算顺序查找第该运算顺序查找第1个值域与个值域与e相等的元素的位序。若
20、这样相等的元素的位序。若这样(zhyng)的元素不的元素不存在,则返回值为存在,则返回值为0。 int LocateElem(SqList *L,ElemType e) int i=0;while (ilength & L-datai!=e) i+;if (i=L-length) return 0;else return i+1; 第二十五页,共一百四十四页。 本算法中基本运算为本算法中基本运算为while循环中的循环中的i+语句,故时间语句,故时间(shjin)复杂度为:复杂度为: O(L-length)或或O(n) (n表示表示L中的元素个数)中的元素个数)第二十六页,共一百四十四页。 (
21、8) 插入数据元素插入数据元素ListInsert(L,i,e) 该运算在顺序表该运算在顺序表L的第的第i个位置个位置(1iListLength(L)+1)上上插入新的元素插入新的元素e。 思路:如果思路:如果i值不正确,则显示相应错误信息;否则将顺值不正确,则显示相应错误信息;否则将顺序表原来第序表原来第i个元素及以后个元素及以后(yhu)元素均后移一个位置,腾出一元素均后移一个位置,腾出一个空位置插入新元素,顺序表长度增个空位置插入新元素,顺序表长度增1。第二十七页,共一百四十四页。int ListInsert(SqList *&L,int i,ElemType e) int j; if
22、(iL-length+1) return 0; i-; /将顺序表逻辑位序转化为将顺序表逻辑位序转化为data下标即物理位序下标即物理位序 for (j=L-length;ji;j-) /将将datai及后面元素及后面元素(yun s)后移后移 L-dataj=L-dataj-1; L-datai=e; L-length+; /顺序表长度增顺序表长度增1 return 1;a0ai-1aian-1逻辑逻辑(lu j)位序位序1 i i+1 n MaxSize 第二十八页,共一百四十四页。 对于本算法来说,元素移动的次数不仅与表长对于本算法来说,元素移动的次数不仅与表长L.length=n有关,
23、有关,而且与插入位置而且与插入位置i有关:当有关:当i=n+1时,移动次数为时,移动次数为0; 当当i=1时,移动次数为时,移动次数为n,达到最大值。在线性表,达到最大值。在线性表sq中共有中共有n+1个可以插入元素的地方个可以插入元素的地方(dfng)。假设。假设pi(= )是在第)是在第i个位个位置上插入一个元素的概率,则在长度为置上插入一个元素的概率,则在长度为n的线性表中插入一个元素时的线性表中插入一个元素时所需移动元素的平均次数为:所需移动元素的平均次数为: 因此插入算法的平均时间复杂度为因此插入算法的平均时间复杂度为O(n)。11n)(2)1(11)1(1111nOninninni
24、niip an-1ai-1(共(共n-1-(i-1)+1=n-i+1)个)个元素元素(yun s)移动移动第二十九页,共一百四十四页。 (9)删除数据元素)删除数据元素ListDelete(L,i,e) 删除顺序表删除顺序表L中的第中的第i(1iListLength(L)个元素。个元素。 思路:如果思路:如果i值不正确,则显示相应错误信息;否则将线性表值不正确,则显示相应错误信息;否则将线性表第第i个元素以后元素均向前移动个元素以后元素均向前移动(ydng)一个位置,这样覆盖了原来一个位置,这样覆盖了原来的第的第i个元素,达到删除该元素的目的,最后顺序表长度减个元素,达到删除该元素的目的,最后
25、顺序表长度减1。第三十页,共一百四十四页。int ListDelete(SqList *&L,int i,ElemType &e) int j; if (iL-length) return 0; i-; /将逻辑将逻辑(lu j)位序转化为位序转化为data下标即物理位序下标即物理位序 e=L-datai; for (j=i;jlength-1;j+) /将将datai之后的元素后前移之后的元素后前移 L-dataj=L-dataj+1; L-length-;/顺序表长度减顺序表长度减1 return 1;a0ai-1aian-1逻辑逻辑(lu j)位序位序1 i i+1 n MaxSize
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 考研计算机专业课 最新【考研计算机专业课】武汉大学数据结构PPT课件 第2章 线性表共144张PPT课件 最新 考研 计算机 专业课 武汉大学 数据结构 PPT 课件 线性 144
链接地址:https://www.taowenge.com/p-27191063.html
限制150内