
java实现数据结构
文章平均质量分 74
计算机是如何存储和计算数据
用java实现数据结构
吃数据的猴子
程序人生
展开
-
数据结构与算法之贪心法(Greedy)
贪心策略◼ 贪心策略,也称为贪婪策略每一步都采取当前状态下最优的选择(局部最优解),从而希望推导出全局最优解◼ 贪心的应用哈夫曼树最小生成树算法:Prim、Kruskal最短路径算法:Dijkstra练习1 – 最优装载问题(加勒比海盗)问题描述:在北美洲东南部,有一片神秘的海域,是海盗最活跃的加勒比海有一天,海盗们截获了一艘装满各种各样古董的货船,每一件古董都价值连城,一旦打碎就失去了它的价值海盗船的载重量为 W,每件古董的重量为 Xi,海盗们该如何把尽可能多数量的古董装上海原创 2021-07-23 14:24:00 · 405 阅读 · 0 评论 -
数据结构与算法之回溯法
Back Tracking◼ 回溯可以理解为:通过选择不同的岔路口来通往目的地(找到想要的结果)每一步都选择一条路出发,能进则进,不能进则退回上一步(回溯),换一条路再试◼ 树、图的深度优先搜索(DFS)、八皇后、走迷宫都是典型的回溯应用回溯很适合使用递归四皇后问题八皇后问题◼ 八皇后问题是一个古老而著名的问题在8x8格的国际象棋上摆放八个皇后,使其不能互相攻击:任意两个皇后都不能处于同一行、同一列、同一斜线上请问有多少种摆法?解决思路思路一:暴力(这里是组合,不是排列,不原创 2021-07-23 14:22:17 · 380 阅读 · 0 评论 -
红黑树代码实现
添加添加的所有情况LL(RR)两种若新添加的元素的叔父节点不是红色的情况LR(RL)两种上溢(四种)(RR)(LR)(RL)原创 2021-07-23 14:18:16 · 323 阅读 · 1 评论 -
线性表之栈
栈的定义栈是只允许一端进行操作的线性表。push:入栈,往栈中添加元素,pop:出栈,只能移除栈顶元素这里的栈是数据结构,栈空间是个栈的空间栈的接口设计(基本操作)所以栈最常用的操作就是在栈顶,因为只有在栈顶才能添加删除。栈的顺序存储结构让动态数组变成栈类的一部分。若采用继承的方式,对外接口就多了,那栈就会调用ArrayList其他方法,比如在指定位置添加元素,这样不符合栈的特性。public class Stack <E> { private List<E>原创 2021-07-23 14:17:55 · 296 阅读 · 0 评论 -
线性表的链式表示之单项循环链表和双向循环链表
单项循环链表单项循环链表只是比单链表多了一条线,最后节点指向了第一个节点。要关注只有一个节点时添加,和头插法添加public void add(int index, E element) { rangeCheckForAdd(index); if (index == 0) { //先不改first,找到第一个节点,把他存起来 Node<E> newFirst = new Node<>(element, first); // 拿到最后一个节点, 上面先不要直原创 2021-07-23 14:17:09 · 158 阅读 · 0 评论 -
字符串的模式匹配(BF,KMP)
BF优化1:如果上面的图不匹配,那下面就不用匹配了,直接退出循环找到临界值10-4=6的位置,ti-pi是文本串正在匹配的子串的开始索引,当ti=7,pi=0时,没有比较的必要,立即退出ti – pi 是指每一轮比较中 text 首个比较字符的位置,如8-2=6,符合要求,可以比较...原创 2020-08-18 20:43:13 · 250 阅读 · 0 评论 -
数据结构+算法=程序设计
文章目录程序设计:为计算机处理问题编制的一组指令集数据结构:问题的数学模型数据数据元素(数据结构中讨论的基本单位)数据结构数据结构的形式定义 (逻辑结构): 二元组 Data_Structure(D,S)逻辑结构在计算机中的表示(存储结构)元素的映像方法:二进制存储(bit)关系的映像方法:以一个有序对程序设计:为计算机处理问题编制的一组指令集数据结构:问题的数学模型和数值计算相关的的数学模型求解的问题,如建立线性代数方程,常微分偏微分方程,就是计算数学所要研究的问题。和非数值计算相关的的数学模型求原创 2020-08-06 12:11:24 · 1910 阅读 · 0 评论 -
二叉搜索树和二叉树的代码重构
BST继承自二叉树代码二叉树import java.util.LinkedList;import java.util.Queue;@SuppressWarnings("unchecked")// 实现BinaryTreeInfo接口是为了使用打印二叉树的工具,非必须public class BinaryTree<E> implements BinaryTreeInfo { protected int size; // 元素数量 protected Node<E>原创 2020-06-14 11:52:02 · 170 阅读 · 0 评论 -
二叉搜索树(BST)
存在的需求又称二叉查找树,二叉搜索树任意一个节点的值都大于其左子树的所有节点的值任意一个节点的值都小于其右子树的所有节点的值它的左右子树也是二插搜索树使用时存的数必须具备可比性,int,double类型。若是自定义类型,需要指定比较方式,不允许为null接口设计与之前线性表而言,没有索引的概念添加元素若是第一个元素,他就是根节点先与根节点做比较,如果大于根节点,就把它作为根节点的右孩子;如果小于根节点,作为根节点的做孩子。然后再找到他的父节点...原创 2020-06-14 11:09:27 · 220 阅读 · 0 评论 -
树和二叉树的基本概念
树的定义树是n(n>=0)个节点的有限集。当n=0时,称为空树。m(m>=0)棵互不相交的树组成的集合,称为森林。树的基本术语节点的度:子树的个数树的度:所有节点度中的最大值叶子节点:度为0的节点非叶子节点:度不是0的节点节点的深度(depth):从根节点到当前节点的唯一路径上的节点总数(如下图,2的深度是2,31的深度是3)节点的高度(height):从当前节点到最远的叶子节点的路径上的节点总数(2的高度是3)树的深度:所有节点深度中的最大值树的高度:所有节点高度中的最原创 2020-06-08 15:06:20 · 4166 阅读 · 0 评论