• Javaday13(基础数据结构)


    一、基础数据结构

      数据元素相互之间的关系称为结构。

      具备关联关系的非松散集合性结构主要有三种:

        1.线性表:节点按逻辑关系依次排列形成一个“锁链”。

        2.树:具有分支,层次特性,其形态有点像自然界中的树。

        3.图:节点按逻辑关系相互缠绕,任何两个节点是一种物理连续的线性表。

      数组其实就是一种典型的线性表,而且是一种物理连续的线性表,特点:

        1.通过下标可以直接访问元素

        2.数组中每一个元素的类型必须一致

        3.数组的大小一旦确定就不能再次发生改变

      链表的出现解决了数组的一些问题:

        1.插入,删除的效率过低

        2.数组大小不可变,不能动态生成

      数组和链表的区别:

        1.链表的插入和删除效率要比数组要高

        2.链表可以动态增长或者减小

        3.数组中的内容是在内存中连续存储的,所以在查询效率上来说数组更占优。

      链表(模拟):

        

             

         

                   

                   

         

       

        

        

      栈(模拟):后进先出

          

           

        在初始化栈时:

        1.存储空间需要初始化,如果是动态的仅仅需要得到其大小和初始空间的创建

        2.栈底通常定义与于存储空间的一段,而且通常是默认值(0)

        3.令栈顶指向栈底,top=bottom;

       此时:一个空的栈就被创建完成

        

        

        

        

          

              

        

      •   在push()pop()方法中都使用了synchronized关键字
      •   这是为了使入栈与出栈操作原子化,就是说在入栈与出栈的操作过程中是不允许其它操作干扰的。有了同步的保障,栈的工作才不会出现异常

       队列(模拟):queue

          队列是“先入先出”的一种数据结构。

          同时也有两个标识符来表示队列的两端:对首(head)和对尾(end)。

          队列同时也要提供两个方法:入队(offer)和出队(poll)

          说明:head和end值初始化时一定为0,此时队列为空队列,offer入队操作后,head应该指向第一位入队的值,end指向入队的值,再次入队时,head继续指向第一个值,end指向新加入的值。

        

           

         

             

        

         

         

               

         

        Hash表也是一种复杂的数据结构:它主要作用于大量的数据中快速的定位检索到某个特定的数据,其存放的数据往往包含着两个部分:key和data,key作为存储和检索的索引,数据data存放实际的数据项。

     

      •   表中元素和关键字之间的关系由哈希函数确定,即hash(key)=位置 在构造这种特殊的“查找表”时,除了需要选择一个“好”(尽可能少产生冲突)的哈希函数之外,还需要找到一种“处理冲突”的方法 
        •   哈希函数是一个映象,即:将关键字的集合映射到某个地址集合上,它的设置很灵活,只要这个地址集合的大小不超出允许范围即可
        •   由于哈希函数是一个压缩映象,因此,在一般情况下,很容易产生“冲突”现象,即:key1≠key2,而hash(key1)=hash(key2)
        •   只能尽量减少冲突而不能完全避免冲突,这是因为通常关键字集合比较大,其元素包括所有可能的关键字,而地址集合的元素仅为哈希表中的地址值

         

    • 实际造表时,采用何种构造哈希函数的方法取决于建表的关键字集合的情况(包括关键字的范围和形态),以及哈希表长度(哈希地址范围),总的原则是使产生冲突的可能性降到尽可能地小
    • “处理冲突”的实际含义是:为产生冲突的关键字寻找下一个哈希地址,包括开放定址法、再哈希法、链地址法等,链地址法被很多语言的Hash表默认实现所选择:

     

    • 在Hash表中有一个非常重要的参数:装载因子
    • 装载因子就是hash表中已经存储的关键字个数,与可以散列位置的比值,表征着hash表中的拥挤情况,一般而言,该值越大则越容易发生冲突
    • Hash表的简单实现代码参考课堂案例 Hash表的装载因子 = 填入表中的元素个数 / Hash表的长度
      • 因为冲突的存在,其查找长度不可能达到O(1)
      • 哈希表的平均查找长度是装载因子a的函数,而不是n的函数
      • 用哈希表构造查找表时,可以选择一个适当的装载,使得平均查找长度限定在某个范围内

        

      

       树状图特点:

        1.每个节点都有0或多个子节点

        2.没有父节点的节点称为根节点

        3.每一个非根节点都有一个父节点

        4.除了根节点之外,每个子节点可以分为多个不想交的子树

        树状图之中使用频率最高的是二叉树,所谓的二叉树就是父节点上最多有两个子节点的树。

        二叉树优点:较快的查询速度,插入和删除效率高。

          

        

        

         

           

             

           

           

         

      搜索二叉树的定义是根要大于左子树所有节点,小于右子树的所有节点,其子树依旧遵循这个规律

                     

        

        

       

          

     

      

  • 相关阅读:
    《TCP/IP 详解 卷1:协议》第 10 章:用户数据报协议
    《TCP/IP 详解 卷1:协议》第 9 章:广播和本地组播(IGMP 和 MLD)
    在新的电脑上部署 Hexo,保留原有博客的方法
    当你不知道变量类型的完整定义时可以采取的操作
    python learning GUI
    python learning Network Programming.py
    python learning Process and Thread.py
    【2017级面向对象程序设计】第2次成绩排行
    python learning IO.py
    python learning Exception & Debug.py
  • 原文地址:https://www.cnblogs.com/heureuxl/p/13428234.html
Copyright © 2020-2023  润新知