zoukankan      html  css  js  c++  java
  • 1.4数据结构

    1.数据:描述客观事物的符号,是计算机可操作的对象,并且能被计算机识别和处理的符号集合。

    2.数据元素:是组成数据的有一定意义的基本单位。

    3.逻辑结构

    • a.集合机构
    • b.线性结构
    • c.树形结构
    • d.图形结构

    4.物理结构

    • a.顺序存储结构
    • b.链式存储结构

    5.好的算法应该具备的特征:

    • a.正确性
    • b.可读性
    • c.健壮性
    • d.高效率
    • e.低存储

    6.一个算法的时间复杂度(就是所谓的算法步骤)

    • a.常数阶(也就是一个一个算法的复杂度不随算法规模的变化而变化),大O表示就是O(1)
    • b.线性阶(也就是一个一个算法的复杂度随算法规模的变化为线性变化),大O表示就是O(n)
    • c.对数阶(也就是一个一个算法的复杂度随算法规模的变化为对数变化),大O表示就是O(logn)
    • d.平方阶(也就是一个一个算法的复杂度随算法规模的变化为平方变化(线性阶里面嵌套了一个线性阶)),大O表示就是O(n2)

    线性结构

    • 1.线性表
      1. 线性存储结构
        • a.就是数组
      2. 链式存储结构
        • a.单链表
        • b.静态链表(用数据来描述的链表(没有仔细看,因为感觉没什么用))
        • c.循环链表
        • d.双向链表
    • 2.栈(线性表的特例(先进后出))(这里有个递归思想,其实以前自己也用得很流畅,只可意会)
        1. 线性存储结构  
          • a.就是数组(对数据进行特殊处理就能实现栈的效果(一般将数组下标为0的作为栈底)),(我们也可以2个栈共用一个数组,数组的2端分别成为2个栈的栈底,进栈的时候   都像中间靠拢,只要进栈的总元素不超过共用数组的元素个数,即2个栈不相装就可以了) 
        2. 链式存储结构
          • a.就是用链式来实现,一般是栈顶指向栈底,指针的指向,我们只要改变top指针就是实现出栈以及进栈了
       栈应用场景以及理解,逆波兰(貌似离散数学中讲过,在这里我对不起你了老是,我忘光了),这里有个笑话,比如你想流芳百世,名字必须取得朗朗上口,要不然就用国家名给你命名,哈哈,现在我们来说说这个所谓的逆波兰。
    
          逆波兰是用来解决四则运算的,因为我们常用的四则运算,计算机识别不了,就出现了后缀表达式,我们常用的四则运算被称为中缀表达式。
          那么从中缀表达式到后缀表达式的规则如下:从左到右遍历中缀表达式的每个数字和符号,若是数字就是输出,即称为后缀表达式的一部分,若是符号就判断其与栈顶符号的优先级,若是括号或者优先级低于栈顶符号的优先级,则栈顶符号依次出栈并且输出称为后缀表达式的一部分(当然如果是右括号,只出栈到左括号就可以了),并且将当前符号进栈,一直到最终输出后缀表达式为止。
    • 3.队列(线性表的特列(先进先出))
      1. 队列的线性存储结构
      2. 队列的链式存储结构
    • 4.串(就是我们常用的字符串)
      1. 串的线性存储结构(不可变字符串,String ,NSString)
      2. 串的链式存储结构(可变字符串,StringBuffer,NSMutableString)

    树形结构

      树的一些定义

    • 节点的度,和树的度,节点的度就是每个节点拥有子节点的个数就称为此节点的度。树的度就是这颗树所有节点度中的最大值就称为此树的度。
    • 树的深度,就是指这颗树的层数,层数是从上向下递增,从1开始。
    • 子节点从左到右有顺序定义的就说这颗树是有序树,否则就称这颗树是无序树。

       树的存储结构(简单的线性存储结构,和链式存储结构,显然不能满足要求)

        • 双亲表示法
          1. 这里用c来描述,用一个结构体来描述一个节点,此结构体中包含一个数据域,和双亲的指针(这里别学的太死,所谓指正,不管我用啥办法只要能指定到双亲就可以了,如果只有这2个,不能指定兄弟之间的顺序,那么我们可以在这个结构体中加上一个左兄的指针,也可以加上一个长子的指正,这样的结构体用一个数组或者链表来描述就成了一颗树,这个结构体要怎么描述,实际项目的应用,这里注意实际复杂度)
        • 孩子表示法
          1. 这里我们用线性表和链表结合,我们用一个数组将所有的节点存储起来,每个节点都只存储长子的地址,这个地址不是直接指向长子,还是指向长子的地址,一个存次子的地址,也就是线性表(数组)中存的是节点信息和长子地址的地址,这个地址的地址包含了2个地址,一个真实长子的地址和次子地址的地址(因为我们还要靠这个地址找到,次次子呢)
        • 孩子兄弟表示法
          1. 用结构体表示每个节点,结构体中包含一个数据域,2个指针域,一个放该节点的长子节点,一个放该节点的右节点。就能描述出一颗树。
    1.这里只记录一些学习笔记 2.这里只记录一些学习心得,如果心得方向有错,请留言 2.这里只记录一些日记(只为提升英语,暂时有点忙,等转行了开始写)
  • 相关阅读:
    【Python】【文件】查找指定路径中是否存在目标文件(含此路径下的子文件夹)
    时隔一年的2020noip
    nacos 笔记
    webflux 小例子
    spring Initializr 笔记
    临时~spring启动过程
    Mac通过crontab设置定时任务报错Operation not permitted
    Isolation Forest Implementation(孤立森林)
    let arr=['a'] JSON.stringify(arr) 输出:“['a']” let arr2 = “['a']” JSON.parse(arr2) 输出: ['a']
    js对象中key值加引号和不加引号的区别
  • 原文地址:https://www.cnblogs.com/liyang31tg/p/3687966.html
Copyright © 2011-2022 走看看