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