数据结构
对接触到的数据数据结构进行总结
沐风清寒
努力ing
展开
-
图及其简单创建
图定义一个二元组,G=(V,E)V:顶点的有限集E:边的关系的有限集分为无向图(边)和有向图(弧)特点图是一种网状的数据结构,结点之间的关系是任意的,即图中任何两个结点之间都可能直接相关基本术语顶点:图中的数据元素边/弧:两个顶点之间的关系完全图:有n(n-1)/2条边的无向图有向完全图:有n(n-1)条边的有向图稠密图:有很多边或弧的图稀疏图:有很少边或弧的图子图...原创 2020-04-02 16:55:28 · 266 阅读 · 0 评论 -
B+Tree及其创建过程
需要三个类来定义相关结点①BPTree(存储B树,及相关信息)class BPTree{ //最大存储关键字 public int max; //最小存储关键字 public int min; //跟结点(可能为叶子结点。也可能为索引结点) public Object root; }②IndexNode(索引结点,存储索引)class IndexNode{ ...原创 2020-03-15 23:26:28 · 7355 阅读 · 3 评论 -
B-Tree及其建立过程
B树B树在查找、访问、插入、删除操作上时间复杂度为O(log2(n))B树对大块数据读写的操作有更优的性能通常在数据库和文件系统中被使用特性(m阶)①树中每个结点至多有m个孩子②有n个孩子的非终端结点恰好包含n-1个关键字③除根和叶子结点外,其它每个结点至少有m/2(向上取整)个孩子④若根结点不是叶子结点,则至少有两个孩子⑤所有叶子结点都出现在同一层,叶子结点不包含关键字B树的...原创 2020-03-07 21:38:02 · 1957 阅读 · 0 评论 -
平衡二叉搜索树的创建
平衡二叉搜索树平衡二叉树:每个结点的左右子树高度差不超过1,左右子树均为平衡二叉树搜索二叉树:左结点 < 根结点 <右结点平衡二叉搜索树则是优化后的搜索二叉树,使得查找的效率提升,但是在添加数据时,需要进行复杂的判断,所以一般使用在查找频繁而修改很少的存储结构中。平衡二叉树的建立整个建立过程分为三大部分:①插入新的结点②判断插入结点后树是否平衡,并找到不平衡的点③若不平...原创 2020-03-03 16:07:28 · 810 阅读 · 0 评论 -
平衡二叉树的旋转
平衡二叉树的旋转在一棵平衡二叉树增加或删除结点的时候,可能会破坏原本的平衡状态,在此时需要对被破坏平衡的结点进行处理,使其恢复到平衡状态,即旋转。有四种不同的不平衡状态:LL型、RR型、LR型、RL型LL型此时的树是左孩子深度大于右孩子,即左子树较深,所以需进行右旋根据二叉搜索树的性质(左孩子<根结点<右孩子):若将a2上升到根结点,则a2的子树要归并到右子树,而a2的...原创 2020-03-03 14:25:35 · 291 阅读 · 0 评论 -
平衡二叉树及其判断
平衡二叉树出现:对于一颗二叉树的搜索,期望时间复杂度为O(lng2(n))。但是对于某些极端的树结构,如存储结构直接是一条链,这时它的时间复杂度就会退为O(n)。会大幅度的降低操作时的效率。因此,便引入了平衡二叉树。Balanced Binary Tree:是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。平衡二叉树的判断严格按照其定义进行判断:①...原创 2020-03-02 11:38:15 · 594 阅读 · 0 评论 -
Huffman树压缩和解压文件
Huffman树Huffman树:以静态三叉链的存储结构建立的二叉树Huffman树是一个带权路径长度最小的二叉树,又称最优二叉树Huffman树的构造方法①将每个结点都看作是一个树;②选择两个根结点值最小的二叉树,构造一个新的二叉树,直至剩一个树为止。Huffman树的存储(静态三叉链,n为叶子结点个数)Huffman编码前缀编码:对每一个字符规定一个0,1串作为其代码,并要...原创 2020-03-01 21:48:25 · 540 阅读 · 0 评论 -
二叉树的三种遍历(递归,栈)
二叉树的先序遍历数据访问顺序:根结点------->左孩子------->又孩子使用递归使用了分治法:将一个大树向下一层层的分为多个小子树/** * 先序遍历,使用递归,输出树中所有结点 * @param rootNode 根结点 */ public static void preOrder(TreeNode rootNode) { TreeNode mov...原创 2020-02-26 18:47:49 · 1190 阅读 · 0 评论 -
树之二叉树
二叉树二叉树是每个结点最多有两个子树的有序树。通常子树的根被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用作二叉查找树和二叉堆或是二叉排序树。满二叉树:在二叉树的第i 层上有2^(i-1)个结点, 深度为k的二叉树有2^k-1个结点的二叉树。则此二叉树称为“满二叉树”完全二叉树:深度为k的二叉树,第i (1<=i<=k-1) ...原创 2020-02-24 23:08:34 · 350 阅读 · 0 评论 -
树
树树是n(n>=0)个结点的有限集。在任意一棵非空树中:(1)有且仅有一个根结点;(2)除根结点外,其余的结点可分为m(m>=0)个互不相交的子树。树的表示方法(1)嵌套括号表示法(2)树形表示(3)文氏图(4)凹入表常用术语结点:包含一个数据元素及若干指向其子树的分支结点的度:子树个数树的度: 树中最大的结点度数叶子:树的终端结点分枝结点:有多...原创 2020-02-24 10:32:05 · 142 阅读 · 0 评论 -
数组和广义表
数组Amn数组有两种顺序存储方式:⑴行优先顺序:每一行看作一个一维数组——将数组元素按行排列。a11,a12,…,a1n,a21,a22,…a2n,……,am1,am2,…,amn⑵列优先顺序:每一列看作一个一维数组——将数组元素按列向量排列。a11,a21,…,am1,a12,a22,…am2,……,a1n,a2n,…,amn数组的操作(1)存取元素(2)修改元素值例:若按行优...原创 2020-02-23 14:47:08 · 1223 阅读 · 0 评论 -
串
串串的逻辑结构和线性表相似,不过串的数据类型是字符。在串的基本操作中,通常以一个串作为操作对象。基本概念①当且仅当两个串的长度相等并且各个对应位置上的字符都相同时,这两个串才是相等的。②一个串中任意个连续字符组成的子序列(含空串,但不含串本身)称为该串的子串。例如,“a”、“ab”、“ab”都是“abc”的子串。...原创 2020-02-20 13:08:59 · 165 阅读 · 0 评论 -
队列
队列的定义队列是限定在表的一端(队尾)进行插入,另一端(队头)进行删除的线性表。主要元素包括:写指针和读指针。队列的基本运算initqueue():初始化队列Qenqueue():元素入队列dequeue ():队头元素出队列gethead():取队头元素queueempty():判队列是否为空队列的存储结构同栈也分为两种:1)、顺序存储2)、链式存储...原创 2020-02-19 22:58:55 · 257 阅读 · 0 评论 -
完成简单的四则运算(包含小括号)(栈)
设计目标:借用栈的特性(后进后出),可将先进入的数据进行暂时存储,在得到运算符后进行运算。考虑因素:因为四则运算中既包含一级运算也包含二级运算(优先级高),所以需对这两种情况进行不同的区分,此外对于出现小括号时压栈和出栈的情况也要进行考虑。主要思路:由于栈的特性,我们可以在拿到运算符时进行对前一个运算符进行判断,借此来完成数值的运算。1)、建立两个栈结构、一个存储运算符(栈A)、一个存储数...原创 2020-02-18 21:05:12 · 700 阅读 · 0 评论 -
栈
栈的定义:所有的插入和删除操作都限制在线性表的同一端进行,是一种后进先出的线性表。表尾端称栈顶,表头端称栈底。栈的基本运算initstack():初始化栈push():元素入栈pop():栈顶元素出栈gettop();取栈顶元素stackempty():判断是否为空栈的分类由于栈是一种线性表,则可将栈分为顺序栈和链式栈①顺序栈可借助数组进行建立,在建立初边分配好了空间,所以...原创 2020-02-17 12:23:06 · 1116 阅读 · 0 评论 -
单向链表的建立和简单的增删改查
建立①定义节点public class Node{ private String name; private int age; private Node nextNode; //相应的get、set方法}②初始化(此处使用文件信息进行初始化)PS:我使用了一个私有属性来存储头节点(private Node headNode;)/** * 使用文件对链表进行初始化 ...原创 2020-02-16 12:13:03 · 194 阅读 · 0 评论 -
线性表
线性表的逻辑结构 (a1, a2, ……ai-1, ai, ai+1, …….an)n(n>=0)个元素的有限集。每个元素的类型是相同的,元素之间的位置关系是一维(线性)的。线性表的存储结构**顺序存储 **一组连续的存储单元来存储表中元素,线性表中在逻辑上相连的元素存储在连续的物理存储单元上。通过数据元素物理存储的连续性来反映数据元素在逻辑上的相邻关系 。通常使用数组来...原创 2020-02-16 11:56:00 · 96 阅读 · 0 评论