数据结构record
文章平均质量分 61
玩转数据结构
lucky_xy1997
这个作者很懒,什么都没留下…
展开
-
线段树
线段树(区间树)1、基础为什么使用线段树?对于有一类问题,我们关系的是线段(区间)。如区间染色问题:有一面墙,长度为n,每次选择一段进行染色,m次操作后,可以看见多少种颜色?可以在[i,j]区间内看见多少种颜色?使用数组使用线段树染色操作(更新区间)O(n)O(logn)查询操作(查询区间)O(n)O(logn)区间查询问题:查询[i,j]区间的最大值,最小值,或者区间数字和。基于区间的统计查询。有更新和查询这个操作。区间是固定的,区间元素可能发生变化。原创 2021-02-23 20:46:45 · 119 阅读 · 0 评论 -
Trie
Trie1、Trie字典树(前缀树)字典:映射;Trie专门用来处理字符串字典:如果有n个条目,使用树结构,查询的时间复杂度是O(logn)Trie:查询每个条目的时间复杂度,和字典中一共有多少条目无关。O(w),w为查询单词的长度。每个节点有若干个指向下个节点的指针,考虑不同的语言、不同的情景,如英文有26个指针。class Node{ char c;//可以不存储 Map<char,Node> next;}-----------》class Node{原创 2021-02-23 20:44:49 · 77 阅读 · 0 评论 -
堆和优先队列
堆和优先队列优先队列:出队顺序和入队顺序无关;和优先级相关。需要定义什么是优先级。优先队列实现:PriorityQueue implement Interface Queuevoid enqueue(E)E dequeue()E getFront()int getSize()boolean isEmpty()可以使用不同的底层实现:实现结构入队出队(拿出最大元素)普通线性结构O(1)O(n)顺序线性结构O(n)O(1)堆O(logn)O(l原创 2021-02-21 21:17:17 · 102 阅读 · 0 评论 -
集合和映射
集合和映射集合1、集合元素只存在一次,进行去重操作。二分搜索树不能盛放重复元素,所以是非常好的实现“集合”的底层数据结构。void add(E),不能添加重复元素void remove(E)boolean contains(E)int getSize()boolean isEmpty()典型应用:客户统计、词汇量统计基于二分搜索树的集合的实现:public class BSTSet<E extends Comparable<E>> implements S原创 2021-02-20 19:00:55 · 326 阅读 · 0 评论 -
二分搜索树
二分搜索树1、为什么要有树结构树结构本身是一种天然的组织结构;高效二分搜索树、平衡二叉树:AVL and 红黑树 、堆、并查集、线段树、Trie2、二分搜索树基础二叉树:和链表一样,动态数据结构class Node{ E e; Node left,right;}二叉树具有唯一根节点,每个节点最多有两个孩子。二叉树具有天然递归结构:每个节点的左子树和右子树也是二叉树。二叉树不一定是“满”的,一个节点也是二叉树,空也是二叉树。二分搜索树:是二叉树且每个节点的值大于原创 2021-02-16 18:15:56 · 89 阅读 · 0 评论 -
链表和递归
链表和递归1、LeetCode—203删除链表元素不使用虚拟头结点:public class Solution203 { public ListNode removeElements(ListNode head, int val) { while(head!=null&&head.val==val) { ListNode delNode=head; head=head.next; delNode.next=null; } if(head==null)原创 2021-02-14 16:11:19 · 146 阅读 · 0 评论 -
链表:动态数据结构
链表:动态数据结构1、什么是链表动态数组、栈和队列:底层依托静态数组;靠resize解决固定容量问题链表:真正的动态数据结构。不需要处理固定容量的问题。但是丧失了随机访问的能力。更深入的理解引用(或者指针);更深入的理解递归。辅助组成其他数据结构。class Node{ E e; Node next;}public class LinkedList<E> { private class Node{ public E e; public Nod原创 2021-02-08 19:29:35 · 208 阅读 · 0 评论 -
栈和队列
栈和队列栈1、栈和栈的应用:撤销操作和系统栈基础:栈也是一种线性结构;相比数组,栈对应的操作是数组的子集;只能从栈顶添加或取出元素。; 后进先出(LIFO)。应用:Undo操作(撤销)程序调用的系统栈2、栈的实现:Stackvoid push(E)E pop()E peek()int getSize()boolean isEmpty()结合Array动态数组实现栈:ArrayStack,重写Array类中的getSize()、isEmpty等方原创 2021-02-06 17:37:23 · 129 阅读 · 0 评论 -
数组
数组一、数组基础1、数组:把数据码成一排进行存放最大的优点:快速查询数组最好应用于“索引有语义”的情况,可以方便查询或修改。但不绝对。2、二次封装数组需要实现:增、删、改、查(1)向数组添加元素向末尾添加元素public void addLast(int e) { if(size==data.length) throw new IllegalArgumentException("AddLast failed"); data[size]=e; size++;}向指原创 2021-02-01 13:04:08 · 71 阅读 · 0 评论 -
第一章
数据结构(一)关于数据结构……数据结构无处不在数据库树结构:AVL;红黑树;Treap;伸展树;B树哈希表操作系统栈、堆(优先队列)文件压缩哈夫曼树通讯录trie-前缀树常见的12中数据结构数组、栈、队列、链表、二分搜索树、堆、线段树、Trie、并查集、AVL、红黑树、哈希表...原创 2021-02-01 13:01:18 · 51 阅读 · 0 评论