数据结构-清华大学出版社-严蔚敏吴伟民编著.docx
《数据结构-清华大学出版社-严蔚敏吴伟民编著.docx》由会员分享,可在线阅读,更多相关《数据结构-清华大学出版社-严蔚敏吴伟民编著.docx(88页珍藏版)》请在课桌文档上搜索。
1、第一章绪论1、数据结构是计算机中存储、组织数据的方式。精心选择的数据结构可以带来最优效率的算法。2、程序设计=算法+数据结构3、解决问题方法的效率: 跟数据的组织方式有关 跟空间的利用效率有关 跟算法的巧妙程度有关4、数据:所有能输入到计算机中,且被计算机处理的符号的集合,是计算机操作对象的总称;是计算机处理的信息的某种特定的符号表示形式。5、数据元素:数据中的一个“个体数据结构中讨论的根本单位。相当于“记录”,在计算机程序中通常作为一个整体考虑和处理。6、数据项:相当于记录的“域”,是数据的不可分割的最小单位,如学号。数据元素是数据项的集合。7、数据对象:性质相同的数据元素的集合.例如:所有
2、运发动的记录集合8、数据结构:是相互间存在某种关系的数据元素集合。9、数据结构是带结构的数据元素的集合。10、不同的关系构成不同的结构。11、次序关系:i=l,2,3A5,612、对每种数据结构,主要讨论如下两方面的问题:1)数据的逻辑结构,数据结构的根本操作;2)数据的存储结构,数据结构根本操作的实现;13、数据的逻辑结构:数据之间的结构关系,是具体关系的抽象。数据结构的根本操作:指对数据结构的加工处理。14、数据的存储结构(物理结构):数据结构在计算机内存中的表示。数据结构根本操作的实现:根本操作在计算机上的实现(方法)。15、数据结构的有关概念f线性表A.1 .数据的逻辑结构YJ数据结构
3、的三个方面B.2、数据的存储结构,A非线性结构树形结构顺序存储链式存储图形结构I3、数据的运算:检索、排序、插入、删除、修改等。16、数据元素的4类的根本结构:集合;线性结构:结构中数据元素之间存在一对一的关系;树形结构:结构中数据元素之间存在一对多的关系;(4)图状结构或网状结构:结构中数据元素之间存在多对多的关系。17、C语言的优点:C语言可以直接操作内存。18、每个节点都由两局部组成:数据域和指针域。19、链接存储结构特点: 比顺序存储结构的存储密度小(每个节点都由数据域和指针域组成)。 逻辑上相邻的节点物理上不必相邻。 插入、删除灵活(不必移动节点,只要改变节点中的指针)。20、数据类
4、型是一个值的集合和定义在此集合上的一组操作的总称。21、ADT有两个重要特征:数据抽象和数据封装。22、抽象数据类型(AbstractDataType简称ADT):是指一个数学模型以及定义在此数学模型上的一组操作。23、抽象数据类型有:数据对象数据对象的定义、数据关系数据关系的定义、根本操作根本操作的定义。24、数据类型的定义和含义。定义:数据类型是一个值的集合和定义在这个值集上的一组操作的总称。含义:将数据按一定次序与形式存放的结构。24、算法空间复杂度S(n)算法的存储量包括:输入数据所占的空间;程序本身所占的空间;辅助变量所占的空间。25、算法具有有穷性、确定性、可行性、输入和输出五大特
5、性。26、抽象数据类型具有数据抽象、数据封装的特点。27、数据的储存结构分为:顺序存储结构和链式存储结构。第二章线性表1、线性结构的特点:在数据元素中的非空有限集中。(1)存在唯一的一个被称作“第一”的数据元素;(2)存在唯一的一个被称作“最后一个”的数据元素;(3)除第一个外,集合中的每一个数据元素均只有一个前驱;(4)除最后一个外,集合中的每一个数据元素均只有一个后继。2、线性表(LinearLiSt):一个线性表是n个数据元素的有限序列。3、线性表的顺序存储实现:typedefstructEIementTypeDataMAXSIZE;intLast;List;1.istL,*PtrL;4
6、、初始化(建立空的顺序表)1.ist*MakeEmpty()List*PtrL;PtrL=(List*)malloc(Sizeof(List);PtrL-Last=-1;returnPtrL;)5、查找intFind(EIementTypeX,List*PtrL)inti=O;while(iLast&PtrL-Datai!=X)i+;if(iPtrL-Last)return-1;*如果没找到,返回-1*/elsereturni;*找到后返回的是存储位置*/)6、插入算法voidlnsert(EIementTypeX,inti,List*PtrL)intj;if(PtrL-Last=MAXSIZ
7、E-1)*表空间已满,不能插入*/printf(n表满”);return;if(iPtrL-Last+2)*检查插入位置的合法性*/Printf(位置不合法”);return;)for(j=PtrL-Last;j=i-1;j-)PtrL-Dataj+l=PtrL-Dataj;*将aian倒序向后移动/PtrL-Datai-l=X;*新元素插入*/PtrL-Last+;*Last仍指向最后元素*/return;)7、删除算法voidDelete(inti,List*PtrL)intj;if(iPtrL-Last+l)*检查空表及删除位置的合法性*/Printf(不存在第d个元素,i);retur
8、n;)for(j=i;jLast;j+)PtrL-Dataj-l=PtrL-Dataj;*将ai+lan顺序向前移动*/PtrL-Last-;*Last仍指向最后元素*/return;8、求表长intLength(List*PtrL)List*p=PtrL;*p指向表的第一个结点*/intj=O;while(p)p=p-Next;j+;*当前P指向的是第j个结点j7)returnj;9、查找按序号查找:FindKth;1.ist*FindKth(intK,List+PtrL)List*p=PtrL;inti=1;while(pI=NULL&iNext;i+;)if(i=K)returnp;*找
9、到第K个,返回指针*/elsereturnNULL;*否那么返回空*/(2)按值查找:Find1.ist*Find(EIementTypeX,List*PtrL)(1.ist*p=PtrL;while(p!=NULL&p-DataI=X)p=p-Next;returnp;)10、插入(在链表的第-1Data=X;s-Next=PtrL;returns;/*返回新表头指针*/)p=FindKth(i-l,PtrL);/*查找第i-1个结点*/if(p=NULL)/*第i-1个不存在,不能插入*/printf(m参数i错”);returnNULL;elses=(List*)malloc(sizeo
10、f(List);*中请、填装结点*/s-Data=X;s-Net=p-Next;/*新结点插入在第i-1个结点的后面*/p-Next=s;returnPtrL;)11、删除(删除链表的第V个位置上的结点)1.ist*Delete(inti,List*PtrL)List*p,*s;if(i=1)*假设要删除的是表的第一个结点*/s=PtrL;*s指向第1个结点*/PtrL=PtrL-Net;/*从链表中删除*/free;/*释放被删除结点*/returnPtrL;)P=FindKth(i-1,PtrL);/*查找第i-1个结点*/if(p=NULL)Printf(第d个结点不存在”,i-1);r
11、eturnNULL;elseif(p-Next=NULL)Primf(第d个结点不存在i);returnNULL; else s = p-Net;*s指向第i个结点*/p-Net = s-Net;/*从链表中删除*/free(s);/*释放被删除结点*/return PtrL;12、链表不具备的特点是可随机访问任一节点插入删除不须要移动元素不必事先估计存储空间所需空间与其长度成正比13、带头结点的单链表head为空的判定条件是 2 head=NULL head-next=NULL(3)head-next=head(4)head!=NLL14、如果最常用的操作是取第i个结点及其前驱,那么采用4存
12、储方单链表双链表单循环链表顺序表式最节省时间。第三章Chapter3栈(StaCkS)和队列(queues)1、 栈是限定仅能在表尾一端进行插入、删除操作的线性表。2、 栈的特点是“后进栈的元素先出栈(IaStin,firstout),故栈又称为后进先出表(LIFO)o3、 一个栈是一些元素的线形列表,其中元素的插入和删除均在表的同一端进行。插入和删除发生的一端称为栈顶(thetopofthestack)o4、 第一个进栈的元素在栈底,最后一个进栈的元素在栈顶,第一个出栈的元素为栈顶元素,最后一个出栈的元素为栈底元素。5、 连续栈(COntigUOUSStaCk)的类型定义#defineMax
13、Stack50TypedefstructdatatypestackMaxStack;inttop;JSeqstack;Seqstack*s;6、 判断栈是否已满?viodPush(Seqstack*s,datatypeX)(if(s-top=MaStack-l)printf(aoverflow,);elses-top+;s-stacks-top=x;)7、 判断栈是否为空?datatypepop(Seqstack*s)if(s-topstacks-top);s-top-;)8、 返回栈顶元素的值,栈不发生变化。datatypetop(Seqstack*s)if(s-topstacks-top)
14、;)9、 链栈(LinkedStaCk)的类型定义栈的链式存储结构称为链栈,它是运算受限的单链表,插入和删除操作仅限制在表头位置上进行。由于只能在链表头部进行操作,故链表没有必要像单链表那样附加头结点。栈顶指针就是链表的头指针。链栈的类型说明如下:typedefstructstacknodedatatypedatastructstacknode*nextJstacknode10、链式栈的特点:链式栈无栈满问题;空间可扩充;插入与删除仅在栈顶处执行;链式栈的栈顶在链头;适合于多栈操作。11、栈是限定仅能在表的一端进行插入、删除操作的线性表。12、栈的元素具有后进先出的特点。13、栈顶元素的位置由
15、栈顶指针的指示,进栈、出栈操作要修改栈顶指针。14、抽象数据类型队列的定义:队列(QUeUe)也是一种运算受限的线性表。它只允许在表的一端进行插入,而在另一端进行删除。允许删除的一端称为队头(front),允许插入的一端称为队尾(rear)。15、队列亦称作先进先出(FirStInFirStoUt)的线性表,简称FlFo表。16、双端队列:就是限定插入和删除操作在表的两端进行的线性表。17、链队列结点定义:typedefstructQnodeQEIemTypedata;structQNode*next;QNode,*QueuPtr;18、队列的顺序存储结构称为顺序队列,在队列的顺序存储结构中,
16、除了用一组地址连续的储存单元依次存放从队头到队尾的元素之外,尚需要附设两个指针front和rear分别指示队列头元素和队列尾元素的位置。19、在非空队列中,头指针始终指向队头元素,而尾指针始终指向队尾元素的下一位置。20、栈的特点是先进后出,队列的特点是先进后出o21、栈和队列的共同特点是只允许在端点处插入和删除元素o22、一个栈的进栈序列是a,b,c,d,e,那么栈的不可能的输出序列是(八)edcba(B)decba(C)dceab(D)abcde23、假设一个栈的进栈序列是pl,p2,p3,,pn。其输出序列为1,2,3,,n,假设p3=l,那么PI为C。(八)可能是2(B)一定是2(C)
17、不可能是2(D)不可能是324、设有一个空栈,栈顶指针为100OH(十六进制,下同),现有输入序列为1、2、3、4、5,经过PUSH,PUSH,POP,PUSH,POP,PUSH,PUSH后,输出序列是3,栈顶指针是一8。5、4、3、2、12、12、33、41002H1004H1005H1003H24、一个队列的入队序列是假设1,2,3,4,那么队列的输出序列是B o(A) 4, 3, 2, 1 1, 2, 3, 4(C)1,4,3,2(D)3,2,4,125、假设用一个大小为6的一维数组来实现循环队列,且当前rear和front的值分别为0和3。当从队列中删除一个元素,再参加两个元素后,re
18、ar和front的值分别是一Bo(八)1和5(B)2和4(C)4和2(D)5和126、有5个元素,其入栈次序为A、B、C、D、E,在各种可能的出栈次序中,以元素C、D最先出栈(即C第一个且D第二个出栈)的次序有哪几个?C、D B、An EC、 D、 E、 B、 AC、D、B、E、A第六章树和二叉树1、树型结构是一类重要的非线性结构。2、树的定义:树是n(n=O)个结点的有限集T,T为空时称为空树,否那么它满足如下两个条件:(1)有且仅有一个特定的称为根的结点;(2)当nl时,其余结点可分为m(m0)个互不相交的有限集Tl,T2,T3Tm,其中每个子集又是一棵树,并称其为根的子树。3、根本术语结
19、点一一表示树中的元素,包括数据项及假设干指向其子树的分支结点的度(degree)结点拥有的子树数叶子(Ieaf)度为O的结点孩子(Child)结点子树的根称为该结点的孩子双亲(ParentS)孩子结点的上层结点叫该结点的兄弟(Sibling)同一双亲的孩子树的度一一一棵树中最大的结点度数结点的层次(IeVel)从根结点算起,根为第一层,它的孩子为第二层深度(depth)树中结点的最大层次数森林(forest)m(m0)棵互不相交的树的集合例题:结点A的度:3叶子:K, L, F, G,结点B的度:结点M的度:结点A的层次: 结点M的层次:M,I9J树的深度:4树的度:3结点I的双亲:D结点L的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 清华大学出版社 严蔚敏吴伟民 编著
链接地址:https://www.desk33.com/p-1093051.html