数据结构
书山压力大EEE
这个作者很懒,什么都没留下…
展开
-
3.最基础的动态数据结构:链表
一. 什么是链表我们以前博文中已经实现的线性数据结构:动态数组底层依托静态数组:靠resize解决固定容量问题栈队列链表和之前的数据结构不同, 它是真正的动态数据结构1.链表的特点:- 真正的动态数据结构- 最简单的动态数据结构- 可以更深入的理解引用(或指针)- 可以更深入的理解递归- 辅助组成其他数据结构2.链表的描述- 数据存储在“节点”(Node)中- 优点:真正的动态,不需要...原创 2018-06-30 15:17:28 · 303 阅读 · 0 评论 -
10.并查集
一. 什么是并查集应用1.网络中节点间的连接状态 - 网络是个抽象概念: 用户之间形成的网络2.数学中集合的实现 对于一组数据, 主要支持两个动作并:union(p,q) 查:isConnected(p,q) 接口UF.javapublic interface UF { int getSize(); boolean ...原创 2018-07-21 21:21:01 · 219 阅读 · 0 评论 -
9.Trie字典树
一. 什么是Trie字典树引出微软曾经在做通讯录的时候遇到了搜索效率低的问题(当时cpu计算能力低),被一个实习生用Trie实现了虽然字典map的数据结构结构也能实现通讯录的查询功能,但效率远没有Trie高Trie的结构以装载单词为例:每一个叶子节点 代表一个单词p线路存了pan 和 panda 两个单词, 节点的boolean isWord 判断到该节点是否可以组成一个单词。每个节...原创 2018-07-15 22:15:12 · 199 阅读 · 0 评论 -
12.红黑树
一. 红黑树与2-3树 《算法导论》中的红黑树 1. 每个节点或者是红色的, 或者是黑色的2. 根节点是黑色的3. 每一个叶子节点(最后的空节点) 是黑色的4. 如果一个节点是红色的, 那么他的孩子节点都是黑色的5. 从任意节点到叶子节点,进过的黑色节点是一样的 红黑树与2-3树的等价性 理解了2-3树和红黑树之间的关系之后, 红黑树并不难学习2-3...原创 2018-07-28 22:05:41 · 368 阅读 · 0 评论 -
11.平衡树和AVL
一.AVL树AVL树是一种平衡树, 它由: 俄罗斯的计算机科学家G. M. Adelson-Velsky 和 E. M. Landis发明,故名为AVL 1962年的论文首次提出 是最早的自平衡二分搜索树结构平衡二叉树的定义: 叶子节点间的深度相差不超过1。例子: 线段树 满二叉树 完全二叉树对于AVL,我们会适当放宽平衡二叉树...原创 2018-07-25 21:38:19 · 136 阅读 · 0 评论 -
7.堆和优先队列
一. 什么是优先队列特点: 普通队列: 先进先出;后进后出 优先队列: 出队顺序和入队顺序无关; 和优先级相关 - 最典型应用: 操作系统会动态的选择优先级最高的任务去执行 接口设计与之前的普通队列保持一致不同底层实现优先队列的时间复杂度比较二. 堆的基础表示堆使用二叉树实现堆 称为 二叉堆二叉堆是一棵完全二叉树二叉堆的性质:最大堆: 堆中某个节点的值总是不大于其父节点最小堆: 堆中某...原创 2018-07-07 21:51:12 · 153 阅读 · 0 评论 -
2.栈和队列
一.栈的基本实现Stack(E)void push(E) 推入栈E pop() 移出栈E peek() 得到栈顶元素int getSize() 栈中元素个数boolean isEmpty 栈是否为空我们的栈的实现是基于上一篇博文的动态数组的。文件结构:.├── Array.iml├── out│ └── production└── src ├── Array.java ...原创 2018-06-29 07:56:06 · 125 阅读 · 0 评论 -
8.线段树(区间树) Segment Tree
一. 什么是线段树1. 为什么要使用线段树其他例子:2018年注册的用户中消费最高的用户?消费最少的用户?学习时间最长的用户?某个太空区间天体的数量?实现的复杂度: 使用数组实现 使用线段树更新 O(n) O(logn)查询 O(n) O(logn)2. 用图展示线...原创 2018-07-10 21:34:40 · 662 阅读 · 0 评论 -
6.集合和映射
一. 集合基础和基于二分搜索树的集合实现以上接口明显的都可以用之前的二分搜索树来实现代码实现新建项目Set, 将上一篇博客完成的BST.java放入:.├── Set.iml└── src ├── BST.java ├── BSTSet.java ├── Main.java └── Set.java接口Set.javapublic interface Set&...原创 2018-07-03 19:58:35 · 426 阅读 · 0 评论 -
5.二分搜索树
一. 为什么要研究树结构树结构的本身是一种天然的组织结构将数据使用树结构存储后,出奇的高效二分搜索树(Binary Search Tree)平衡二叉树:AVL; 红黑树堆;并查集线段树;Trie(字典树, 前缀树)二. 二分搜索树基础1.二叉树2. 二分搜索树代码框架搭建新建项目BST·├── BST.iml└── src ├── BST.java └── Main.j...原创 2018-07-02 11:34:51 · 164 阅读 · 0 评论 -
1.自定义数组
一. 简单的数组举个数组的简单应用:public class Main { public static void main(String[] args) { int[] array = new int[10]; for(int i = 0; i < array.length; i++) { array[i] = i; ...原创 2018-06-27 07:03:21 · 1284 阅读 · 0 评论 -
4.链表和递归
一. Leetcode中和链表相关的问题(203号问题)删除链表中等于给定值 val 的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5解法1: 不使用虚拟头节点/** * Definition for singly-linked list. * public cl...原创 2018-07-01 07:32:40 · 108 阅读 · 0 评论 -
13.哈希表
一.哈希表基础1. LeetCode上387号问题给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。案例:s = "leetcode"返回 0.s = "loveleetcode",返回 2. 注意事项:您可以假定该字符串只包含小写字母。思路:我们用数组记录26个字符对应出现的次数, 然后按目标单词中字母顺序遍历,第一...原创 2018-07-31 21:43:37 · 275 阅读 · 0 评论