数据结构与算法第二章清华大学出版社赵玉兰学习教案.pptx
《数据结构与算法第二章清华大学出版社赵玉兰学习教案.pptx》由会员分享,可在线阅读,更多相关《数据结构与算法第二章清华大学出版社赵玉兰学习教案.pptx(109页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、会计学1数据结构数据结构(sh j ji u)与算法第二章清华与算法第二章清华大学出版社赵玉兰大学出版社赵玉兰第一页,共109页。2.1 线性表线性表ADTADT线性表线性表线性表线性表n n线性表(Linear List)n n例1 26个大写英文字母组成的字母表n n (A,B,C,Z)n n例2 某个学生宿舍学生姓名(xngmng)n n (“wan”,“li”,“zhao”,“ye”,“hao”,“jia”)n n例3 学生信息情况登记表姓姓 名名学学 号号性性 别别年年 龄龄班班 级级家庭住址家庭住址陈陈 燕燕060001女女21计计06内蒙古内蒙古刘刘 伟伟060002男男21计计
2、06北京北京王树林王树林060003男男22计计06山东山东第1页/共109页第二页,共109页。2.1 线性表线性表ADTADT线性表线性表线性表线性表n n定义n n由 n(n0)个性质相同的数据元素(yun s)a1,a2,an 组成的有限序列n n数据元素(yun s)的个数 n(n0)定义为表的长度,当 n=0 时称为空表n n常常将非空的线性表(n0)记作:n n L=(a1,a2,ai,an)n n 注意:这里的数据元素(yun s)ai(1i n)只是一个抽象的符号,其具体含义在不同的情况下可以不同。第2页/共109页第三页,共109页。2.1 线性表线性表ADTADT线性表线
3、性表线性表线性表n n线性表的逻辑特征n n有限性:线性表中数据元素的个数是有穷的n n相同性:线性表中数据元素的类型是同一的n n顺序性n n有且仅有一个(y)开始结点 a1,它没有前趋,而仅有一个(y)后继 a2 n n有且仅有一个(y)终端结点 an,它没有后继,而仅有一个(y)前趋 an-1n n其余的内部结点 ai(2i n-1)都有且仅有一个(y)前趋 ai-1 和一个(y)后继 ai+1 n n线性表的逻辑结构是一种典型的线性结构第3页/共109页第四页,共109页。2.1 线性表线性表ADTADT线性表线性表线性表线性表n n抽象数据(shj)类型线性表的定义n n ADT L
4、ist n n Data n n 数据(shj)元素表n n size:数据(shj)元素的个数n n Operationn n Constructorn n Process:创建空表n n Clearn n Process:清空线性表n nIsEmptyn n Process:判断线性表是否为空n n Output:若线性表为空,返回true,否则返回false第4页/共109页第五页,共109页。2.1 线性表线性表ADTADT线性表线性表线性表线性表 Length Length Process Process:求线性表中元素个数:求线性表中元素个数 Output Output:返回线性表
5、中元素个数:返回线性表中元素个数 GetElem GetElem Input Input:要取出的元素的位置:要取出的元素的位置 Process Process:取出指定位:取出指定位(dngwi)(dngwi)置上的元素置上的元素 Output Output:返回取出的元素值:返回取出的元素值 Locate Locate Input Input:要定位:要定位(dngwi)(dngwi)的元素的元素 Process Process:为指定元素定位:为指定元素定位(dngwi)(dngwi)Output Output:若线性表中有给定元素,返回元素位置,否则:若线性表中有给定元素,返回元素位置
6、,否则 返回返回-1-1第5页/共109页第六页,共109页。2.1 线性表线性表ADTADT线性表线性表线性表线性表 Insert Insert Input Input:被插入:被插入(ch r)(ch r)元素值及其位置元素值及其位置 Process Process:将给定元素插入:将给定元素插入(ch r)(ch r)指定位置指定位置 Delete Delete Input Input:被删除元素的位置:被删除元素的位置 Process Process:若线性表中有给定元素,则删除它:若线性表中有给定元素,则删除它 Prior Prior Input Input:要求前驱的元素:要求前驱
7、的元素 Process Process:求给定元素的直接前驱:求给定元素的直接前驱 Next Next Input Input:要求后继的元素:要求后继的元素 Process Process:求给定元素的直接后继:求给定元素的直接后继 /List /List 第6页/共109页第七页,共109页。2.1 线性表线性表ADTADT线性表线性表线性表线性表n n例4 假设利用线性表 LA 和 LB 分别表示两个集合A 和 B(线性表中的数据元素即为集合中的成员),现求一个新的集合 AB,并用(bn yn)LA表示结果集合。voidIntersection(ListLA,ListLB)inti=1;
8、while(i=LA.size)x=LA.GetElem(i);/在LA中取一元素k=LB.Locate(x);/在LB中搜索(susu)它if(k=-1)/在LB中未找到,则在LA中删除它LA.Delete(i);LA.size-;elsei+;/Intersection第7页/共109页第八页,共109页。2.1 线性表线性表ADTADT线性表线性表线性表线性表n n例5 假设(jish)利用线性表 LA 和 LB 分别表示两个集合A 和 B(线性表中的数据元素即为集合中的成员),现求一个新的集合 AB,并用LA表示结果集合。voidUnion(ListLA,ListLB)intn;for
9、(inti=1;i=LB.size;i+)x=LB.GetElem(i);/在LB中取一元素k=LA.Locate(x);/在LA中搜索(susu)它if(k=-1)/在LA中未找到,则在LA中插入它n=LA.size;LA.Insert(n,i);LA.size+;/Intersection第8页/共109页第九页,共109页。2.1 线性表线性表线性表的顺序存储线性表的顺序存储线性表的顺序存储线性表的顺序存储顺序表顺序表定义定义顺序存储的线性表顺序存储的线性表把线性表的元素按逻辑顺序依次存放把线性表的元素按逻辑顺序依次存放(cnfng)(cnfng)在一组地址连续的存储单元里在一组地址连续
10、的存储单元里存储要点用一段地址连续的存储单元依次存储线性表中的数据元素a1a2ai-1aian第9页/共109页第十页,共109页。2.1 线性表线性表线性表的顺序存储线性表的顺序存储线性表的顺序存储线性表的顺序存储n n例:(34,23,67,82)34236782存储空间的起始(qsh)地址基地址用什么属性来描述顺序表?顺序(shnx)表的容量(最大长度)顺序表的当前(dngqin)长度4第10页/共109页第十一页,共109页。2.1 线性表线性表线性表的顺序存储线性表的顺序存储线性表的顺序存储线性表的顺序存储n n存储(cn ch)结构与逻辑结构的关系 存储地址存储地址 内存状态内存状
11、态线性表中线性表中的位序的位序LOC(a1)a11LOC(a1)+ma22LOC(a1)+(i-1)maiiLOC(a1)+(n-1)mann 空闲空闲顺序表存储结构示意图顺序表存储结构示意图LOC(ai)=LOC(a1)+(i-1)m基地址LOC(ai)=LOC(ai-1)+m一个数据元素所占存储量顺序表是一种随机存取的存储(cn ch)结构第11页/共109页第十二页,共109页。2.1 线性表线性表线性表的顺序存储线性表的顺序存储线性表的顺序存储线性表的顺序存储u注意(zhy)u线性表的第i个元素ai存储在数组下标为i-1的位置u线性表的长度size与数组的长度MaxListSize是不
12、同的usize=n,大小可变uMaxListSize是数组的长度,大小不变usizeMaxListSize表的长度空闲anaiai-1a2a1datan-1 MaxListSize-1sizeMaxListSizei-1i-210下标如何实现顺序表的内存分配?顺序表一维数组第12页/共109页第十三页,共109页。2.1 线性表线性表线性表的顺序存储线性表的顺序存储线性表的顺序存储线性表的顺序存储const int MaxListSize=100;const int MaxListSize=100;class SeqListclass SeqList DataType dataMaxListS
13、ize;DataType dataMaxListSize;int size;/int size;/元素的个数元素的个数 public:public:List()size=0;/List()size=0;/构造一个空线性表构造一个空线性表 void Clear();/void Clear();/清空顺序表清空顺序表 bool IsEmpty();/bool IsEmpty();/判断如果为空表,返回判断如果为空表,返回truetrue,否则,否则(f(f uz)uz)返回返回falsefalse DataType GetElem(int k)return datak-1;/DataType Ge
14、tElem(int k)return datak-1;/返回第返回第k k个元素个元素 int Locate(DataType e);/int Locate(DataType e);/返回第一个与元素返回第一个与元素e e匹配的元素匹配的元素 位序位序 DataType Prior(DataType e);/DataType Prior(DataType e);/返回元素返回元素e e 的前驱的前驱 DataType Next(DataType e);/DataType Next(DataType e);/返回元素返回元素e e 的后继的后继 void Insert(DataType e,in
15、t i);/void Insert(DataType e,int i);/在表中第在表中第 i i 个位置插入个位置插入e e DataType Delete(int i);/DataType Delete(int i);/删除第删除第i i个元素,并返回其值个元素,并返回其值;/SeqList/SeqList第13页/共109页第十四页,共109页。2.1 线性表线性表线性表的顺序存储线性表的顺序存储线性表的顺序存储线性表的顺序存储基本操作在顺序表中的实现基本操作在顺序表中的实现定位操作定位操作算法算法(sun f(sun f)2.4 )2.4 定位定位int Locate(DataType
16、 e)int Locate(DataType e)int i=0;int i=0;while(i size&datai!=e)while(i =size)return-1;if(i =size)return-1;/没有找到没有找到 else else return i;return i;/找到此元素,返回其下标找到此元素,返回其下标/Locate/Locate 注意序号和下标之间的关系!第14页/共109页第十五页,共109页。2.1 线性表线性表线性表的顺序存储线性表的顺序存储线性表的顺序存储线性表的顺序存储定位(dngwi)成功定位(dngwi)不成功e48e50第15页/共109页第十六
17、页,共109页。2.1 线性表线性表线性表的顺序存储线性表的顺序存储线性表的顺序存储线性表的顺序存储n n定位(dngwi)算法的时间复杂度n n基本操作:比较n n成功时n n最好情况:比较1次(i=0),时间复杂度为O(1)n n最坏情况:比较n次(i=n-1),时间复杂度为O(n)n n平均情况:设定位(dngwi)每个数据元素的概率相等,则不成功(chnggng)时:比较n次第16页/共109页第十七页,共109页。2.1 线性表线性表线性表的顺序存储线性表的顺序存储线性表的顺序存储线性表的顺序存储在在 i=4 处插入处插入 下标下标数据数据元素元素012 113 221 324 4
18、5 6 7 82528304277插入(chr)在顺序表中的第i个位置上插入(chr)eai和ai+1之间的逻辑关系发生(fshng)了变化存储位置(wizhi)要反映这个变化第17页/共109页第十八页,共109页。2.1 线性表线性表线性表的顺序存储线性表的顺序存储线性表的顺序存储线性表的顺序存储算法算法2.2 2.2 插入插入(ch r)(ch r)void Insert(DataType e,int i)void Insert(DataType e,int i)if(i size|size=MaxListSize-1)if(i size|size=MaxListSize-1)exit;
19、exit;else else for(j=size;ji;j-)for(j=size;ji;j-)dataj=dataj-1;dataj=dataj-1;datai=e;/datai=e;/插入插入(ch r)(ch r)成功成功 size+;size+;/Insert/Insert什么时候不能插入?注意边界条件第18页/共109页第十九页,共109页。2.1 线性表线性表线性表的顺序存储线性表的顺序存储线性表的顺序存储线性表的顺序存储n n插入算法的时间复杂度n n基本语句:移动元素n n最好情况:不移动(i=n),时间复杂度为O(1)n n最坏情况:移动 n 个元素(i=0),时间复杂度为
20、O(n)n n平均情况:设插入每个数据元素的概率(gil)相等,则第19页/共109页第二十页,共109页。2.1 线性表线性表线性表的顺序存储线性表的顺序存储线性表的顺序存储线性表的顺序存储n n删除n n删除顺序表中第 i 个位置上的元素(yun s)n nDataType Delete(int i)n n if(i=size)n n return nulldata;/被删除的元素(yun s)下标错n n else n n size-;n n e=datai;n n for(int j=i;jnext=NULL);/bool IsEmpty()return(head-next=NULL)
21、;/判断判断(pndun)(pndun)是否为空链表是否为空链表 DataType Prior(DataType e);/DataType Prior(DataType e);/返回返回e e 的前驱结点元素的前驱结点元素 DataType Next(DataType e);/DataType Next(DataType e);/返回返回e e 的后继结点元素的后继结点元素 void Insert(DataType x,int i);/void Insert(DataType x,int i);/在第在第i i个结点之前插入元素个结点之前插入元素值为值为x x的结点的结点 Datatype D
22、elete(int i);/Datatype Delete(int i);/删除第删除第i i个结点,并返回其元素值个结点,并返回其元素值 void Clear();/void Clear();/清空链表清空链表;/nextList;/nextList第29页/共109页第三十页,共109页。2.1 线性表线性表线性表的链式存线性表的链式存储储(cn ch)n n取元素(yun s)n nDataType GetElem(int i)n nif(head-next=NULL)/空链表,返回空值n n return nulldata;n nelsen n p=head;k=0;n n while
23、(p&knext;k+;n n if(!p|k=0)return nulldata;/i超出链表元素(yun s)的范围n n else return p-data;n nn n/GetElem第30页/共109页第三十一页,共109页。2.1 线性表线性表线性表的链式存线性表的链式存储储(cn ch)n n插入操作n n将值为 x 的新结点插入到表的第 i 个结点的位置(wi zhi)上,即插入到 ai-1 与 ai 之间n n插入过程:1)定位;2)插入。pai-1headaixa1newnodenewnodenext=pnext;pnext=newnode;第31页/共109页第三十二页
24、,共109页。2.1 线性表线性表线性表的链式存线性表的链式存储储(cn ch)void Insert(DataType x,int i)void Insert(DataType x,int i)/在第在第i i个结点位置个结点位置(wi zhi)(wi zhi)上插入元素值为上插入元素值为x x的结点的结点 Node*p=head;int k=0;Node*p=head;int k=0;if(isize)return nulldata;/if(isize)return nulldata;/插入位置插入位置(wi zhi)(wi zhi)错误错误 while(p&k i-1)while(p&k
25、next;k+;/p=p-next;k+;/找到插入位置找到插入位置(wi zhi)(wi zhi)if(!p)exit;if(!p)exit;Node*newnode=new Node();Node*newnode=new Node();newnode-data=x;newnode-data=x;newnode-next=p-next;newnode-next=p-next;p-next=newnode;p-next=newnode;size+;size+;/Insert/Insert第32页/共109页第三十三页,共109页。2.1 线性表线性表线性表的链式存线性表的链式存储储(cn ch
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 算法 第二 清华大学出版社 玉兰 学习 教案
限制150内