数据结构线性表及其基本算法学习教案.pptx
《数据结构线性表及其基本算法学习教案.pptx》由会员分享,可在线阅读,更多相关《数据结构线性表及其基本算法学习教案.pptx(49页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、会计学1数据结构数据结构(sh j ji u)线性表及其基本算线性表及其基本算法法第一页,共49页。n n教学教学(jio xu)(jio xu)目标目标n n线性表的逻辑结构特征;线性表上定义的基本运算,并利用基本运算构线性表的逻辑结构特征;线性表上定义的基本运算,并利用基本运算构造出较复杂的运算。造出较复杂的运算。n n掌握顺序表的含义及特点,顺序表上的插入、删除操作是及其平均时间掌握顺序表的含义及特点,顺序表上的插入、删除操作是及其平均时间性能分析,解决简单应用问题。性能分析,解决简单应用问题。n n掌握链表如何表示线性表中元素之间的逻辑关系;单链表、双链表、循掌握链表如何表示线性表中元
2、素之间的逻辑关系;单链表、双链表、循环链表链接方式上的区别;单链表上实现的建表、查找、插入和删除等环链表链接方式上的区别;单链表上实现的建表、查找、插入和删除等基本算法及其时间复杂度。循环链表上尾指针取代头指针的作用,以及基本算法及其时间复杂度。循环链表上尾指针取代头指针的作用,以及单循环链表上的算法与单链表上相应算法的异同点。双链表的定义和相单循环链表上的算法与单链表上相应算法的异同点。双链表的定义和相关算法。利用链表设计算法解决简单应用问题。关算法。利用链表设计算法解决简单应用问题。n n领会顺序表和链表的比较,以及如何选择其一作为其存储结构才能取得领会顺序表和链表的比较,以及如何选择其一
3、作为其存储结构才能取得较优的时空性能。较优的时空性能。第1页/共50页第二页,共49页。n n教学重点与难点n n本章的重点是掌握顺序表和单链表上实现的各种基本算法及相关的时间性能分析;n n难点是使用本章所学的基本知识设计有效算法解决与线性表相关的应用(yngyng)问题。n n教学方法n n课堂讲授n n提问互动n n实验第2页/共50页第三页,共49页。n n定义:n n线性表(linear list)n n (a1,a2,an)n n 其中:n nn:数据元素的个数或线性表的长度;n nai:是一个抽象的符号(fho),它的数据类型设定为ElemType,表示某一种具体的已知数据类型(
4、1in)。2.1 线性表的类型定义线性表的类型定义第3页/共50页第四页,共49页。n n非空线性表的特征(tzhng)(P18)n n 有且仅有一个开始结点(表头结点 head)a1,它没有直接前驱,只有一个直接后继;n n 有且仅有一个终端结点(表尾结点tail)an,它没有直接后继,只有一个直接前驱;n n 其它结点都有一个直接前驱和直接后继;n n 元素之间为一对一的线性关系。第4页/共50页第五页,共49页。线性表的抽象数据类型定义线性表的抽象数据类型定义(dngy)(P18)ADT ListADT List 数据对象数据对象(duxing)(duxing):D=ai|aiD=ai|
5、aiElemSet;1in,n0;ElemSet;1in,n0;数据关系:数据关系:R=|R=|ai,ai+1ai,ai+1D,i=1,2,n-1D,i=1,2,n-1 基本操作:基本操作:InitList(&L)InitList(&L)ListLength(L)ListLength(L)GetElem(L,i,&e)GetElem(L,i,&e)PriorElem(L,cur_e,&pre_e)PriorElem(L,cur_e,&pre_e)NextElem(L,cur_e,&next_e)NextElem(L,cur_e,&next_e)LocateElem(L,e,compare()L
6、ocateElem(L,e,compare()ListInsert(&L,i,e)ListInsert(&L,i,e)ListDelete(&L,i,&e)ListDelete(&L,i,&e)ADT ListADT List第5页/共50页第六页,共49页。算法算法(sun f)2.1(线性表的首尾(线性表的首尾合并)合并)void union(List&La,List Lb)void union(List&La,List Lb)La_len=ListLength(La);Lb_len=ListLength(Lb);La_len=ListLength(La);Lb_len=ListLengt
7、h(Lb);for(i=1;i=Lb_len;i+)for(i=1;i=Lb_len;i+)GetElem(Lb,i,e);GetElem(Lb,i,e);if (!LocateElem(La,e,equal)if (!LocateElem(La,e,equal)ListInsert(La,+La_len,e);ListInsert(La,+La_len,e);/union /union 算法分析:算法分析:设设LocateElemLocateElem的执行的执行(zhxng)(zhxng)时间与表长成正比,时间与表长成正比,即:算法的时间复杂度为:即:算法的时间复杂度为:O(ListLeng
8、th(La)*ListLength(Lb)O(ListLength(La)*ListLength(Lb)第6页/共50页第七页,共49页。算法算法(sun f)2.2(有(有序线性表的合并)序线性表的合并)void MergeList(List La,List Lb,List&Lc)void MergeList(List La,List Lb,List&Lc)InitList(Lc);i=j=1;k=0;InitList(Lc);i=j=1;k=0;La_Len=ListLength(La);Lb_Len=ListLength(Lb);La_Len=ListLength(La);Lb_Len=
9、ListLength(Lb);while(i=La_Len)&(j=Lb_Len)while(i=La_Len)&(j=Lb_Len)GetElem(La,i,ai);GetElem(La,i,ai);GetElem(Lb,j,bj);GetElem(Lb,j,bj);if(ai=bj)ListInsert(Lc,+k,ai);+i;if(ai=bj)ListInsert(Lc,+k,ai);+i;else ListInsert(Lc,+k,bj);+j;else ListInsert(Lc,+k,bj);+j;while(i=La_len)while(i=La_len)GetElem(La,
10、i+;ai);ListInsert(Lc,+k,ai);GetElem(La,i+;ai);ListInsert(Lc,+k,ai);while(j=Lb_len)while(j=Lb_len)GetElem(Lb,j+;bj);ListInsert(Lc,+k,bj);GetElem(Lb,j+;bj);ListInsert(Lc,+k,bj);/MergeList/MergeList第7页/共50页第八页,共49页。2.2 线性表的顺序存储结构线性表的顺序存储结构(jigu)n n一、特点n n用一组地址连续的存储单元依次存放线性表中的元素;n n以元素在机内的“物理位置相邻”来表示数据之
11、间的逻辑关系:n n LOC(ai+1)LOC(ai)Ln n是一种随机存取的存储结构(jigu);n n LOC(ai)LOC(a1)(i1)*Ln n插入删除时需移动大量元素;a1a2aiai+1anLOC(a a11)LOC(a aii)LOC(a ai+1i+1)第8页/共50页第九页,共49页。2.2 线性表的顺序存储结构线性表的顺序存储结构(jigu)n n二、描述(mio sh)方式n n#define LIST_INIT_SIZE 100n n#define LISTINCREMENT 10n ntypedef structn nElemType*elem;n n int le
12、ngth;n n int listsize;n n SqList第9页/共50页第十页,共49页。2.2 线性表的顺序存储结构线性表的顺序存储结构(jigu)n n三、基本操作的算法描述 n n初始化顺序(shnx)表 (算法 2.3)n n插入元素 (算法 2.4)n n 删除元素 (算法 2.5)n n 元素的查找(算法 2.6)n n 顺序(shnx)表的合并 (算法 2.7)第10页/共50页第十一页,共49页。n n算法(sun f)2.3(初始化顺序表)n nStatus InitList_Sq(SqList&L)n nL.elem=(ElemType*)malloc(LIST_I
13、NIT_SIZE*sizeof(ElemType)n nif(!L.elem)exit(OVERFLOW);n nL.length=0;n nL.listsize=LIST_INIT_SIZE;n nreturn OK;n n/InitList_Sq第11页/共50页第十二页,共49页。算法算法算法算法(sun f(sun f)2.4)2.4:顺序表中插入一个元素:顺序表中插入一个元素:顺序表中插入一个元素:顺序表中插入一个元素Status ListInsert_Sq(SqList&L,int i,ElemType e)Status ListInsert_Sq(SqList&L,int i,E
14、lemType e)if(iL.length+1)return ERROR;if(iL.length+1)return ERROR;if(L.length=L.listsize)if(L.length=L.listsize)newbase=(ElemType*)newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType);realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType);if(!newbase)exit(OVERFLOW);if(!n
15、ewbase)exit(OVERFLOW);L.elem=newbase;L.listsize+=LISTINCREMET;L.elem=newbase;L.listsize+=LISTINCREMET;q=&(L.elemi-1);q=&(L.elemi-1);for(p=&(L.elemL.length-1);p=q;-p)*(p+1)=*p;for(p=&(L.elemL.length-1);p=q;-p)*(p+1)=*p;*q=e;*q=e;+L.length;+L.length;return OK;return OK;/ListInsert_Sq /ListInsert_Sq fo
16、r(j=L.length-1;j=i-1;j-)L.elemj+1=L.elemj第12页/共50页第十三页,共49页。a1a2aiai+1anL.elem01i-1i下标下标a1a2aian-1ane第13页/共50页第十四页,共49页。插入插入插入插入(ch r)(ch r)算法的时间复杂度分析算法的时间复杂度分析算法的时间复杂度分析算法的时间复杂度分析n n插入算法花费的时间,主要在于循环中元素插入算法花费的时间,主要在于循环中元素(yun s)(yun s)的向后移动上的向后移动上面,而元素面,而元素(yun s)(yun s)的移动次数与插入的位置的移动次数与插入的位置i i有关:有
17、关:(设设L.length=n)L.length=n)n n当当i=1i=1时,全部元素时,全部元素(yun s)(yun s)都得移动,需都得移动,需n n次移动,次移动,n n当当i=n+1i=n+1时,不需移动元素时,不需移动元素(yun s)(yun s),n n一般地:在一般地:在i i位置插入时移动次数位置插入时移动次数ci ci为为n-i+1n-i+1,n n假设在每个位置插入的概率为假设在每个位置插入的概率为pi pi(不妨设为等概率)(不妨设为等概率),则平均移,则平均移动元素动元素(yun s)(yun s)的次数为:的次数为:故时间故时间(shjin)复杂度为复杂度为O(
18、n)。第14页/共50页第十五页,共49页。算法算法算法算法(sun f(sun f)2.5 )2.5 顺序表中删除元素顺序表中删除元素顺序表中删除元素顺序表中删除元素Status ListDelete_Sq(Sqlist&L,int i,ElemType&e)Status ListDelete_Sq(Sqlist&L,int i,ElemType&e)if(iL.length)return ERROR;if(iL.length)return ERROR;p=&(L.elemi-1);p=&(L.elemi-1);e=*p;e=*p;q=L.elem+L.length-1;q=L.elem+L
19、.length-1;for(+p;p=q;+p)*(p-1)=*p;for(+p;p=q;+p)*(p-1)=*p;-L.length;-L.length;return OK;return OK;/ListDelete_Sq/ListDelete_Sq e=L.elemi-1;For(j=i;j=L.length-1;j+)L.elemj-1=L.elemj;第15页/共50页第十六页,共49页。删除删除删除删除(shnch)(shnch)算法的时间复杂度分析算法的时间复杂度分析算法的时间复杂度分析算法的时间复杂度分析n n删除算法花费的时间,主要在于循环中元素的前移上,而元素删除算法花费的时
20、间,主要在于循环中元素的前移上,而元素的移动次数与删除的位置的移动次数与删除的位置i i有关:有关:(设设L.length=n)L.length=n)n n当当i=1i=1时,其后的全部元素都得移动,需时,其后的全部元素都得移动,需n-1n-1次移动,次移动,n n当当i=ni=n时,不需移动元素,时,不需移动元素,n n一般地:在一般地:在i i位置删除元素时的移动次数位置删除元素时的移动次数ci ci为为n-in-in n假设假设(ji(ji sh)sh)在每个位置删除的概率为在每个位置删除的概率为pi pi(不妨设为等概率)(不妨设为等概率),则平均移动元素的次数为:,则平均移动元素的次
21、数为:故时间故时间(shjin)复杂度为复杂度为O(n)。第16页/共50页第十七页,共49页。算法算法算法算法2.6 2.6 顺序顺序顺序顺序(shnx)(shnx)表中元素的查找表中元素的查找表中元素的查找表中元素的查找int LocateElem_Sq(Sqlist L,ElemType e,int LocateElem_Sq(Sqlist L,ElemType e,status(*compare)(ElemType,ElemType)status(*compare)(ElemType,ElemType)i=1;i=1;p=L.elem;p=L.elem;while(iL.length&
22、!(*compare)(*p+,e)+i;while(iL.length&!(*compare)(*p+,e)+i;if(i=L.length)return i;if(i=L.length)return i;else return 0;else return 0;/ListDelete_Sq /ListDelete_Sq注注 :设设L.length=nL.length=n,则则T(n)=O(n)T(n)=O(n)第17页/共50页第十八页,共49页。算法算法算法算法2.6-1 2.6-1 顺序表中元素顺序表中元素顺序表中元素顺序表中元素(yun s)(yun s)的查找的查找的查找的查找int
23、 LocateElem_Sq(Sqlist L,ElemType e)int LocateElem_Sq(Sqlist L,ElemType e)i=0;i=0;while(iL.length&L.elemi!=e)+i;while(iL.length&L.elemi!=e)+i;if(iL.length)return i+1;if(iL.length)return i+1;else return 0;else return 0;/ListDelete_Sq /ListDelete_Sq注注 :设设L.length=n,则则T(n)=O(n)第18页/共50页第十九页,共49页。算法算法算法算
24、法2.7 2.7 顺序顺序顺序顺序(shnx)(shnx)表的合并表的合并表的合并表的合并Status MergeList_Sq(Sqlist La,Sqlist Lb,Sqlist&Lc)Status MergeList_Sq(Sqlist La,Sqlist Lb,Sqlist&Lc)pa=La.elem;pb=Lb.elem;pa=La.elem;pb=Lb.elem;Lc.ListSize=Lc.length=La.length+Lb.length;Lc.ListSize=Lc.length=La.length+Lb.length;pc=Lc.elem=(ElemType*)pc=Lc
25、.elem=(ElemType*)malloc(Lc.ListSize*sizeof(ElemType);malloc(Lc.ListSize*sizeof(ElemType);if(!pc)return OVERFLOW;if(!pc)return OVERFLOW;pa_last=pa+La.length-1;pa_last=pa+La.length-1;pb_last=pb+Lb.length-1;pb_last=pb+Lb.length-1;while(pa=pa_last)&(pb=pb_last)while(pa=pa_last)&(pb=pb_last)if(*pa=*pb)*p
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 线性 及其 基本 算法 学习 教案
限制150内