数据结构word笔记
数据结构笔记

数据结构笔记主要内容:基础知识:基本问题问答(概念)算法分析:教材典型例题算法思路简述算法设计:严题集一题多解,典型题详细分析重点题分析:严每章题集已经考题,相似题数据结构笔记特点:实用,详细,易于理解(用通俗语言描述复杂问题),针对性强,覆盖面广,定期公布,题目累加![center]第一章绪论[/center]一、基本问题问答:1、什么叫数据结构?如何理解“数据结构”?如何树立数据结构的学习体系?广义上的数据结构指的是:逻辑结构和物理结构。
狭义上的数据结构专指逻辑结构,就是元素间的逻辑关系,主要类型有:集合型,线性结构,树型,图型!整个数据结构的课程就是围绕着以上几种数据类型展开的,加上基于这些结构的基本操作:插入,删除,查找,取元素,取长度等等。
另外,还有基于这些数据结构的较为复杂的算法:查找和排序。
在严老师和其他很多的数据结构教材中都把查找和排序作为了一个独立的部分,这一部分实际上主要在探讨算法,而不在是结构本身了。
算法的概念将在后面提到。
2、数据的物理结构和逻辑结构定义数据结构,当计算机程序运行时,程序就按照定义给这些数据分配了空间。
而数据定义,是在定义其逻辑结构。
以链表为列,在实际定义时,一个个的结点,由于其指针域可以指向另一个结点,那么依靠这种指向关系,就可在逻辑上建立起一条链状结构!但是,在实际的程序执行时,是不会有这样的一条链的,而是通过在一个结点空间的某个空间内填入了下一个结点的地址!这样的每个有数据和地址的结点,才是其物理结构。
3、算法的概念、分析,算法时间复杂度的含义及分析算法就是解决问题的方法或策略。
一个算法好与坏的评价标准是:正确,可读,健壮,效率高,空间省!设计算法时,应该按照严教材上关于类C(或类P)语言的描述来作,格式为:status fun_name{//算法说明for{ .... };//典型功能及复杂语句后加注释}//fun_name注意写好注释!不求多,但求精!时间复杂度:分析算法效率的重要工具。
老师整理的数据结构笔记

数据结构内容:1、数据结构理论、线性表、单链表、双链表、内核链表2、栈(顺序栈、链栈)和队列(顺序队列、链队列)3、树和二叉树4、查找(顺序查找、折半查找、hash表)和排序(直接插入排序、折半排序、链表排序、shell排序、冒泡排序、快速排序)5、小项目:航空查询系统第一天:数据结构任务:将实际中的问题转化为计算机可以处理的问题。
原子类型(不可以再分):(int、char、float、.....);结构类型:结构体,用户可以根据自己的需要去定义;逻辑结构:线性(线性表、链表)和非线性(树、图)存储结构:顺序存储(数组)-->数据的存储结构可以直接反映它的逻辑结构优点:只要知道存储的首地址、可以实现随机访问缺点:1、需要开辟成片的空间;2、在插入和删除时,会造成数据成片的移动链式存储(链表)--->通过存储地址的指针表示数据元素间的逻辑关系索引存储:采用目录结构的方式,不断缩小查找范围hash表存储:是一种查找效率最高的存储方式。
算法:查找、排序、插入、删除、修改算法定义:解决问题的步骤算法评价的标准:1、时间复杂度2、空间复杂度,指的是除了运算数据本身以外的额外空间3、算法的可读性(程序的风格和编程规范)和可维护性(代码的封装);线性表:除了第一个元素和最后一个元素,对于中间的任何一个元素有且仅有一个直接前驱和一个直接后继。
顺序表:线性表的顺序存储在算法的实现中,对于每一个操作步骤,尽量都封装成一个函数,来提高代码的可读性。
//=====================顺序表算法===============================typedef struct list //顺序表的类型//{datatype data[maxsize]; //为顺序表的开辟存储空间//int last; //当前顺序表最后一个元素的下标,用来说明顺序表的长度//}sqlist; *sqlink; // 顺序表说明符sqlist ==> struct listsqlink ==> struct list *sqlink L;L=(sqlink)malloc(sizeof(sqlist));//初始化L->last=-1//线性表的插入算法;1、在插入之前判断表是否为满2、判断插入点是否合法3、顺序移位4、插入数据5、将L->last++//线性表的删除算法;1、在删除之前判断表是否为空2、判断删除点是否合法3、顺序移位,将要删除的元素覆盖4、将L->last--。
数据结构复习笔记整理

最后,我们有了这个表(数据结构),肯定要用它,那么就是要对这张表中的记录进行查询,修改,删 除等操作,对这个表可以进行哪些操作以及如何实现这些操作就是数据的运算问题了。
所谓算法(Algorithm)是对问题求解步骤的一种描述,是指令的有限序列,其中每一条指令表示 一个或多个操作。
所谓算法复杂度: T (n) = O(f(n)) 称 T (n) 为算法的渐近时间复杂度(Asymptotic Time Complexity),简称时间复杂度。O 是数量级 的符号。 下面我们探讨一下如何估算算法的时间复杂度 算法 = 控制结构 + 原操作(固有数据类型的操作) 算法的执行时间=原操作(i)的执行次数×原操作(i)的执行时间 算法的执行时间与原操作执行次数之和成正比
队满:front=(rear+1)%m 3.串长、空串、空白串、串连接、子串定位(模式匹配)等是何意?
串中字符的数目 n 称为串的长度。0 个字符的串成为空串,它的长度为 0。 串的串连是将一个串紧接着存放在另一个串的后面而成的一个新串。串的连接满足结合率,不满足交换率
串的模式匹配问题:子串的定位操作通常称为串的模式匹配。通常思想是从主串 S 的第 pos 个字符起 和模式的第一个字符比较,若相等则继续逐个比较后继字符,否则从主串的下一个字符起再重新和模式的 字符比较。依此类推,直至模式 T 中的每个字符依次和主串 S 中的一个连续的字符序列相等,则称匹配成 功,函数值为和模式 T 中第一个字符相等的字符在主串 S 中的序号,否则称模式不匹配,函数值为 0。 1. 稀疏矩阵、特殊矩阵的含义?为什么要对矩阵进行压缩存储?
while(i<j) {
while(L->data[i]<0 && i<j) i++; //从前向后找正数
(完整word版)数据结构复习要点(汇总版),推荐文档.docx

1.顺序存储结构 :把逻辑上相邻的数据元素存储在物理位置也相邻的存储单元中,借助元素在存储器中的相对位置来表示数据之间的逻辑关系。
2.链式存储结构:借助指针表达数据元素之间的逻辑关系。不要求逻辑上相邻的数据元素物
3.树形结构 :结构中的数据元素之间存在“一对多“的关系。若数据为非空集,则除了第一
个元素 (根)之外,其它 每个数据元素都只有一个直接前驱, 以及多个或零个 直接后继。
4.图状结构 :结构中的数据元素存在“多对多”的关系。若结构为非空集,折每个数据可有多个(或零个)直接后继。
(2)数据的存储结构:数据元素及其关系在计算机内的表示称为数据的存储结构。
结点定义:
typedef int datatype;//结点数据类型,假设为int
typedef struct node {//结点结构
datatype data;
struct node *next;//双向链表还应加上*previous
3.数据对象:数据对象是具有相同性质的数据元素的集合,是数据的一个子集。(有时候也
叫做属性。)
4.数据结构 :数据结构是相互之间存在一种或多种特定关系的数据元素的集合。
(1)数据的逻辑结构:数据的逻辑结构是指数据元素之间存在的固有逻辑关系,常称为数据结构。
数据的逻辑结构是从数据元素之间存在的逻辑关系上描述数据与数据的存储无关,是独立于计算机的。
2 / 13
插入:p->next=head->next;head->next=p;
输出:printf(“%d”,p->data);
删除:q=p->next;p->next = q->next ;free(q);
(word完整版)非常实用的数据结构知识点总结,推荐文档

数据结构知识点概括第一章概论数据就是指能够被计算机识别、存储和加工处理的信息的载体。
数据元素是数据的基本单位,可以由若干个数据项组成。
数据项是具有独立含义的最小标识单位。
数据结构的定义:·逻辑结构:从逻辑结构上描述数据,独立于计算机。
·线性结构:一对一关系。
·线性结构:多对多关系。
·存储结构:是逻辑结构用计算机语言的实现。
·顺序存储结构:如数组。
·链式存储结构:如链表。
·索引存储结构:·稠密索引:每个结点都有索引项。
·稀疏索引:每组结点都有索引项。
·散列存储结构:如散列表。
·数据运算。
·对数据的操作。
定义在逻辑结构上,每种逻辑结构都有一个运算集合。
·常用的有:检索、插入、删除、更新、排序。
数据类型:是一个值的集合以及在这些值上定义的一组操作的总称。
·结构类型:由用户借助于描述机制定义,是导出类型。
抽象数据类型ADT:·是抽象数据的组织和与之的操作。
相当于在概念层上描述问题。
·优点是将数据和操作封装在一起实现了信息隐藏。
程序设计的实质是对实际问题选择一种好的数据结构,设计一个好的算法。
算法取决于数据结构。
算法是一个良定义的计算过程,以一个或多个值输入,并以一个或多个值输出。
评价算法的好坏的因素:·算法是正确的;·执行算法的时间;·执行算法的存储空间(主要是辅助存储空间);·算法易于理解、编码、调试。
时间复杂度:是某个算法的时间耗费,它是该算法所求解问题规模n的函数。
渐近时间复杂度:是指当问题规模趋向无穷大时,该算法时间复杂度的数量级。
评价一个算法的时间性能时,主要标准就是算法的渐近时间复杂度。
算法中语句的频度不仅与问题规模有关,还与输入实例中各元素的取值相关。
时间复杂度按数量级递增排列依次为:常数阶O(1)、对数阶O(log2n)、线性阶O(n)、线性对数阶O(nlog2n)、平方阶O (n^2)、立方阶O(n^3)、……k次方阶O(n^k)、指数阶O(2^n)。
(完整word版)大学数据结构期末知识点重点总结(考试专用)

第一章概论1。
数据结构描述的是按照一定逻辑关系组织起来的待处理数据元素的表示及相关操作,涉及数据的逻辑结构、存储结构和运算2。
数据的逻辑结构是从具体问题抽象出来的数学模型,反映了事物的组成结构及事物之间的逻辑关系可以用一组数据(结点集合K)以及这些数据之间的一组二元关系(关系集合R)来表示:(K, R)结点集K是由有限个结点组成的集合,每一个结点代表一个数据或一组有明确结构的数据关系集R是定义在集合K上的一组关系,其中每个关系r(r∈R)都是K×K上的二元关系3.数据类型a。
基本数据类型整数类型(integer)、实数类型(real)、布尔类型(boolean)、字符类型(char)、指针类型(pointer)b。
复合数据类型复合类型是由基本数据类型组合而成的数据类型;复合数据类型本身,又可参与定义结构更为复杂的结点类型4.数据结构的分类:线性结构(一对一)、树型结构(一对多)、图结构(多对多)5。
四种基本存储映射方法:顺序、链接、索引、散列6。
算法的特性:通用性、有效性、确定性、有穷性7.算法分析:目的是从解决同一个问题的不同算法中选择比较适合的一种,或者对原始算法进行改造、加工、使其优化8.渐进算法分析a.大Ο分析法:上限,表明最坏情况b.Ω分析法:下限,表明最好情况c.Θ分析法:当上限和下限相同时,表明平均情况第二章线性表1.线性结构的基本特征a.集合中必存在唯一的一个“第一元素”b。
集合中必存在唯一的一个“最后元素"c.除最后元素之外,均有唯一的后继d。
除第一元素之外,均有唯一的前驱2.线性结构的基本特点:均匀性、有序性3。
顺序表a.主要特性:元素的类型相同;元素顺序地存储在连续存储空间中,每一个元素唯一的索引值;使用常数作为向量长度b。
线性表中任意元素的存储位置:Loc(ki)= Loc(k0)+ i * L(设每个元素需占用L个存储单元)c. 线性表的优缺点:优点:逻辑结构与存储结构一致;属于随机存取方式,即查找每个元素所花时间基本一样缺点:空间难以扩充d.检索:ASL=【Ο(1)】e。
(精品word)数据结构期末复习知识点(兼容版)(良心出品必属精品)

《数据结构》期末复习复习要点:第一章1.相关基本概念:数据、数据元素(基本单位)、数据项(最小单位)、算法及其特征等;◎数据:所有能输入到计算机中并被计算机程序处理的符号总称。
◎数据元素:基本单位。
◎数据项:最小单位。
◎算法特征(5点):有穷性;确定性;可行性;输入;输出。
2.逻辑结构、存储结构(物理结构)及其类型;◎逻辑结构有四种基本类型:集合、线性结构、树形结构和网状结构。
◎数据元素之间的关系有两种不同的表示方法:顺序映象和非顺序映象,并由此得到两种不同的存储结构:顺序存储结构和链式存储结构。
◎注:期中考题目数据结构分为两大类,即为逻辑结构和存储结构。
其中逻辑结果又分为线性结构和非线性结构,存储结构一共有四种(顺序、链接、索引、散列)。
3.算法分析:语句频度(执行次数)计算、时间和空间复杂度分析。
表示方法◎语句频度:直接写次数。
◎时间复杂度:O(执行次数),如:O(n)。
◎空间复杂度:O(所需空间)第二章1.顺序表(数组)插入、删除、有序表合并算法及其移动次数计算;数据元素序号 1 2 3 4 5 6 7 8 表示 L.elem[0] [1] [2] [3] [4] [5] [6] [7]◎顺序表插入算法思想:如果要在序号5前插入元素e,需要将序号5~8向后移动一个位置。
▲移动次数为4次,公式n-i+1◎顺序表删除算法思想:如果要删除序号5元素,需要将6~8依次向前移动一位▲移动次数为3次,公式n-i◎有序表合并LA = (3,5,8,11)LB = (2,6,8,9,11,15,20)则LC = (2,3,5,6,8,8,9,11,11,15,20)算法思想(以非递减为例):La和Lb非递减排列,La与Lb中元素逐个比较,较小的先插入Lc中。
▲注:非递减是指递增排序,但元素有可能相等,与之相对的有非递增排序。
▲移动次数为(La.length + Lb.length)2.链表(有无头节点、单双、循环)插入(前、后)、删除(前、本身、后)的指针挂接、建立(不带头节点)算法。
数据结构读书笔记【第一章】

数据结构读书笔记【第⼀章】这⼀部分内容是关于数据结构的⼀些基础概念,这有助于我们理解后续的内容:【1】数据:对客观事物的符号表⽰,在计算机中是指所有能输⼊到计算机处理的符号的总称。
【2】数据元素:数据组成的基本单位,元素⼀般作为数据结构中的⼀个整体考虑和处理,可能包含多个数据项,例如表中的⼀条记录为⼀个数据元素,但含有多个数据项。
【3】数据对象:指的是性质相同的数据元素组成的集合,是数据的⼀个⼦集。
【4】数据结构:相互之间存在⼀种或多种特定关系的数据元素的集合。
【逻辑结构】这⾥元素之间的关系可以分为⼏类:第⼀种是集合关系,第⼆种是线性的关系,单链表就是这样⼀种关系,第三种和第四种分别是树形关系和图形关系,也就是对应于树和图。
上⾯描述这么多,最关键就是为了说明数据和关系两个概念。
这⾥的关系指的是逻辑关系,例如两个数据a,b按照复数的逻辑关系组织且a为实部,b为虚部。
【存储结构】有了数学上的数据结构概念,我们还需要把数据映射到计算机中表⽰(存储结构),也就是将数据和关系⽤计算机语⾔来表⽰出来,⼀个位串可以表⽰⼀个数据元素(8位可以⽤来表⽰字符),通常称这个位串为元素,如果⼀个位串包含多个数据项,对应于每个数据项的被称为数据域。
根据不同表⽰⽅法可以得到顺序和链式两种存储结构。
总结上⾯的内容就是⼀个算法的设计取决于逻辑结构,算法的实现依赖存储结构。
【数据类型】为了⽅便表⽰存储结构,⾼级程序语⾔借助数据类型来对它进⾏描述。
数据类型的定义是⼀个值的集合和这个值集上⼀组操作的总称。
根据值的不同特性,数据类型⼜可以分为两类:⼀类是⾮结构的“原⼦类型”(整形、指针),另⼀类是”结构类型“(数组),结构类型的值是若⼲成分按照某种结构组成,这⾥的成分既可以是结构的也可以是⾮结构的。
由于数据结构可以看作是⼀组具有相同结构的值,所以结构类型也可以看作是数据结构和定义在上⾯的⼀组操作来构成的。
数据类型不仅可以表⽰存储关系,还可以定义⼀组该类型的操作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
张东1145105494简介:1、算法+数据结构=程序2、数据结构3、数据、数据元素(基本单位)、数据项(最小单位)4、数据结构在计算机中的映像是存储结构;数据元素在计算机中的映像是结点;数据项在计算机中的映像是数据域;逻辑结构在计算机中的映像是关系。
5、四种存储方式6、抽象数据类型1)按不同特性分类●原子类型●固定聚合类型●可变聚合类型2)基本操作●init 构造●destroy 销毁●get 返回●put 改变●isasc 升序●isdesc 降序●Max 最大●min 最小7、时间复杂度技巧1)对于循环程序(for),最大执行次数即为for的乘积。
简言之,程序有多少for出现,就是n的多少次方2)对于顺序结构,可用“求和取最大值“法则3)对于循环程序(while),一般结果是O(log M N)4)若是一般的赋值语句,时间复杂度必为O(1)5)对于选择结构的程序,一般时间复杂度为O(1)加:自加自减++ ——x=2;y=x++;y=++x;第二章线性表1、表长相当于元素个数2、线性表一般下标是1—n,故当n=0时,表示线性表为空表3、list 表示线性表elem 元素length 表示求长度(线性表)locate 定位(位置)insert 插入(元素之前)delete 删除void 空类型(写程序必写)顺序结构(链表相反)优势:随机存取劣势:在做插入或删除时需要移动大量的元素malloc 分配一个连续空间realloc 将已分配的空间进行重新分配顺序表插入时所需移动的元素次数期望值是n/2删除时所需移动的元素次数期望值是(n-1)/2删除:模板语句:q=&(L.elem[i-1]) 表示顺序表中插入元素或者删除元素的地址加:逻辑运算符:!非&&与(一假即假)||或(一真即真)逻辑值:真(1)假(0)比较运算符:< >= <= == !=若在if或者while后面的括号中出现逻辑表达式或者比较表达式,那么结果只能为真或假。
模板语句:if(i<1||i>L.length)return ERROR;表示在顺序表中,删除元素,若输入的删除地址不符合题意,则返回错误。
2、链式结构1)结点=数据域(元素)+指针域(指向后继结点)单链表2)一般在第一个元素之前,会创建一个头结点(头指针),用head表示。
指向第一个元素head->NULL 表示空表head->next=NULLclear 重置create 创建模板语句p=L->next 表示单链表中、头结点为L指向下一个结点N=(linklist)malloc(sizeof(LNode))表示在单链表中生成新结点技巧:做单链表的插入操作1)判断单链表的存在与否2)找到插入位置p=p->next j++3)生成新结点malloc4)赋值p->data=e(插入的元素)5)插入元素单链表删除操作1)2)同插入3)删除结点模板输出逆序顺序for(i=0;i<n;i++) 逆序for(i=n;i>0;i--)循环链表1、判断单链表的最后一个结点,表示方式是指针域为空;判断循环链表的最后结点,表示方式是指针域指向第一个结点2、不需要头结点3、循环链表为空,表达方式为L->next=L双向链表1、插入2、删除3、三部分:data next priorlinklist表示链式结构的线性表第三章栈和队列1、操作受限的线性表栈1、先进后出后进先出2、表头-栈底表尾-栈顶3、必须要有栈顶指针top系列:12345进栈出栈:1234554321 3452124351 412354、stack 栈push 进栈pop 出栈empty 判断是否为空5、当top=0/-1时,表示为空栈top==base(指向栈底指针)top-base=0stacksize=N 表示栈中元素个数模板语句1)S.top==S.base 设置栈顶栈底指针2)S.Stacksize=STACK_INIT_SIZE6、入栈(插入):栈满(s.top-s.base>=s.stacksize);s.top++;*s.top=e出栈(删除):栈空(s.top==s.base);s.top--;e=*s.top7、加:双栈共享一个空间栈:1,2空间:A[m]1)栈底在空间两端2)栈空:top1==0 top2==m-1 3)栈满:top1+1=top2中缀—后缀(前缀)1)将每一步运算加括号2)将每一括号内的运算符放在所在的括号后(前)3)将括号全部去除4)必须保证一个括号内只有一个运算符加:顺序结构、选择结构、循环结构选择结构:if…elseif(x>=0) y=1;else y=2;递归调用1、每次运行都是相似的操作2、每一项的值都由前一项的值决定3、必须要有一个基础值队列1、先进先出2、在队尾处进行插入、在队头处进行删除3、基本操作1)Queue2)clear 清空3)gethead 取队头元素4)Enqueue 入队Dequeue出队5)queuetraverse 遍历队列(查询队列中每一个元素)模板:Q.front->next==NULL 表示初始化队列Q.front==Q.rear 表示队列为空e=Q.front->next->data 表示队头元素若将队列放入数组base[]中:1、入队:base[rear]=e;rear++;2、出队1)e=base[front];2)front=front+1;注意:入队相当于尾指针自加1,出队相当于头指针自加1。
循环队列1、队空:Q.front==Q.rear2、入队:base[rear]=e;rear=(rear+1)%M;M:循环队列元素个数3、出队:e=base[front];front=(front+1)%M;4、队满front==(rear+1)%M队空:front==rear求循环队列的元素个数(长度)(Q.rear-Q.front+MAXQSIZE)%MAXQSIZE第四章串1、空串空格串“”“”2、字符位置:所在字符串的位置子串位置:子串第一个字符在主串中的位置3、串相等1)长度相等2)元素相同●非平凡子串即非空非主串的子串●任意串为本身子串、空串为任意串子串●一个串的子串个数为n*(n+1)/2+1(空串)●一个串的真子串个数为n*(n+1)/2-1(本身)加:ASCII码0 ---48 0—9(48--57)A---65 A—Z(65--90)a---97 a—z (97--122)concat 串的连接compare 串的比较(ASCII)substring 求子串(表示从左边第N个字符开始截取M 个字符)index 求子串的位置(POS表示从左边第pos个字符开始检索)顺序:1、定长1)0号单元存放的是串的长度2、堆分配1)实际串长和数组长度相等加:数据类型1)整型intint a;a=1; a=123;2)浮点型floatfloat a; a=1.23)字符型charchar ch;ch=’i’; ch=’1’;模式匹配1)若主串长度n,模式串长度为m,则时间复杂度为O(m*n)2)模板语句:if(s[i]=t[j]) {++i; ++j}else {i=i-j+2; j=1}if(j>t[0]) return i-t[0];else return 0;S: abbcbacbabc 11T:abc 3男朋友:9KMP:3Q:模式串p=’abaabcac’,next函数值序列为?t=’abcaabbcabcaabdab’next 01112231123456712第五章数组广义表1、二维数组2、元素个数:行*列3、已知首地址a0和每个数组元素所占用的空间l,求任意数组元素的地址aiai=a0+(i)*l 下标从0开始ai=a0+(i-1)*l 下标从1开始4、二维数组1)以行为先序输入线性表aij=a00+(i*n+j)*L2)以列为先序输入线性表aij=a00+(j*m+i)*L注:二维数组为m*n,首元素为a00Q:数组A,每个元素长度3B,行i下标1—8,列j下标1—10。
首地址SA开始存储,数组按行(列)存放,元素a85的起始地址?解:按行:a85=a00+((8-1)*10+5-1))*3=SA+222按列:a85=a00+((5-1)*8+8-1)*3=SA+117Q:二维数组M的元素占用4B,行下标i(0--4),列下标j(0--5),M按行存储M35的起始地址和M按列存储?的起始地址相同。
M24 M34 M35 M44解:按行M35=a00+(3*6+5)*4=a00+92按列M34=a00+(4*5+3)*42)三维●以行为主序,则行下标变化最慢,纵下标变化最快●以纵为主序,则行下标变化最快,纵下标变化最慢列的变化速度介于行纵之间矩阵的压缩存储1、特殊矩阵1)对称矩阵aij=aji压缩方法:为每一对对称元分配一个存储空间存储:n(n+1)/2个存储空间aij:k=i(i-1)/2+j-1 (i>=j)k=j(j-1)/2+i-1 (i<j)2)三角矩阵压缩方法:同对称矩阵稀疏矩阵1、稀疏因子2、1)根据稀疏矩阵求出三元组表示形式(行、列、值。
非0)2)根据三元组求出转置矩阵的三元组性质稀疏矩阵1)求转置矩阵2)求转置矩阵的三元组3)求每一列非0元素的个数4)每一列第一个非0元素的位置=上一列第一个非0元素的位置+上一列非0元素的个数广义表1、A=() 空表,长度为0B=(e)原子e,长度1C=(a,(b,c,d))原子a和表(b,c,d)长度2D=(A,B,C)E=(a,E) 递归表2、表头元素(head):第一个元素表尾:其余的元素(tail)太关键了:表头可以是原子,也可以是子表;表尾必须是子表Q:D=(E,F)=((a,(b,c)),F)1)head(D)=E=(a,(b,c))2)tail( E)=((b,c))3)head(E)=a4)head(tail(E))=(b,c)head((b,c))=(b,c)tail((b,c))=()L=((a,c),(b,d))运算head(head(tail(L))))=bL=((),()) head(L)=()tail(L)=(())L长度是2L=((b,c),a)第六章树和二叉树1、树的概念1)根无前驱、有0个或多个后继2)子树有1个前驱、有0个或多个后继2、Q:树用广义表表示1)树→广义表●所有结点均是广义表内的元素●根结点总显示在第一位,其余后继结点将作为其下一级元素出现2)广义表→树●第一位是根结点●分成的部分作为下一层结点出现,以此类推3、术语结点、结点的度、树的度、叶子结点(度数为0)、路径(分支+结点)、双亲结点、孩子结点、祖先结点、兄弟结点、堂兄弟、子孙结点、结点层次(从1开始)、树的深度(叶子结点层次的最大值)、有序树、无序树二、二叉树1、特点:1)每个结点的分支为0、1、2 2)基本形态:5种2、性质1)在第i层上最多有2i-1个结点2)深度为k的二叉树,最多有2k-1个结点3)在任意二叉树中,n0=n2+1.特殊二叉树1、满二叉树:深度为k,必有2k-1个结点2、完全二叉树1)按顺序编号且与满二叉树一一对应2)只有最后一层叶子不满,且全部集中在左边Q:在一4层的满二叉树中,度数为2的结点个数为多少?1)满二叉树结点个数:2^4-1=152)最下面一层结点个数:2^(4-1)=8(叶子结点:度数为0)3)15-8=7或者8-1=7性质4:具有n个结点的完全二叉树的深度必为[log2n]+1Q:二叉树400结点。