数据结构

软考笔记第六天之数据结构与算法基础(一)

邮差的信 提交于 2020-03-13 07:43:05
数组 数组类型 存储地址计算 一维数组a[n] a[i]的存储地址是:a+i*len 二维数组a[n][m] a[i][j]的存储地址是: 按行存储:a+(i*m+j)*len 按列存储:a+(j*n+i)*len 例:已知5行5列的二维数组a中的各元素占2个字节,求元素a[2][3]按行优先存储的存储地址? a+(2*5+3)*2=a+26 稀疏矩阵 数据结构: 数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。 通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往和高效的检索算法和索引技术有关。 数据逻辑结构: 线性结构,非线性结构(树,图[有环路]) 树: 二叉树遍历 前序遍历(根,左,右) 中序遍历(左,根,右) 后序遍历(左,右,根) 层次遍历(第一层,第二层...) 前序遍历:1,2,4,5,7,8,3,6 中序遍历:4,2,7,8,5,1,3,6 后序遍历:4,8,7,5,2,6,3,1 层次遍历:1,2,3,4,5,6,7,8 反向构造二叉树(已知两种序列,画出二叉树) 普通树转二叉树(孩子结点-左子树结点,兄弟结点-右孩子结点) 查找二叉树 二叉排序树(左孩子小于根,右孩子大于根) 最优二叉树(哈夫曼树) 构造最短的带权路径的树 线索二叉树: 使遍历更加快捷 绿线指向前驱结点,红线指向后驱结点

数据结构与算法基础 模块二

别说谁变了你拦得住时间么 提交于 2020-03-13 07:34:38
那么在上一次的分享中,针对链表和顺序表进行了比较,也对于他们二者进行了基础性的分析和说明,那么在模块二中,紧接着上一次的分享,说明一下栈,队列和树的相关知识。 栈 栈的关键主要是记住: 先进后出 (可以形象的比喻为洗盘子,先洗的盘子放在最下面,放的时候一个一个放,最先洗完的最后放进碗橱) 并且我们需要明确,栈只是一个逻辑上的概念,并非是实际存在的,并且,出栈的顺序是灵活的,并不是固定的一定是按照进来的顺序走,有可能是进一个出一个,也有可能是全部进来再出,所以,我们要明确不能死记栈的概念,而是要灵活的运用。 队列 队列的关键是: 先进先出 (可以形象的比喻成在银行排队取钱,先进去的人排在队伍的前面,完成取钱任务后,先出门) 队列和栈两者有一个很明显的区别,就是出的顺序,所以在记忆的时候,我们可以组合在一起记忆,并且将他们各自都形象的记忆,这样有利于我们区分两者之间的关系,也有利于我们记忆。 那么,队列中还包括循环队列 :在判断循环队列空的条件:head=tail 这个式子也可以表示队满的情况, 但也有这种可能,就是他的尾指针并没有和他的头指针存在一个地址里,为了区分开来,头地址和尾地址之间还存在一个地址,即其队满的条件是:tail+1=head 树 首先,我们在说明树的一些问题的时候,我们需要明确有关于树的相关基本概念: 1、节点的度 (就看与下一层与几个结点相关联) 2、树的度

数据结构与算法(4)树

本秂侑毒 提交于 2020-03-13 07:33:22
树的基本概念: 1、结点的度 结点的度是子结点的个数。例如:结点1有三个字结点2,3,4,所以结点1的度为3。 2、树的度 树的度等于所有结点度中度最高的值。例如:上图中结点度最高为3,所以树的度为3。 3、叶子结点 叶子结点是度为0的结点即没有子结点的结点。例如:上图中3,5,6,7,9,10。 4、分支结点 分支结点是除了叶子结点,树中的其他所有结点。例如:上面树的分支结点为1,2,4,8。 5、内部结点 内部结点是除了根结点以及叶子结点或在分支结点的基础之上在去掉根结点。例如:上面树的内部结点为2,4,8。 6、父结点、子结点、兄弟结点 父节点、子结点和兄弟结点是相对而言的。例如:结点1是结点2,3,4的父节点,结点2,3,4也是结点1的子结点,结点2,3,4又是兄弟结点。 7、层次 图中我们已经表出来了,根为第一层,根的孩子为第二层,依此类推,若某结点在第i层,则其孩子结点在第i+1层。 树的遍历 1、前序遍历 基本思想:前序遍历就是先访问根结点,再访问叶子结点。 图中树的前序遍历为:1,2,5,6,7,3,4,8,9,10。 2、后序遍历   基本思想:本后序遍历就是先访问子结点,再访问根结点。 图中树的后序遍历为:5,6,7,2,3,9,10,8,4,1。 3、层次遍历 基本思想:从第一层开始,依此遍历每层,直到结束。 图中树的层次遍历为:1,2,3,4,5,6,7,8

数据结构--树--总结

回眸只為那壹抹淺笑 提交于 2020-03-13 07:24:51
数据结构——树 定义:树是一个n(n>=0)个结点的有序合集 名词理解: 结点:指树中的一个元素; 结点的度:指结点拥有的子树的个数,二叉树的度不大于2; 数的度:指树中的最大结点度数; 叶子:度为0的结点,也称为终端结点; 高度:叶子节点的高度为1,根节点高度最高; 层:根在第一层,以此类推; 二叉树的定义:由一个结点和两颗互不相交、分别称为这个根的左子树和右子树的二叉树构成(递归定义) 二叉树的性质: 1:二叉树的第i层上至多有2^(i-1)个结点 2:深度为k的二叉树,至多有2^k-1个结点 满二叉树:叶子节点一定要在最后一层,并且所有非叶子节点都存在左孩子和右孩子; 最特别的二叉树:完全二叉树:从左到右、从上到下构建的二叉树; 完全二叉树的性质: 1:结点 i 的子结点为2*i 和 2*i+1(前提是都小于总结点数) 2:结点 i 的父结点为 i/2 二叉树的遍历(要有递归的思想!!!): 1:先序遍历:根->左子树->右子树(先序) 2:中序遍历:左子树->根->右子树(中序) 3:后序遍历:左子树->右子树->根(后序) 这三种遍历方法只是访问结点的时机不同,访问结点的路径都是一样的,时间和空间复杂度皆为O(n) 二叉树的存储结构: 1:顺序存储(只适用于完全二叉树)—— 可以用于排序算法中的堆排序 2:链式存储(最普遍的存储方式)——由于结点可能为空

数据结构之常见的数据结构

爷,独闯天下 提交于 2020-03-13 07:23:01
最近做题,老是遇到一些概念性的问题(详见:牛客) 逐步总结在此博客: 1、 常用数据结构 · 数组(静态数组、动态数组)、线性表、链表( 单向链表 、双向链表、循环链表)、队列、栈、树(二叉树、查找树、平衡树、线索树、线索树、堆)、图等的定义、存储和操作 · Hash(存储地址计算,冲突处理) 2、数据存储类型就是数据的类型,如整形,字符型等,所以数组和链表是相同的,数据访问效率不同,数组可以随机访问,而链表不可以,插入删除效率也不相同. 来源: https://www.cnblogs.com/neversayno/p/5129216.html

线性数据结构之链表

泄露秘密 提交于 2020-03-13 00:42:17
什么是链表? 链表是一种线性数据结构,由不定数量的节点链接在一起,存储在不连续的内存空间中。按照节点的内部组成以及节点之后的链接形式可以分为 单向链表 、 双向链表 以及 循环链表 。 单链表 由各个节点通过一个Next引用链接在一起组成,每一个节点都存在后继节点(链尾除外),内存结构由数据域和Next 引用组成。 双向链表 由各个节点通过Next引用和 Prev引用链接在一起组成,每一个内存结构都存在前驱节点和后继节点(链头没有前驱,链尾没有后继),节点由数据域、Prev引用和 Next引用组成。 单向循环链表 由各个节点通过一个 Next引用 链接在一起组成,每一个节点都存在后继节点,节点由数据域和 Next 引用组成。 双向循环链表 由各个节点通过Next引用 和Prev引用 链接在一起组成,每一个内存结构都存在前驱节点和后继节点,节点由数据域、Prev引用和Next引用组成。 链表VS数组 底层存储结构上 数组需要一组连续的内存空间存储数据,而链表恰恰相反它并不需要连续的内存空间。 性能上 数组和链表是两种截然不同的内存组织方式。正是因为内存存储的区别,它们插入、删除、随机访问操作的时间复杂度正好相反 实现单链表 /** * 单向链表 */ public class SingleDirectLinkedList<E> { //链表大小 private int size; /

备战2020:那些 iOS开发 常用的底层面试题合集!

心不动则不痛 提交于 2020-03-12 19:06:28
一、Runtime 一个objc对象的isa的指针指向什么?有什么作用? 一个 NSObject 对象占用多少内存空间? 说一下对 class_rw_t 的理解? 说一下对 class_ro_t 的理解? 说一下对 isa 指针的理解 说一下 Runtime 的方法缓存?存储的形式、数据结构以及查找的过程? 使用runtime Associate方法关联的对象,需要在主对象dealloc的时候释放么? 实例对象的数据结构? 什么是method swizzling(俗称黑魔法) 什么时候会报unrecognized selector的异常? 如何给 Category 添加属性?关联对象以什么形式进行存储? 能否向编译后得到的类中增加实例变量?能否向运行时创建的类中添加实例变量?为什么? 类对象的数据结构? runtime如何通过selector找到对应的IMP地址? runtime如何实现weak变量的自动置nil?知道SideTable吗? objc中向一个nil对象发送消息将会发生什么? objc在向一个对象发送消息时,发生了什么? isKindOfClass 与 isMemberOfClass Category 在编译过后,是在什么时机与原有的类合并到一起的? Category 有哪些用途? Category 的实现原理? _objc_msgForward函数是做什么的

Java数据结构与算法-单链表 新浪,腾讯面试题详解

放肆的年华 提交于 2020-03-12 17:24:52
单链表常见的几个面试题 新浪,腾讯内部面试题目 题目分析 代码实现 测试用例 一,面试题目 统计链表中 有效节点 的个数(不含 头结点 )【新浪】 获取链表中倒数第 K 个元素【新浪】 单向链表的 逆转 【腾讯】 二,题目分析 第一题:我们可以获取链表的头结点后,然后进行 遍历 ,设置一个变量进行计数, 注意不要算上头结点 。 第二题:我们可以在第一题的基础上,在获取到了链表的长度后,只需要考虑倒数第K个节点是从前面开始第几个节点,我们就循环几次不就可以了?注意如果你的下标从 0 开始循环那就 size - k 就可以了,如果你是从 1 开始的那么就 size-k+1 就可以了。 第三题:我们需要创建一个新的头结点,然后把原来的那个节点从前往后依次放到新节点的后面,注意是newHeadNode.next始终等于新加入的那个元素;核心代码就是: oldNode.next = newHeadNode.next;newHeadNode.next = oldNode ;就是这样移动,最后在把新的节点后的元素指向原来头结点: oldHeadNode = newHeadNode; 图解如下: 三,代码实现 第一题 //统计出有效的节点个数,不含头结点。 public static int getLength ( HeroNode headHeroNode ) { int count = 0 ;

从excel将数据结构导入PowerDesigner

拜拜、爱过 提交于 2020-03-12 15:41:09
将数据结构按上图整理,支持同时多张表导入 打开PowerDesigner,新建模型,点击Tools|Execute Commands|Edit/Run Script菜单或按下快捷键Ctrl + Shift + X打开脚本窗口,输入示例VBScript脚本,修改其中的Excel模板路径及工作薄页签,点Run按钮执行即可。 '导入Excel表结构 '开始 Option Explicit Dim mdl ' the current model Set mdl = ActiveModel If (mdl Is Nothing) Then MsgBox "There is no Active Model" End If Dim HaveExcel Dim RQ RQ = vbYes 'MsgBox("Is Excel Installed on your machine ?", vbYesNo + vbInformation, "Confirmation") If RQ = vbYes Then HaveExcel = True ' Open & Create Excel Document Dim x1 ' Set x1 = CreateObject("Excel.Application") x1.Workbooks.Open "C:\Users\Administrator\Desktop

数据结构 树结构-二分搜索树

家住魔仙堡 提交于 2020-03-12 12:57:56
一、树结构 树是一种很特别的数据结构,树这种数据结构叫做 “树” 就是因为它 长得像一棵树 。但是这棵树画成的图长得却是一棵倒着的树,根在上,叶在下。 树是图的一种,树和图的区别就在于:树是没有环的,而图是可以有环的。 树状图是一种数据结构,它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。 二、为什么要有树结构 2.1 树结构是一种天然的组织结构 比如说电脑中的文件夹,我们需要找到一个特定的文件,需要到某个文件夹下去找这个文件,计算机的文件存储的结构来源于生活。 再比如说图书馆,我们知道图书馆里面有 历史类、数理类、计算机类 ,我们想要找到关于java的书籍,就需要到计算机类的Java中去找到我们需要的图书 比如公司里面的层级结构: CEO、HR CTO 等等,还有我们比较常见的家谱等等,都是类似于树结构 将数据使用树结构后,会更加的高效 三、二分搜索树 3.1 特点 二分搜索树是一个动态数据结构 二分搜索树也是一颗二叉树(也叫多叉树) 二分搜索树的每个节点的值都大于其左子树的所有节点的值,同时每个节点的值都小于其右子树的所有节点的值 存储的元素必须有可比较性, Java中的话就要求二分搜索树保存的数据类型要实现Comparable接口, 或者使用额外的比较器实现 每一颗子树也是二分搜索树