第二章 线性表及其顺序存储结构1.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《第二章 线性表及其顺序存储结构1.ppt》由会员分享,可在线阅读,更多相关《第二章 线性表及其顺序存储结构1.ppt(87页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第二章第二章第二章第二章 线性表及其顺序存储结构线性表及其顺序存储结构线性表及其顺序存储结构线性表及其顺序存储结构1 1引引 言言线性表是一种线性数据结构,其用线性表是一种线性数据结构,其用途非常广泛,可用于信息检索、存途非常广泛,可用于信息检索、存储管理、模拟技术和通信等领域。储管理、模拟技术和通信等领域。2 2第二章第二章 l知知 识识 点点 n n线性数据结构的基本特征和基本运算线性数据结构的基本特征和基本运算n n顺序存储结构顺序存储结构n n线性数据结构的简单应用线性数据结构的简单应用 l难难 点点 n n利利用用本本章章的的基基本本知知识识,设设计计有有效效的的算算法法,解解决与线
2、性相关的应用问题决与线性相关的应用问题 3 3线性表线性表l要要 求求 n n 熟练掌握以下内容:熟练掌握以下内容:uu线性表的基本运算线性表的基本运算n n 了解以下内容:了解以下内容:uu线性表运算时间复杂性分析线性表运算时间复杂性分析4 4第第二二章章 目录目录2.1 线性表的基本概念 2.2 栈及其应用2.5 队列及其应用2.6 字符串小 结习题与练习5 5第二章第二章 线性表线性表l逻辑结构逻辑结构l关系关系-线性线性l存储结构存储结构-顺序存储顺序存储-顺序表顺序表6 6 2.1.12.1.1 线性表的基本概念线性表的基本概念 l线性表:是是n n个个(表表长长n0)n0)同同类类
3、型型数数据据元元素素的的有有限限序序列列。元元素素间间是是线线性性逻逻辑辑关关系系,排排成成线线性性序序列。列。线性体现在前后件关系上线性体现在前后件关系上。记作:记作:记作:记作:(a(a1 1,a a2 2,a an n)l特点:vv有且仅有一个根结点,它无前件;有且仅有一个根结点,它无前件;vv有且仅有一个终端结点,它无后件;有且仅有一个终端结点,它无后件;vv除根结点外,每个结点只有一个除根结点外,每个结点只有一个前件前件;vv除尾结点外,每个结点只有一个除尾结点外,每个结点只有一个后件后件。vvn n0 0的线性表为的线性表为空表空表。predecessorpredecessorsu
4、ccessorsuccessor7 7线性表实例线性表实例l 英文字母表:(A,B,C,D,X,Y,Z)l 某校1998-2003年计算机数量 (50,100,250,300,500,1200)l 学生信息表序号序号序号序号学号学号学号学号姓名姓名姓名姓名性别性别性别性别英语英语英语英语英语英语英语英语英语英语英语英语01010101990301990301990301990301李晓明李晓明李晓明李晓明男男男男数学数学数学数学数学数学数学数学数学数学数学数学02020202990302990302990302990302张国庆张国庆张国庆张国庆男男男男物理物理物理物理物理物理物理物理物理物理
5、物理物理30303030990330990330990330990330王薇薇王薇薇王薇薇王薇薇女女女女868686868686868686868686体现在体现在顺序关系上顺序关系上记录排列为记录排列为顺序关系顺序关系8 8线性表的基本运算线性表的基本运算 Length(L)Length(L)Get(1Get(1,i)i)Modify(LModify(L,i)i)Delete(LDelete(L,i)i)Insert(LInsert(L,i i,x)x)Sort(LSort(L,key)key)Index(LIndex(L,x)x)其中:其中:其中:其中:L-L-L-L-表,表,表,表,i-
6、i-i-i-位序,位序,位序,位序,x-x-x-x-数据元素数据元素数据元素数据元素 复杂运算复杂运算复杂运算复杂运算线性表的合并;对有序表的插入、删除等线性表的合并;对有序表的插入、删除等线性表的合并;对有序表的插入、删除等线性表的合并;对有序表的插入、删除等9 92.1.22.1.2 线性表的顺序存储结构线性表的顺序存储结构 l顺序存储结构(SequentialMapping)用用内内存存中中一一组组地地址址连连续续的的单单元元依依次次存存放放表表中中元元素素,每个元素的存储空间大小相同。每个元素的存储空间大小相同。n n计算元素计算元素 a ai i 的地址的地址 假假设设每每个个元元素
7、素占占k k个个字字节节,首首元元素素的的地地址址为为ADR(aADR(a1 1),则则有有:l顺序存储结构是一种随机存取结构。顺序存储结构是一种随机存取结构。l在高级语言环境中,常用一维数组来存储线性表。在高级语言环境中,常用一维数组来存储线性表。ADR(ai)=ADR(a1)+(i-1)k10102.1.2 2.1.2 2.1.2 2.1.2 线性表的顺序存储结构线性表的顺序存储结构线性表的顺序存储结构线性表的顺序存储结构-顺序表顺序表顺序表顺序表长度为长度为n n的线性表的线性表:(a:(a1 1,a a2 2,a ai i,a an n).).顺序存储结构为顺序存储结构为:1111有一
8、个长度为有一个长度为8 8的线性表的线性表(29,18,56,63,35,24,31,47)(29,18,56,63,35,24,31,47)例如例如:1212顺序表类声明顺序表类声明l为更好体现信息隐蔽原则和数据抽象原则,把线性表封装起来。(使用类模板)templateclasssq_LListprivate:intm;/存储空间容量存储空间容量存储空间容量存储空间容量intn;/顺序表的长度顺序表的长度顺序表的长度顺序表的长度T*V;/顺序表存储空间首指针顺序表存储空间首指针顺序表存储空间首指针顺序表存储空间首指针;Vmmnn1313线性表类声明线性表类声明ltemplatetemplat
9、eclassclasssq_LListsq_LListpublic:public:sq_LListsq_LList()m=0;n=0()m=0;n=0sq_LListsq_LList(intint););VoidVoidPrt_sq_LListPrt_sq_LList();();intint flag_sq_LListflag_sq_LList()const;()const;VoidVoidIns_sq_LListIns_sq_LList(intint,T);,T);VoidVoidDel_sq_LListDel_sq_LList(intint););14142.1.3 2.1.3 线性表的基
10、本运算线性表的基本运算l 插入插入 l 删除删除 1515 a a a a0 0 0 0 a a a a1 1 1 1 a a a ai i i i1 1、数据元素的插入数据元素的插入l 插入操作插入操作插入操作插入操作 lins_sq_Listins_sq_Listins_sq_Listins_sq_List(T(T(T(T*V,int*V,int*V,int*V,int m,intm,intm,intm,int *n,int*n,int*n,int*n,int i,T x)i,T x)i,T x)i,T x):在表中下标为在表中下标为在表中下标为在表中下标为i i i i的元素的元素的元素
11、的元素a a a ai i i i后后后后插入插入插入插入x x x x。后移后移后移后移n-i-1n-i-1n-i-1n-i-1个元素个元素个元素个元素0 1 0 1 0 1 0 1 i i+1 i+2 i i+1 i+2 i i+1 i+2 i i+1 i+2 n-1 n-1 n-1 n-1 m m m m-1-1-1-1a a a an-1n-1n-1n-1x xa a a ai+1i+1i+1i+1操作演示操作演示n-11616插入插入算法算法描述描述l(新元素插入到位置(新元素插入到位置 i i 之后处)之后处)n n 边界情况处理边界情况处理uu存储空间满存储空间满(nn=mmnn
12、=mm),“上溢上溢”,不能插入,结,不能插入,结束束uu 若若 i i nnnn 时,插到表尾元素之后;时,插到表尾元素之后;(最后一个元最后一个元素素)uu 若若 i 1 i 1 时,插到首元素时,插到首元素(第第1 1个元素个元素)之前。之前。n n将尾元素将尾元素nn-1nn-1至至i+1i+1元素元素逐一逐一向后移动一个位置。向后移动一个位置。n n将新元素插入到第将新元素插入到第i i1 1的位置上,并将顺序表长度增的位置上,并将顺序表长度增加加1 1。1717顺序表的插入顺序表的插入(C+(C+描述描述)templatetemplateVoidVoidsq_LListsq_LLi
13、st:ins_sq_LListins_sq_LList(intinti,Tx)i,Tx)intintk;k;if(if(nnnn=mm)=mm)coutcoutOverFlowOverFlowendlendl;retrunretrun;if(i0)i=0;if(inn-1)i=if(inn-1)i=nnnn;for(for(intintk=nn-1;k=i;k-)vk+1=vk;k=nn-1;k=i;k-)vk+1=vk;vk=x;vk=x;n+;n+;return;return;18182 2、数据元素的删除、数据元素的删除 aia0ai-1l删除操作删除操作Delete(i):删除元素删除
14、元素ai。前移前移n-i-1个元素个元素0i-1ii+1n-1m-1an-1删除它删除它ai+1ain-1操作演示操作演示1919删除删除l 算法描述(删除位置为i 元素)n n 边界情况处理uu 若存储空间空,为“下溢”,无删除,返回;uu 若 i n-1 时,待删除元素不在表中,无删除操作,返回;n n将表中i+1元素至尾元素逐一向前移动一个位置,并将顺序表长度减少1,返回。2020顺序表的删除顺序表的删除(C+C+描述描述)templatetemplateboolbool sq_LListsq_LList:Del_sq_LListDel_sq_LList(intinti)i)intint
15、k;k;if(nn=0)if(nn=0)coutcoutUnderFlowUnderFlowendlendl;return;return;if(inn-1)if(inn-1)coutcout“NotThisElement“NotThisElementendlendl;return;return;for(for(intintk=i+1;kk=i+1;knnnn;k+)vk-1=vk;k+)vk-1=vk;nnnn-;-;return;return;2121例例2.3 2.3 建立容量为建立容量为100100的空顺序表,表中的空顺序表,表中能插入多个新元素,也能删除若干元素,能插入多个新元素,也能
16、删除若干元素,并能顺序输出表中所有元素并能顺序输出表中所有元素l 线性表完整程序:l 书上P33-P34l C+程序22223 3、时间复杂度分析、时间复杂度分析 l在在在在顺顺顺顺序序序序存存存存储储储储结结结结构构构构的的的的线线线线性性性性表表表表中中中中插插插插入入入入或或或或删删删删除除除除一一一一个个个个元元元元素素素素,其其其其时时时时间间间间主主主主要要要要耗耗耗耗费费费费在在在在元元元元素素素素移移移移动动动动上上上上,其其其其次次次次数数数数取取取取决决决决于于于于插插插插入或删除元素的位置。入或删除元素的位置。入或删除元素的位置。入或删除元素的位置。l假设假设假设假设:P
17、 Pi i:表示表示表示表示在第在第在第在第i i个元素之后插入一个元素的概率个元素之后插入一个元素的概率个元素之后插入一个元素的概率个元素之后插入一个元素的概率nn:表示线性表长度表示线性表长度表示线性表长度表示线性表长度 则,插入一个元素需移动元素的平均次数为:则,插入一个元素需移动元素的平均次数为:则,插入一个元素需移动元素的平均次数为:则,插入一个元素需移动元素的平均次数为:n-1n-1A Ainsins P Pi i(n-i)(n-i)P Pi i*n+(n-1)+(n-2)+1*n+(n-1)+(n-2)+1i=0i=02323 时间复杂度分析时间复杂度分析假设假设假设假设:QQi
18、 i:是:是:是:是删除第删除第删除第删除第i i个元素的概率,个元素的概率,个元素的概率,个元素的概率,nn:为线性表的长度为线性表的长度为线性表的长度为线性表的长度则,删除一个元素时需移动元素的平均次数为:则,删除一个元素时需移动元素的平均次数为:则,删除一个元素时需移动元素的平均次数为:则,删除一个元素时需移动元素的平均次数为:n-1n-1A Adeldel QQi i(n-i-1)(n-i-1)i=0i=02424时间复杂度分析时间复杂度分析l如如如如果果果果在在在在线线线线性性性性表表表表的的的的任任任任何何何何位位位位置置置置插插插插入入入入或或或或删删删删除除除除元元元元素素素素
19、的的的的概概概概率率率率相相相相等,等,等,等,即即即即:P P P Pi i i i1/n1/n1/n1/n;Q Q Q Qi i i i 1/n1/n;则则则则:可见可见:在顺序表中插入或删除一个元素时,平均要移动在顺序表中插入或删除一个元素时,平均要移动表中大约一半的数据元素。表中大约一半的数据元素。若表长为若表长为n n,前两个算法的时间复杂度为,前两个算法的时间复杂度为O(n)O(n)。25251 1、线性表采用顺序存储结构操作时,需线性表采用顺序存储结构操作时,需 大量移动数据元素,效率较低。大量移动数据元素,效率较低。2 2、由于是静态存储结构,需预先定义大由于是静态存储结构,需
20、预先定义大 小确定的数组,容量有限。小确定的数组,容量有限。3 3、适于直接适于直接(随机随机)存取操作。存取操作。结论结论结论结论26262.2 2.2 2.2 2.2 栈及其应用栈及其应用栈及其应用栈及其应用27272.2.1 2.2.1 栈的概念栈的概念l 栈(stackstack)的定义 栈栈是限定在一端进行插入或删除操作的线性表。是限定在一端进行插入或删除操作的线性表。是限定在一端进行插入或删除操作的线性表。是限定在一端进行插入或删除操作的线性表。先进后出先进后出(FirstInLastOut)的线性表的线性表 栈底栈顶进栈进栈出栈出栈a1a4a2a3NULL堆栈堆栈a528282.
21、22.22.22.2.1 .1 .1 .1 什么是栈什么是栈什么是栈什么是栈n n允许插入与删除的一允许插入与删除的一允许插入与删除的一允许插入与删除的一端称为端称为端称为端称为栈顶栈顶,n n不允许插入与删除的不允许插入与删除的不允许插入与删除的不允许插入与删除的另一端称为另一端称为另一端称为另一端称为栈底栈底。n n用指针用指针用指针用指针toptop来指示来指示来指示来指示栈栈栈栈顶顶顶顶的位置。的位置。的位置。的位置。n n用指针用指针用指针用指针bottombottom指向指向指向指向栈底栈底栈底栈底。29292.22.22.22.2.1 .1 .1 .1 什么是栈什么是栈什么是栈什
22、么是栈u栈是栈是“先进后出先进后出”表表 (FILO)(FILO)u栈是栈是“后进先出后进先出”表表 (LIFO)(LIFO)u栈具有记忆作用。栈具有记忆作用。30302.2.2 2.2.2 栈的顺序存储及运算栈的顺序存储及运算l栈的顺序存储结构(顺序栈)顺序栈)用一维数组来实现。用一维数组来实现。用一维数组来实现。用一维数组来实现。l当当当当toptop等于最大下标值时为栈满。等于最大下标值时为栈满。等于最大下标值时为栈满。等于最大下标值时为栈满。3131栈的基本运算栈的基本运算1.1.PUSHPUSH:往栈中插入一个元素称往栈中插入一个元素称为为入栈入栈运算运算2.2.POP:POP:从栈
23、中删除一个元素从栈中删除一个元素(即即删除栈顶元素删除栈顶元素)称为称为退栈退栈运运算。算。3.3.TOP:TOP:取栈顶元素取栈顶元素32322.2.2 2.2.2 栈的基本运算和操作栈的基本运算和操作 l lInitStackInitStack(S)(S),初始化操作,设定一个空栈。初始化操作,设定一个空栈。初始化操作,设定一个空栈。初始化操作,设定一个空栈。l lEmptyStackEmptyStack(S)(S),判空栈操作判空栈操作判空栈操作判空栈操作,返回值逻辑值。返回值逻辑值。返回值逻辑值。返回值逻辑值。l lPush(SPush(S,x)x),入栈操作,在入栈操作,在入栈操作,
24、在入栈操作,在S S栈顶插入一个元素栈顶插入一个元素栈顶插入一个元素栈顶插入一个元素x x。l lPop(S)Pop(S),出栈操作,若栈出栈操作,若栈出栈操作,若栈出栈操作,若栈S S不空在栈顶删除一个元素。不空在栈顶删除一个元素。不空在栈顶删除一个元素。不空在栈顶删除一个元素。l lGetTopGetTop(S)(S),取栈顶元素,若栈取栈顶元素,若栈取栈顶元素,若栈取栈顶元素,若栈S S不空则取栈顶元素的值。不空则取栈顶元素的值。不空则取栈顶元素的值。不空则取栈顶元素的值。l lClearStackClearStack(S)(S),清栈空操作。清栈空操作。清栈空操作。清栈空操作。l lC
25、urrentSizeCurrentSize(S)(S),求当前栈中元素的个数。求当前栈中元素的个数。求当前栈中元素的个数。求当前栈中元素的个数。l lDestroyStackDestroyStack(S)(S),销毁销毁销毁销毁S S栈。栈。栈。栈。33332.2.3 2.2.3 顺序栈类(顺序栈类(C+C+描述)描述)l栈类模板声明:templateclassStackpublic:virtualboolflag()const=0;virtualboolreadTop(T)const=0;virtualboolpush(T)=0;virtualboolpop()=0;virtualboolp
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第二章 线性表及其顺序存储结构1 第二 线性 及其 顺序 存储 结构
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内