数据结构

[数据结构] 搜索树与AVL树

佐手、 提交于 2020-03-03 00:18:40
文章目录 1. 搜索树 1.1. 理解二叉搜索树 1.2. 搜索树性能分析 2. AVL树 2.1. 理解AVL树 2.2. AVL树节点的数据结构 2.3. AVL树的插入 2.4. AVL树的旋转* 2.5. AVL树的删除 2.6. AVL树性能分析 1. 搜索树 1.1. 理解二叉搜索树 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值 它的左右子树也分别为二叉搜索树 如图所示 当进行数据搜索时 进行数据插入时过程与数据搜索相同, 找到一个适合自己的空节点 数据删除 1.2. 搜索树性能分析 插入和删除操作都必须先查找,查找效率代表了二叉搜索树中各个操作的性能. 理想情况下, 插入的树是完全二叉树 最坏情况下, 插入的树成了单链树 最优情况下,二叉搜索树为完全二叉树,其平均比较次数为:logn 最差情况下,二叉搜索树退化为单支树,其平均比较次数为:n / 2 2. AVL树 2.1. 理解AVL树 二叉搜索树虽可以缩短查找的效率, 但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下 . 因此,两位俄罗斯的数学家G.M.Adelson-Velskii和E.M

基础数据结构之栈

血红的双手。 提交于 2020-03-02 22:20:16
特点 :栈的最大特点就是后进先出(LIFO)。对于栈中的数据来说,所有操作都是在栈的顶部完成的,只可以查看栈顶部的元素,只能够向栈的顶部压⼊数据,也只能从栈的顶部弹出数据。 实现 :利用一个单链表来实现栈的数据结构。而且,因为我们都只针对栈顶元素进行操作,所以借用单链表的头就能让所有栈的操作在 O(1) 的时间内完成。 **应用场景:**在解决某个问题的时候,只要求关心最近一次的操作,并且在操作完成了之后,需要向前查找到更前一次的操作。 如果打算用一个数组外加一个指针来实现相似的效果,那么,一旦数组的长度发生了改变,哪怕只是在最后添加一个新的元素,时间复杂度都不再是 O(1),而且,空间复杂度也得不到优化。 注意:栈是许多 LeetCode 中等难度偏上的题目里面经常需要用到的数据结构,掌握好它是十分必要的。 相关LeetCode经典的练习题请关注公众号,从『菜单-算法-数据结构』对应文章中获取。 来源: CSDN 作者: BaryLeo 链接: https://blog.csdn.net/weixin_41878312/article/details/104619884

python数据格式化之pprint

ε祈祈猫儿з 提交于 2020-03-02 19:53:04
pprint – 美观打印作用:美观打印数据结构pprint 包含一个“美观打印机”,用于生成数据结构的一个美观视图。格式化工具会生成数据结构 pprint – 美观打印 作用:美观打印数据结构 pprint 包含一个“美观打印机”,用于生成数据结构的一个美观视图。格式化工具会生成数据结构的一些表示,不仅可以由解释器正确地解析,而且便于人类阅读。输出尽可能放在一行上,分解为多行时则需要缩进。 以下实例用用到的data包含一下数据 data = [(1,{'a':'A','b':'B','c':'C','d':'D'}), (2,{'e':'E','f':'F','g':'G','h':'H', 'i':'I','j':'J','k':'K','l':'L' }), ] 1、 打印 要使用这个模块,最简单的方法就是利用pprint()函数 1 2 3 4 5 6 from pprint import pprint print 'PRINT:' print data print print 'PPRINT:' pprint(data) 运行结果: 1 2 3 4 5 6 7 8 9 10 11 12 13 PRINT : [( 1 , { 'a' : 'A' , 'c' : 'C' , 'b' : 'B' , 'd' : 'D' }), ( 2 , { 'e' : 'E' , 'g'

数据结构与算法(一)

ぃ、小莉子 提交于 2020-03-02 18:34:21
基本概念 数据(data) :是描述客观事物的数值、字符以及能输入到机器并且被处理的各种符号的集合。数据的含义非常广泛,除了通常的数值数据、字符、字符串外,声音,图像等一切可以输入计算机并且能被处理的都是数据。例如表示人的姓名,身体,体重等的字符、数字是数据,人的照片,指纹,语音指令等也是数据。 数据元素(data element):是数据的基本单位,是数据集合的个体,在计算机程序中通常被作为一个整体来处理。 //未完待续 来源: https://www.cnblogs.com/xiaoyangxiaoen/p/12397102.html

DS博客作业08--课程总结

三世轮回 提交于 2020-03-02 18:18:31
1、当初你是如何做出选择计算机专业的决定的? 当初选择计算机相关专业是因为有高中学长的推荐,说计算机专业的前景比较好,工资比较高,加上自己也有去了解一些,可能计算机专业的竞争比其他很多工科专业要小一些,感觉会比一些专业好,而且自己的成绩不是很高,就报了网络专业。 经过这一年的学习,我感觉计算机专业真的挺难的,跟自己开学前想的并不一样。如果再选一次,我可能不会选择这个专业。首先,再选择这个专业之前,我对计算机这个领域没有什么兴趣,也没有过什么了解,报这个专业也没有经过过多的考虑,所以在面对一大堆代码的时候很难提起兴趣。其次学好计算机专业需要大量的代码的积累,但是我的自制力不是很强,就导致每次想的和做的不一样,在这方面我感觉确实要加强。而且每天面对代码我感觉并不是一件很有趣的事情,有很多的代码感觉理论知识都是很容易理解的,但是一换成代码难度就增加了好多,要看好多遍才能理解。 计算机专业确实不是我擅长的专业,但是既然选择了这个专业,我会努力地去学习它。 2.对比开篇博客,哪些方面还存在哪些不足? 我记得开篇博客我好像构想了很多很华丽的目标,比如经常去图书馆什么的,但是现在看来,理想和现实的差别真的好大,上了大学好像就把这些目标都抛到脑后了,大学完全没有高中那种紧迫感,舒适的环境也导致我没有学习的紧迫感,往往只有快期末考试了才去补缺查漏。我觉得最大的不足是我没有学习的动力,每天都过得很安逸

数据结构相关

白昼怎懂夜的黑 提交于 2020-03-02 16:58:18
记录一下数据结构的一些东西,方便复习应用 二叉树 结点的度:结点拥有的子树的数目 叶子结点:度为0的结点 分支结点:度不为0的结点 树的度:树中结点的最大的度 层次:根结点的层次为1,其余结点的层次等于该结点的双亲结点的层次加1 树的高度:树中结点的最大层次 森林:0个或多个不相交的树组成。对森林加上一个根,森林即成为树;删去根,树即成为森林。 满二叉树 定义:高度为h,并且由2h-1个结点组成的二叉树,称为满二叉树 完全二叉树 定义:一棵二叉树中,只有最下面两层结点的度可以小于2,并且最下层的叶结点集中在靠左的若干位置上,这样的二叉树称为完全二叉树。 树的遍历 详解链接 前序遍历-根左右 中序遍历-左根右 后序遍历-左右根 根据前序遍历中序遍历推导树的结构、根据树的中序遍历后序遍历推导树的结构 详细讲解 链表 详细讲解 注意 区分 node 和 node.val 链表和数组的区别: 两者的区别: 数组静态分配内存,链表动态分配内存。 数组在内存中是连续的,链表是不连续的。 数组利用下标定位,查找的时间复杂度是O(1),链表通过遍历定位元素,查找的时间复杂度是O(N)。 数组插入和删除需要移动其他元素,时间复杂度是O(N),链表的插入或删除不需要移动其他元素,时间复杂度是O(1)。 JS查找算法 https://www.cnblogs.com/zhuochong/p

数据结构——复习四

自古美人都是妖i 提交于 2020-03-02 14:50:48
//虽然我觉得,我刚开始复习的这些,在库里其实有可以直接调用的,有现成的,但我们还需要明白这是一种思想,所以我静下心来好好体会了一下,做这些事,其实都是很有必要的。 串(字符串):是零个或多个字符组成的有限序列。记作: S=“a1a2a3…”,其中S是串名,ai(1≦i≦n)是单个,可以是字母、数字或其它字符。 串值:双引号括起来的字符序列是串值。 串长:串中所包含的字符个数称为该串的长度。 空串(空的字符串):长度为零的串称为空串,它不包含任何字符。 空格串(空白串):构成串的所有字符都是空格的串称为空白串。 注意:空串和空白串的不同,例如“ ”和“”分别表示长度为1的空白串和长度为0的空串。 子串(substring):串中任意个连续字符组成的子序列称为该串的子串,包含子串的串相应地称为主串。 子串的序号:将子串在主串中首次出现时的该子串的首字符对应在主串中的序号,称为子串在主串中的序号(或位置)。 串相等:如果两个串的串值相等(相同),称这两个串相等。换言之,只有当两个串的长度相等,且各个对应位置的字符都相同时才相等。 串在计算机中有三种存储方式: 1.定长顺序存储:将串定义成字符数组,利用串名可以直接访问串值。用这种表示方式。串的存储空间在编译时确定,其大小不能改变。 # define MAX_STRLEN 256 //存储结构定义 typedef struct {

数据结构与算法系列七(队列)

与世无争的帅哥 提交于 2020-03-02 13:08:30
1.引子 1.1.为什么要学习数据结构与算法? 有人说,数据结构与算法,计算机网络,与操作系统都一样,脱离日常开发,除了面试这辈子可能都用不到呀! 有人说,我是做业务开发的,只要熟练API,熟练框架,熟练各种中间件,写的代码不也能“飞”起来吗? 于是问题来了:为什么还要学习数据结构与算法呢? #理由一: 面试的时候,千万不要被数据结构与算法拖了后腿 #理由二: 你真的愿意做一辈子CRUD Boy吗 #理由三: 不想写出开源框架,中间件的工程师,不是好厨子 1.2.如何系统化学习数据结构与算法? 我想好了,还是需要学习数据结构与算法。但是我有两个困惑: 1.如何着手学习呢? 2.有哪些内容要学习呢? 学习方法推荐: #学习方法 1.从基础开始,系统化学习 2.多动手,每一种数据结构与算法,都自己用代码实现出来 3.思路更重要:理解实现思想,不要背代码 4.与日常开发结合,对应应用场景 学习内容推荐: 数据结构与算法内容比较多,我们本着实用原则,学习经典的、常用的数据结构、与常用算法 #学习内容: 1.数据结构的定义 2.算法的定义 3.复杂度分析 4.常用数据结构 数组、链表、栈、队列 散列表、二叉树、堆 跳表、图 5.常用算法 递归、排序、二分查找 搜索、哈希、贪心、分治 动态规划、字符串匹配 2.考考你 你还记得在数组那一篇中,我们说过基于线性表的数据结构有哪些吗?它们是:数组

EF那点事

穿精又带淫゛_ 提交于 2020-03-02 11:42:23
EntityFramework 1-->什么是EnitityFramework   1.1--> ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案,早期被称为 ObjectSpace.      1.2-->什么是O/R Mapping     广义上,ORM指的是面向对象的对象模型和关系型数据库的数据结构之间的相互转换。     狭义上,ORM可以被认为是,基于关系型数据库的数据存储,实现一个虚拟的面向对象的数据访问接口。理想情况下,基于这样一个面向对象的接口,持久化一个OO对象应该不需要要了解任何关系型数据库存储数据的实现细节。   1.3-->EntityFramework原理:     EnityFramework采用了抽象化的数据结构模式,将每个数据库中的每个表都转换成Model,将表的字段都转换成Model的属性,关系则转换为结合属性(association).让数据库的E/R模型完全转换为对象模型,这样就能让我们用最熟悉的代码来调用访问。而在抽象化的结构之下,则是高度集成与对应结构的概念层,对应层和储存层,以及支持EntityFramework的数据提供者(provider),让数据访问的工作得以顺利与完整的执行。     (1)概念层:负责向上的对象与属性显露与访问。