![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 59
菜蜗牛很菜
数据结构+算法=程序
DRY-Don't Repeat Yourself
展开
-
位运算
位运算符含义运算符示例左移<<0011=>0110右移>>0110=>0011按位或\0011\1011=>1011按位与&0011&1011=>0011按位取反~0011=>1100按位异或(相同为0不同为1)^0011&1011=>1000x^0=xx^x=0指定位置的位运算将x最右边的n位清零:x&(~0<<原创 2021-04-08 11:05:46 · 84 阅读 · 0 评论 -
堆 heap
Heap:可以迅速找到一堆数中的最大或者最小值的数据结构。将根节点最大的堆叫做大顶堆或大根堆,根节点最小的堆叫做小顶堆或小根堆。常见的堆有二叉堆、斐波那契堆假设是大根堆,常见的操作(API):操作时间复杂度find-maxO(1)delete-maxO(logN)insert(create)O(logN)orO(1)二叉堆性质通过完全二叉树来实现(注意:不是二叉搜索树)二叉堆(大顶)满足下列性质:是一棵完全树树中任意节点的值总是>=其子节点的原创 2021-04-07 12:13:18 · 121 阅读 · 0 评论 -
leetcode题
数组11. 盛最多水的容器283. 移动零70. 爬楼梯15. 三数之和链表206. 反转链表24. 两两交换链表中的节点141. 环形链表142. 环形链表 II25. K 个一组翻转链表栈20. 有效的括号155. 最小栈84. 柱状图中最大的矩形239. 滑动窗口最大值42. 接雨水队列641. 设计循环双端队列...原创 2021-04-06 16:43:41 · 161 阅读 · 0 评论 -
时间复杂度比较
分享几张时间复杂度比较的图片,方便记忆几种常见的数据结构的操作对应的时间复杂度几种常见排序的时间复杂度原创 2020-11-17 09:41:01 · 626 阅读 · 0 评论 -
基于堆的优先队列
package queue;import heap.MaxHeap;public class PriorityQueue<E extends Comparable<E>> implements Queue<E> { private MaxHeap<E> maxHeap; @Override public void enqueue(E e) { maxHeap.add(e); } @Overr原创 2020-09-12 15:21:03 · 72 阅读 · 0 评论 -
最大堆--下
package heap;import java.util.Random;public class MaxHeap<E extends Comparable<E>> { public Array<E> data; public MaxHeap(int capacity) { data = new Array<>(capacity); } public MaxHeap() { data原创 2020-09-12 15:09:14 · 92 阅读 · 0 评论 -
链表映射
package map;public class LinkedListMap<K, V> implements Map<K, V> { private class Node { public K key; public V value; public Node next; public Node(K key, V value, Node next) { this.key = key;原创 2020-09-11 20:30:50 · 168 阅读 · 0 评论 -
基于链表的集合Set
链表集合package set;import java.util.LinkedList;public class LinkedListSet<E> implements Set<E> { private LinkedList<E>list; public LinkedListSet(){ list = new LinkedList<>(); } @Override public void ad原创 2020-09-10 09:02:59 · 304 阅读 · 0 评论 -
基于二分搜索树的集合Set
不能添加重复元素package set;import tree.BST;public class BSTSet<E extends Comparable<E>>implements Set<E> { private BST<E>bst; public BSTSet(){ bst = new BST<>(); } @Override public void add(E e) {原创 2020-09-10 08:54:33 · 77 阅读 · 0 评论 -
二分搜索树删除任意节点
package tree;import java.util.*;//具有可比性的泛型public class BST<E extends Comparable> { private class Node { public E e; private Node left; private Node right; public Node(E e) { this.e = e;原创 2020-09-09 21:07:34 · 76 阅读 · 0 评论 -
二分搜索树删除最大元素最小元素
package tree;import java.util.*;//具有可比性的泛型public class BST<E extends Comparable> { private class Node { public E e; private Node left; private Node right; public Node(E e) { this.e = e;原创 2020-09-09 19:52:52 · 180 阅读 · 0 评论 -
二分搜索树-广度优先遍历
package tree;import java.util.LinkedList;import java.util.Queue;import java.util.Stack;//具有可比性的泛型public class BST<E extends Comparable> { private class Node { public E e; private Node left; private Node right;原创 2020-09-09 17:10:58 · 75 阅读 · 0 评论 -
二分搜索树-后续遍历
package tree;//具有可比性的泛型public class BST<E extends Comparable> { private class Node { public E e; private Node left; private Node right; public Node(E e) { this.e = e; left = null;原创 2020-09-09 08:33:27 · 59 阅读 · 0 评论 -
二分搜索树-中序遍历
二分搜索树的中序遍历结果是顺序的package tree;//具有可比性的泛型public class BST<E extends Comparable> { private class Node { public E e; private Node left; private Node right; public Node(E e) { this.e = e; le原创 2020-09-09 08:28:44 · 125 阅读 · 0 评论 -
二分搜索树-先序遍历
package tree;//具有可比性的泛型public class BST<E extends Comparable> { private class Node { public E e; private Node left; private Node right; public Node(E e) { this.e = e; left = null;原创 2020-09-09 08:15:18 · 179 阅读 · 0 评论 -
递归数组求和
package prac;public class Sum { public static int sum(int [] arr){ return sum(arr, 0); } public static int sum(int[]arr,int index){ if (index==arr.length) return 0; return arr[index]+sum(arr,index+1);原创 2020-09-01 11:42:41 · 300 阅读 · 0 评论 -
数组队列,循环队列,链表队列速度测试
import java.util.Random;public class QueueTest { private static double testStack(Queue<Integer> queue, int opCount) { long startTime = System.nanoTime(); Random random = new Random(); for (int i = 0; i < opCount; i++)原创 2020-08-31 21:08:33 · 177 阅读 · 0 评论 -
链表队列
import java.awt.*;public class LinkedListQueue<E> implements Queue<E> { private class Node { public E e; public Node next; public Node(E e, Node next) { this.e = e; this.next = next;原创 2020-08-31 21:01:06 · 77 阅读 · 0 评论 -
链表栈与数组栈速度测试
import java.util.Random;public class QueueTest { private static double testStack(Stack<Integer> stack, int opCount) { long startTime = System.nanoTime(); Random random = new Random(); for (int i = 0; i < opCount; i++)原创 2020-08-31 19:08:42 · 160 阅读 · 0 评论 -
链表栈
public class LinkedListStack <E>implements Stack<E>{ private LinkedList<E> list; public LinkedListStack(){ list=new LinkedList<>(); } @Override public int getSize() { return list.getSize(); }原创 2020-08-31 18:58:41 · 89 阅读 · 0 评论 -
链表的遍历,查询和修改,删除
import javax.swing.plaf.metal.MetalIconFactory;public class LinkedList<E> { //结点类 private class Node { public E e; public Node next; public Node(E e, Node next) { this.e = e; this.next = next原创 2020-08-31 16:51:03 · 207 阅读 · 0 评论 -
链表的虚拟头结点
public class LinkedList<E> { //结点类 private class Node{ public E e; public Node next; public Node(E e,Node next){ this.e=e; this.next=next; } public Node(E e){ this(e,null); }原创 2020-08-30 20:40:42 · 319 阅读 · 0 评论 -
在链表中添加元素
public class LinkedList<E> { //结点类 private class Node{ public E e; public Node next; public Node(E e,Node next){ this.e=e; this.next=next; } public Node(E e){ this(e,null); }原创 2020-08-30 20:32:04 · 2778 阅读 · 0 评论 -
循环队列与数组队列的速度测试
import java.util.Random;public class QueueTest { private static double testQueue(Queue<Integer> queue, int opCount) { long startTime = System.nanoTime(); Random random = new Random(); for (int i = 0; i < opCount; i++)原创 2020-08-30 19:43:34 · 191 阅读 · 0 评论 -
循环队列
public class LoopQueue<E> implements Queue<E> { private E[] data; private int front, tail; private int size; public LoopQueue(int capacity) { //循环队列会浪费一个空间 data = (E[]) new Object[capacity + 1]; front =原创 2020-08-30 19:23:33 · 92 阅读 · 0 评论 -
数组队列
public class ArrayQueue<E> implements Queue<E> { private Array<E>array; public ArrayQueue(int capacity){ array=new Array<>(capacity); } public ArrayQueue(){ array=new Array<>(); } @Over.原创 2020-08-29 20:55:25 · 96 阅读 · 0 评论 -
栈-括号匹配
import java.util.Stack;public class Main { public static void main(String[] args) { Solution solution = new Solution(); boolean valid = solution.isValid("(){}[]"); System.out.println(valid); }}class Solution{ public原创 2020-08-29 20:20:47 · 75 阅读 · 0 评论 -
栈
接口public interface Stack<E> { int getSize(); boolean isEmpty(); void push(E e); E pop(); E peek();}栈public class ArrayStack<E> implements Stack<E> { Array<E> array; //构造函数 public ArrayStack(int原创 2020-08-29 19:58:01 · 78 阅读 · 0 评论 -
数组(下)
动态数组//泛型数组public class Array<E>{ private E[] data; private int size;//记录元素个数 //构造函数,用户创建数组开辟的空间 public Array(int capacity) {// new 一个E类型的数组 data =(E[]) new Object[capacity]; size = 0; } //用户不传参时,默认开原创 2020-08-29 18:06:53 · 58 阅读 · 0 评论 -
数组(中)
//泛型数组public class Array<E>{ private E[] data; private int size;//记录元素个数 //构造函数,用户创建数组开辟的空间 public Array(int capacity) {// new 一个E类型的数组 data =(E[]) new Object[capacity]; size = 0; } //用户不传参时,默认开辟空间10原创 2020-08-29 17:01:48 · 108 阅读 · 1 评论 -
数组(上)
public class Main { public static void main(String[] args) {// //声明数组// int[]arr =new int[10];// for (int i = 0; i < arr.length; i++) {// arr[i]=i;// }// //声明数组并赋值// int[]scores=new int[]{原创 2020-08-29 08:44:16 · 83 阅读 · 0 评论 -
最大堆---上
普通队列:先进先出优先队列:出队顺序和入队顺序无关,和优先级相关堆二叉堆二叉堆是一棵完全二叉树(空缺的位置在右下角)堆中某个节点的值总是不大于其父节点的值(根节点数值最大)数组存储二叉堆012345678910-62413028162213191715parent(i)=i/2left child(i) = 2*iright child(i) = 2*i+10123456789624原创 2020-09-12 11:39:54 · 84 阅读 · 0 评论