美文网首页
数据结构与算法(六,哈希表和二叉树)

数据结构与算法(六,哈希表和二叉树)

作者: 腊鸡程序员 | 来源:发表于2019-01-26 15:13 被阅读32次

哈希表

哈希表的概念:

是通过关键码值(key value)来直接访问的数据结构,他通过将关键码值映射到表中的一个位置来访问记录,以加快查找速度.

其中关键码值(key value)也可以当做key的hash值
映射函数叫做散列函数
存放记录的数组叫做散列表

如何解决hash冲突:

  1. 装填因子:设置装填因子,如0.8,即,当删列表达到80%,就对删列表扩容,因为越接近数组最大值,发生hash冲突概率越大
  2. 采用数组加链表方式保存,相同的数组位置后面加上两边的形式保存下一个散列值,当数据量过大时,用红黑树的方式

拉链法:


image.png image.png

缺点:扩容需要消费大量的空间和性能
应用:电话号码,字典,点歌系统,QQ,微信的好友等

二叉树

二叉树概念
image.png
二叉树的创建
二叉树的遍历(中序(LDR),前序(DLR),后序(LRD))
public class BinaryTree {

    Node<String> root;
    public BinaryTree(String data){
        root=new Node<>(data,null,null);
    }
    public void createTree(){
        Node<String> nodeB=new Node<String>("B",null,null);
        Node<String> nodeC=new Node<String>("C",null,null);
        Node<String> nodeD=new Node<String>("D",null,null);
        Node<String> nodeE=new Node<String>("E",null,null);
        Node<String> nodeF=new Node<String>("F",null,null);
        Node<String> nodeG=new Node<String>("G",null,null);
        Node<String> nodeH=new Node<String>("H",null,null);
        Node<String> nodeJ=new Node<String>("J",null,null);
        Node<String> nodeI=new Node<String>("I",null,null);
        root.leftChild=nodeB;
        root.rightChild=nodeC;
        nodeB.leftChild=nodeD;
        nodeC.leftChild=nodeE;
        nodeC.rightChild=nodeF;
        nodeD.leftChild=nodeG;
        nodeD.rightChild=nodeH;
        nodeE.rightChild=nodeJ;
        nodeH.leftChild=nodeI;

    }

    /**
     * 中序遍历
     * @param root
     */
    public  void  middleSortTravel(Node root){
        if (root==null){
            return;
        }
        middleSortTravel(root.leftChild);
        System.out.println("mid "+root.e);
        middleSortTravel(root.rightChild);
    }

    /**
     * 前序遍历
     * @param root
     */
    public void preSortTravel(Node root){
        if (root==null){
            return;
        }
        System.out.println("pre "+root.e);
        preSortTravel(root.leftChild);
        preSortTravel(root.rightChild);
    }

    /**
     * 后序遍历
     * @param root
     */
    public void postSortTravel(Node root){
        if (root==null){
            return;
        }

        postSortTravel(root.leftChild);
        postSortTravel(root.rightChild);
        System.out.println("post "+root.e);
    }



    public class Node<T>{
        T e;
        Node<T> leftChild;
        Node<T> rightChild;

        public Node(T e, Node<T> leftChild, Node<T> rightChild) {
            this.e = e;
            this.leftChild = leftChild;
            this.rightChild = rightChild;
        }
    }
}

相关文章

  • leetcode和牛客网刷题

    在上学时学过《数据结构和算法》这门课,当时学习了数组、链表、哈希表、二叉树、图等数据结构,还有排序算法、二分查找、...

  • 「Redis源码解读」—数据结构(二)哈希表

    Redis的字典使用哈希表作为底层实现 知识点 1.数据结构 哈希节点 哈希表 类型处理函数 2.哈希 哈希算法 ...

  • 前端常见数据结构小结

    常见数据结构的 JavaScript 实现 栈 队列 链表 集合 字典 哈希表 二叉树 图 前端与数据结构 数据结...

  • 数据结构简要

    数据结构与算法 几种常见的数据结构 线性表(数组和链表)、栈、队列和树(二叉树) 一.线性表 1.数组 数组是...

  • MySQL索引简述--哈希索引

    哈希算法 哈希算法时间复杂度为O(1),且不只存在于索引中,每个数据库应用中都存在该数据结构。 哈希表 哈希表也为...

  • iOSer必须了解的数据结构

    数据结构 :哈希表、堆、栈、队列、链表、二叉树 操作系统(iOS)的堆、栈 算法 :排序、冒泡、快排、二分查找 数...

  • 第一章、综述

    数据结构:对计算机内存中数据的一种安排。包括:数组、链表、栈、二叉树、哈希表等。 算法:对数据结构中的数据进行各种...

  • 九、哈希表

    这一节记录一下哈希表的学习 持续更新中...数据结构与算法系列博客:一、数据结构与算法概述二、数组及LeetCod...

  • 牛皮了!2020最全MySQL索引优化架构+索引系统+数据结构选

    MySQL架构 哈希表:哈希冲突 MySQL数据结构选择 hash表的索引格式+二叉树的索引格式+红黑树的索引格式...

  • 数据结构与算法(六,哈希表和二叉树)

    哈希表 哈希表的概念: 是通过关键码值(key value)来直接访问的数据结构,他通过将关键码值映射到表中的一个...

网友评论

      本文标题:数据结构与算法(六,哈希表和二叉树)

      本文链接:https://www.haomeiwen.com/subject/ehmlkqtx.html