数据结构学习日志
文章平均质量分 66
笔记
chanbendong
这个作者很懒,什么都没留下…
展开
-
数据结构学习日志之十三--树和森林
树的存储结构1.双亲表示法:假设以一组连续空间存储树的结点,同时在每个结点中附设一个指示器指示其双亲结点在链表中的位置。这种存储结构利用了每个结点除了根节点都只有一个双亲,求双亲容易,但是求结点的孩子难,需要遍历整个结构2.孩子表示法:由于树种每个结点可能有多颗子树,则可用多重链表,即每个结点有多个指针域,每个指针指向一颗子树的根结点。第一种方法,由于树种很多结点的度都小于d,势必会造成浪费第二种...原创 2018-05-13 14:47:55 · 295 阅读 · 0 评论 -
数据结构学习日志之一
数据结构(Data Structure)是相互之间存在一种或多种特定关系的数据元素的集合。数据元素之间的相互关系称为结构,包含四种:1.集合 2.线性结构 3. 树形结构 4.图状结构或者网状结构抽象数据类型的定义由一个值域和定义在该值域上的一组操作组成。分为1.原子类型:变量的值不可分割,例如数位为100的整数。2.固定聚合类型:由确定数目的成分按某种结构组成,例如复数由实数加虚数3.可变聚合类...原创 2018-03-04 12:07:33 · 489 阅读 · 0 评论 -
数据结构学习日志之二--线性表
线性表的特点是,在数据元素的非空有限集合,存在唯一一个“第一个”和唯一一个“最后一个”的元素;除第一个元素,每个元素只有一个前驱;除最后一个元素,每个元素只有一个后继元素线性表的顺序表示指一组地址连续的存储单元依次存储线性表的数据元素,线性表元素的存储位置满足LOC(ai+1) = LOC(ai)+l,l为一个元素的存储单元即一般来说,线性表的第i个数据元素ai的存储位置为LOC(ai) = LO...原创 2018-03-13 16:06:52 · 209 阅读 · 0 评论 -
数据结构学习日志之三--静态链表
当链表每个节点在物理位置上是相邻的,即用数组描述的链表叫静态链表假设S为静态链表,S[0].cur只是第一个结点在数组中的位置,若设i = S[0].cur,S[i].data存储静态链表中的第一个数据元素,S[i].cur表示第二个结点在数组中的位置。一般情况下,若第i个分量表示静态链表的第k个结点,则S[i].cur表示第k+1个结点在数组中的位置。以整型游标i代替动态指针,i = S[i]....原创 2018-03-14 11:47:43 · 402 阅读 · 0 评论 -
数据结构学习日志之四--循环链表和双向链表
循环链表也是一种链式存储结构,特点是表中的最后一个结点的指针域会指向头结点,整个链表形成一个环。循环链表的操作和线性链表基本一致,差别在于算法中的循环条件不是p或p->next是否为空,而是它们是否等于头指针当合并两个表时,只需要修改两个指针值,即将一个表的表尾和另一个表的表头相接。双向链表不同以上的是,双向链表有两个指针域,一个指向前趋结点,一个指向后继结点。和单链表(即只有一个后继指针域...原创 2018-03-14 14:47:00 · 129 阅读 · 0 评论 -
数据结构学习日志之五--栈
栈是限定仅在表尾进行插入或删除操作的线性表。所以对这样的线性表来说,表尾称为栈顶,表头称为栈底。因为栈是仅在表尾进行修改,即栈的修改是按后进先出的原则进行的,所以栈又称后进先出的线性表。栈的表示:顺序栈,即是利用连续一组地址连续的存储单元一次存放自栈底到栈顶的元素,附设两个指针,top指向栈顶,base指向栈底,当top == base表示空栈,当top-base == stackSize表示栈已...原创 2018-03-19 16:13:25 · 155 阅读 · 0 评论 -
数据结构学习日志之六--队列
和栈相反,队列是一种先进先出的线性表。它只允许在表的一端插入,而在另一端删除元素。队列也有两种存储表示:用链表表示的队列简称为链队列。一个链队列显然需要两个分别只是队头和队尾的指针,分别称为头指针和尾指针才能唯一确定。队列和线性表的单链表一样,为了操作方便,队列也有一个头结点,并令头指针指向头结点。空链表则是头指针和尾指针都指向头结点。循环队列:在队列的顺序存储结构中,除了用一组地址连续的存储单元...原创 2018-03-30 11:02:25 · 325 阅读 · 0 评论 -
数据结构学习日志之七--串
串是由零或多个字符组成的有限序列,一般记为 其中s是串的名,n为串的长度,ai可能是字母,数字或者其他字符;串中任意个连续的字符组成的子序列称为该串的子串。串的逻辑结构和线性表极为相似,区别是串的数据对象约束为字符集。串的3种机内表示方法1.用一组地址连续的存储单元存储串值的字符序列,称为定长顺序存储表示。实现串的原操作为“字符序列的复制”,操作的时间复杂度基于复制的字符序列的长度。2.仍以一组地...原创 2018-04-03 16:51:50 · 180 阅读 · 0 评论 -
数据结构学习日志之八--模式匹配
字符串的模式匹配算法Brute Force 算法:有两个字符串S和T,长度为N和M,首先S[1]和T[1]比较,若相等,则再比较S[2]和T[2],一直到T[M]为止;若S[1]和T[1]不相等,则T往右移动一个字符的位置,再依次进行比较。最坏的情况是进行M*(N-M+1)次比较,时间复杂度是O(M*N)KMP算法:改进BruteForce算法,每当进行一次匹配过程中,不需要回溯i指针,而是利用已...原创 2018-04-24 14:21:54 · 258 阅读 · 0 评论 -
数据结构学习日志之九--树
树是n(n >= 0)个结点的有限集。在任意一个非空树中1.有且仅有一个特定的称为根(Root)的结点;2.当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2...Tm,其中每一个集合本身又是一棵树,并且称为根的子树如上图,是有13个结点的树,其中A是根,其余结点分成3个互不相交的子集:T1 = {B, E, F, K, L},T2 = {C, G}, T3 = ...原创 2018-04-24 15:09:19 · 205 阅读 · 0 评论 -
数据结构学习日志之十--二叉树
二叉树是一种特殊的树型结构,它的特点是每个结点至多只有两棵子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。二叉树可以有5种形态,1.空二叉树 2.仅有根结点的二叉树 3.右子树为空的二叉树 4.左右子树非空的二叉树 5.左子树为空的二叉树二叉树的性质1.在二叉树的第i层至多有2^(i-1)次方个结点(i>=1)2.深度为k的二叉树至多有2^k-1个结...原创 2018-04-24 16:32:39 · 349 阅读 · 0 评论 -
数据结构学习日志之十一--遍历二叉树
二叉树由3个基本单元组成:根结点,左子树和右子树。因此,若能依次遍历这三部分,便是遍历了整个二叉树。假如以L、D、R分别表示遍历左子树、访问根结点和遍历右子树,则可有DLR、LDR、LRD、DRL、RDL、RLD这6种方案。若限定先左后右,则只有前3种情况,分别称之为先(根)序遍历、中(根)序遍历和后(根)序遍历。首先我们来建立一个二叉树,采取的是链式存储结构typedef struct BiTN...原创 2018-05-03 15:56:04 · 209 阅读 · 0 评论 -
数据结构学习日志之十二--线索二叉树
在数据结构学习日志之十一里面我们知道,有n个结点的二叉树共有2n个链域,非空链域为n-1个,但其中的空链域却有n+1个。遍历二叉树是以一定规则将二叉树中的结点排成一个线性序列。这实质上是对一个非线性结构进行线性化操作,使每个结点(除第一个和最后一个外),这些线性序列中有且仅有一个直接前驱和直接后继。当二叉树链表做为存储结构时,只能找到结点的左、右孩子信息,而不能得到结点在任意序列里面的前驱和后继,...原创 2018-05-04 16:46:15 · 336 阅读 · 0 评论