线性表的操作讲解PPT_第1页
线性表的操作讲解PPT_第2页
线性表的操作讲解PPT_第3页
线性表的操作讲解PPT_第4页
线性表的操作讲解PPT_第5页
已阅读5页,还剩56页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、内容提要,了解线性表的定义。掌握线性表的顺序存储结构、链式存储结构以及相关的基本操作算法描述。了解双向链表存储结构。,第二章线性表,Knowledge,第二章线性表,线性结构是一个数据元素的有序(次序)集。线性结构的特点:在数据元素的非空有限集中存在唯一的一个被称作“第一个”的数据元素存在唯一的一个被称作“最后一个”的数据元素除第一个外,集合中的每个数据元素均只有一个前驱,称为直接前驱(ImmediatePredecessor)。除最后一个外,集合中的每个数据元素均只有一个后继,称为直接后继(ImmediateSuccessor)。,2.1线性表的类型定义一、定义:一个线性表是n个数据元素的有

2、限序列,例:英文字母表(A,B,C,.Z)是一个线性表,二、线性表的特征:元素个数n称为表长度,n=0,称为空表1in时ai的直接前驱是ai1,a1无直接前驱ai的直接后继是ai1,an无直接后继元素同构,且不能出现缺项,三、线性表抽象数据类型的定义ADTList数据对象:D=ai|aiElemSet,i=1,2,.,n,n0数据关系:R1=|ai1,aiD,i=1,2,.,n基本操作:typedefElemTypeET;typedefstructElemType*elem;/动态空间基址intlength;/实际元素个数intlistsize;/当前分配的存储容量/(以sizeof(Elem

3、Type)为单位)SqList;,声明结构体类型,SqList是顺序表的类型名,动态申请和释放内存空间L.elem=(ElemType*)malloc(List_Init_Size*sizeof(ElemType);/申请内存free(L.elem);/释放内存,typedefstructElemType*elem;intlength;intlistsize;SqList;,intListLength_Sq(SqListL)voidClearList_Sq(SqListGetElem_Sq(SqListL,inti,ElemTypeStatus型的数据范围是:True、False、Ok、Err

4、or#defineTrue1#defineFalse0StatusListEmpty(SqListL)/判断线性表L是否为空表if(L.length=0)returnTrue;returnFalse;,顺序表基本操作的算法描述,/构造一个空的线性表L#defineList_Init_Size10/存储空间的初始分配量#defineListIncrement10/存储空间的分配增量StatusInitList_Sq(SqList,添加(1,3,5,7,9)之后的状态:,创建空表之后,表L的状态如下:,删除第3个元素之后的状态:,是随机数据也就是无效数据,顺序表的内存状态,问题:在表的第1个位置插

5、入6之后,表L的存储状态如何?,问题:清空L,即ClearList_Sq(L)之后,表L的存储状态如何?,添加(1,3,5,7,9)之后的状态:,创建空表之后,表L的状态如下:,删除第3和第4个元素之后的状态:,将随机数据想象成空白,顺序表的内存想象状态,结论:凡是定义的或动态申请的空间内,都想象为空白。如:intx,A900;SqListL;ElemType*elem;,二、顺序表的插入操作定义:顺序表的插入是指在第i个(1in+1)元素之前插入一个新的数据元素x,使长度为n的线性表,变成长度为n+1的线性表,需将第i至第n共(ni1)个元素依次后移一个位置。,x,顺序表的插入操作,在顺序表

6、L中第i个位置上插入一个新的元素e,形式参数为:(2)将原动态区的数据拷贝到新动态区;(3)释放原动态存储区;(4)返回新存储区首地址(无类型)。用途:当原动态存储区不够用时,追加动态存储区;,顺序表的插入操作算法描述之一,StatusListInsert_Sq(SqList,StatusListInsert_Sq(SqList,顺序表的插入操作算法描述之二,顺序表插入操作的算法评价设Pi是在第i个元素之前插入一个元素的概率,则在长度为n的线性表中插入一个元素时,所需移动的元素次数的平均次数为:,三、顺序表的删除操作定义:线性表的删除是指将第i(1in)个元素删除,使长度为n的线性表,变成长度

7、为n-1的线性表,需将第i+1至第n共(ni)个元素依次前移一个位置。,顺序表的删除操作,删除顺序表L中第i个位置上的元素,将删除的元素值赋给e。形式参数为:structNode*next;LNode,*LinkList;/Lnode是结点类型名,/LinkList是结点指针类型名LinkListL;LNode*p;,(*p)表示p所指向的结点(*p).datapdata表示p指向结点的数据域(*p).nextpnext表示p指向结点的指针域,生成一个LNode型新结点:p=(LNode*)malloc(sizeof(LNode);或:p=(LinkList)malloc(sizeof(LNo

8、de);系统回收p结点:free(p),一、线性链表1、定义:每个结点中只含一个指针域的链表叫,也叫单链表(SingleLinkedList),头结点:在单链表第一个结点前附设加一个结点叫头结点指针域为空表示线性表为空表。,头指针L是LinkList类型,头结点是Lnode类型非空表:空表:注意:头结点的位序为0,它不是线性表中的元素,头结点的数据域可用于存储线性表的长度。单链表是非随机存取的存储结构在单链表中,任何两个元素的存储位置之间没有固定的联系,每个元素的存储位置都包含在其直接前驱结点的指针域中。在单链表中,要取得第i个数据元素必须从头结点出发寻找。,头,5,8,3,6,L,头,L,S

9、tatusInitList_L(LinkList时间复杂度:O(1),L必须是引用型,构造一个空的单链表的算法描述,1.指针p在链表上依次滑动:p=head;while(pnext!=NULL)p=pnext;2.前驱指针q和当前指针p在链表上同步滑动:q=head;p=qnext;while(p)q=p;p=qnext;例1:intListLength_L(LinkListL)/求线性表的长度p=L;j=0;while(pnext!=NULL)或while(pnext)+j;p=pnext;return(j);例2:StatusPriorElem_L(LinkListL,ETe,ET例3:S

10、tatusNextElem_L(LinkListL,ETe,ET,pnext=s;,StatusListInsert_L(LinkList,单链表的基本运算插入,在单链表L中删除第i个结点,并由e返回其值的操作步骤:(1)寻找第i-1个结点;/O(n)(2)测试已知量的合法性;/O(1)(3)删除第i个结点,并取出数据域的值赋给e;/O(1)(4)释放第i个结点的存储空间。/O(1)该算法的时间复杂度是:O(n),单链表的基本运算删除,pnext=qnext;,StatusListDelete_L(LinkList,单链表的基本运算删除,逆位序输入n个元素的值,建立带表头结点的单链表L。,算法

11、评价:T(n)O(n),动态建立单链表的算法逆向建立,VoidCreateList_L(LinkList/将结点p插入到表头,动态建立单链表的算法逆向建立,单链表特点它是一种动态结构,整个存储空间为多个链表共用不需预先分配空间,分配的空间连续与否均可指针占用额外存储空间不能随机存取,查找速度慢,便于插入、删除操作,线性表的顺序存储和链式存储操作上的比较,1编写程序实现单链表的下列基本操作:(1)初始化单链表La。(2)在单链表La中插入一个新结点。(3)删除单链表La中的某一个结点。(4)在单链表La中查找某结点并返回其位置。(5)打印输出单链表La中的结点元素值。2构造两个带有表头结点的有序

12、单链表La、Lb,编写程序实现将La、Lb合并成一个有序单链表Lc。,上机作业2单链表基本操作(2学时),能力培养:掌握对单链表的一些基本操作和具体的函数定义,通过实现两个有序表归并,训练单链表的一些基本操作。,Engineering,Practice,二、循环链表(CircularLinkedList)循环链表是表中最后一个结点的指针指向头结点,使链表构成一个环状特点:从表中任一结点出发均可找到表中其他结点,提高了查找效率循环链表操作与单链表基本一致,循环结束条件不同单链表L:pnext=NULL循环链表L:pnext=L非空循环链表空循环链表,仅设尾指针的两循环链表的链接,存储池,p,Vo

13、id*Connect(LinkList,仅设尾指针的两循环链表的链接算法,三、双向链表(DoubleLinkedList)单链表具有单向性的缺点,所以引入双向链表。结点定义,typedefstructDuLNodeElemTypedata;structDuLNode*prior,*next;DuLNode,*DuLinkList;,ppriornext=p=pnextproir;,算法评价:T(n)=O(n),插入操作,算法描述StatusListInsert_DuL(DuLinkList,sprior=pprior;,ppriornext=s;,snext=p;,pprior=s;,删除操作,算法评价:T(n)=O(n),ppriornext=pnext;,pnextprior=pprior;,算法描述StatusListDelete_DuL(DuLinkList,比较线性表顺序存储结构与链式存储结构的异同及优缺点思考:如何应用线性表的相关知识完成两个一元多项式的加法运算?,课堂思考与讨论:,Practice,能力培养:学习用单链表解决实际问题的能力。,Engineering,2.4一元多项式的表示及相加两个一元多项式可按升幂如下表示,可用线性

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论