数据结构
不问苍生
这个作者很懒,什么都没留下…
展开
-
二叉树-性质
二叉树二叉树性质1)在二叉树的第i层上最多有2i-1 个节点 。(i>=1)2)二叉树中如果深度为k,那么最多有2k-1个节点。(k>=1)3)n0=n2+1 n0表示度数为0的节点数,n2表示度数为2的节点数。4)在完全二叉树中,具有n个节点的完全二叉树的深度为[log2n]+1,其中[log2n]是向下取整。5)若对含 n 个结点的完全二叉树从上到下且从左至右进行 1 至 n 的编号,则对完全二叉树中任意一个编号为 i 的结点有如下特性:(1) 若 i=1,则该结点是二叉树的根原创 2021-06-03 17:10:25 · 1165 阅读 · 0 评论 -
深度优先算法
深度优先算法深度优先百度百科深度优先遍历图的方法是,从图中某顶点v出发:(1)访问顶点v;(2)依次从v的未被访问的邻接点出发,对图进行深度优先遍历;直至图中和v有路径相通的顶点都被访问;(3)若此时图中尚有顶点未被访问,则从一个未被访问的顶点出发,重新进行深度优先遍历,直到图中所有顶点均被访问过为止。有点不太好理解就如图所示 整个节点构成的图 是一个二维数组,当进行深度优先的时候先以黑色箭头为指向的下标节点开始搜索,先搜索 arr[0][index] 开始找到存在通路的第一个节点且该节点没有原创 2021-05-17 20:56:14 · 1904 阅读 · 0 评论 -
数据结构- 图
图 :包含了多组 从一个顶点到另一个顶点的连接数据图就需要记录对应的顶点数据,即顶点在实际应用的的数据图就需要记录每个顶点互相之间的连通数据图就需要记录总共可以走通的路的条数codenamespace DataStructure { export class MapGrap{ private edges: number[][]; // 边对应的数据 private vertexs : string[]; // 顶点数据 private n原创 2021-05-12 20:38:10 · 83 阅读 · 0 评论 -
八大排序算法(上 包含:冒泡,选择,插入,希尔,希尔插入)
(() => { // 冒泡排序 let arr = []; /** * 从数组的第0个索引开始依次从左到右比较数组中的最小值,如果右边的值比左边小,那么交换值,这样右边的值一直都是最大的值 * 从而将最大的值冒泡到数组的最后一个索引的位置 * 然后从第1...n个索引循环 使用依次从左到右比较数组中的最小值,如果右边的值比左边小,那么交换值 冒泡到第n-1...0个索引 * @param {*} size */原创 2021-01-15 18:09:37 · 119 阅读 · 0 评论 -
八皇后问题
(() => { // 8皇后的计算逻辑 // 之前想的是将棋盘用一个二维数组装入 // 然后又一个缓存了路径的数组 记录走过的路径 // 每个格子进行对比 // 没想过什么情况下一遍将棋盘走完,没想过for循环完成每一列的递归回溯 单行每列的判定 // 没想过用一个一维数组来记录走过的路径 var result = []; var max = 8; var count = 0; function queueMain() {原创 2021-01-15 11:31:42 · 101 阅读 · 0 评论 -
后缀表达式计算规则【逆波兰计算器】
后缀表达式计算规则从左到右扫描,将数字压入堆栈;遇到运算符,依次弹出数字栈中的栈顶元素和次栈顶元素,计算出来的值,再次入栈;依次循环扫描后缀表达式重复1,2规则,栈中唯一的数字就是后缀表达式的计算结果;这里主要注意下第二条,计算时 栈顶元素和次栈顶元素 在符号运算时的先后顺序将次栈顶元素放在 运算符号的 左边栈顶元素放在运算符号的右边 计算,才能得到正确的结果例如: 3 4 + 5 * 6 -首先将这个字符串解析为一个数组 并且区分 数字的多位数然后创建一个栈,将数字依次入栈,遇原创 2021-01-14 14:26:34 · 268 阅读 · 0 评论 -
中缀表达式转后缀表达式【转换步骤】
中缀表达式转后缀表达式思路步骤分析一、初始化两个栈: 运算符栈symbolStack 和 存储中间结果的栈 resultStack;二、从左到右扫描中缀表达式;三、遇到操作数时,将其压入到 resultStack中;四、遇到运算符时,比较期与symbolStack栈顶运算符的优先级;1). 如果symbolStack为空,或栈顶运算符为左括号"(",则直接将此运算符压入symbolStack栈中;2). 否则,若优先级比栈顶运算符高,也将运算符压入symbolStack栈中;3). 否则,(运原创 2021-01-14 14:11:12 · 2187 阅读 · 0 评论 -
环形链表
定义:环形链表是将 单向链表的首尾相连,可以通过头节点往下再次寻找到头节点。链表主要作用就是方便删除和增加节点使用的,在查找方面有一定的缺陷。环形链表主要用于解决约瑟夫问题约瑟夫问题:设编号为 1,2,3,…n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出列编号的序列。当然这个问题用数组也能够实现,这里仅考虑使用环形链表,打开算法思路和了解环形链表exp原创 2021-01-11 10:41:15 · 1211 阅读 · 0 评论 -
环形队列
环形队列作用可以将数组重复利用,只要队列中的元素少于 最大长度 -1 , 那么就可以一直往队列中存放数据,对于一个固定的容量,实现先进先出,并且会频繁的存入和取出,就可以节省很大的性能消耗队列中 需要队列起始的位置队列结束的位置队列容量限制队列是否为空队列是否填充满了队列的长度结算往队列添加元素从队列取出元素首先我们用的队列会将数组的最后一个元素空出来,不存放任何元素,方便计算根据图解 得出一个通用的计算容量的公式:通过移动开始索引和结束索引 完成数组的复用export原创 2021-01-07 18:04:03 · 156 阅读 · 0 评论