zoukankan      html  css  js  c++  java
  • 软考知识点整合

    来吧,下个星期软考了,来整合一下必考知识点吧。

    1.线性表:将具有“一对一”关系的数据“线性”地存储到物理空间中,这种存储结构就称为线性存储结构(简称线性表)

    线性表存储结构:可细分为顺序存储结构(简称顺序表)和链式存储结构(简称链表

    顺序表(顺序存储结构):顺序表存储数据时,会提前申请一整块足够大小的物理空间,然后将数据依次存储起来,存储时做到数据元素之间不留一丝缝隙。我们可以发现,顺序表存储数据同数组非常接近。其实,顺序表存储数据使用的就是数组。

    链表(线性存储结构),别名链式存储结构或单链表,用于存储逻辑关系为 "一对一" 的数据。与顺序表不同,链表不限制数据的物理存储状态,换句话说,使用链表存储的数据元素,其物理存储位置是随机的。

    一个完整的链表需要由以下几部分构成:

    1.头指针:一个普通的指针,它的特点是永远指向链表第一个节点的位置。很明显,头指针用于指明链表的位置,便于后期找到链表并使用表中的数据;

    2.节点:链表中的节点又细分为头节点、首元节点和其他节点:

               头节点:其实就是一个不存任何数据的空节点,通常作为链表的第一个节点。对于链表来说,头节点不是必须的,它的作用只是为了方便解决某些实际问题,不可以被删除

       首元节点:由于头节点(也就是空节点)的缘故,链表中称第一个存有数据的节点为首元节点。首元节点只是对链表中第一个存有数据节点的一个称谓,没有实际意义;

       其他节点:链表中其他的节点;

     2.树:

    1.满二叉树:除最后一层外,每一层上的所有节点都有二个子节点,满二叉树中每一层上的节点的数都达到最大,深度为m的满二叉树有2m-1个节点。

    2.完全二叉树:除最后一层外,每一层上的节点数均达到最大值;在最后一层只缺少右边若干个节点,或者左右都没有。

    3.平衡二叉树:

    4.单支二叉树:

    5:二叉排序树:

    满二叉树 和 完全二叉树 的区别:

      满二叉树必须是除最后一层的节点没有子节点之外,其他层的节点必须要有2个子节点,就是满的状态。

      完全二叉树是倒数第二层的节点,只可以没有右子节点或者左右子节点都没有,但是如果没有左子节点(有右子节点)就不是完全二叉树了。

           即:满二叉树一定是完全二叉树。但是完全二叉树不一定是满二叉树。

    满二叉树:

     但是这种就不是满二叉树了。(国外算,国内不算)

     完全二叉树:

     计算:

    二叉树算叶子节点的个数,一颗度为2的树,有0个度为1的节点,有3个度为2的节点,问叶子节点有多少个?

    那么(0*1)是度为1的节点个数 +(3*2)度为2的节点个数 = 6个。再加上一个根节点。即总数有7个,7个再减去3个度为2的节点=4个度为0的节点,即是叶子节点

     叶子节点的个数的算法公式:n0 = sum-(n1+n2+1)

    3.哈夫曼编码:

    主要目的是根据使用频率来最大化节省字符(编码)的存储空间。

    简易的理解就是,假如我有A,B,C,D,E五个字符,出现的频率(即权值)分别为5,4,3,2,1,那么我们第一步先取两个最小权值作为左右子树构造一个新树,即取1,2构成新树,其结点为1+2=3,如图:

    虚线为新生成的结点,第二步再把新生成的权值为3的结点放到剩下的集合中,所以集合变成{5,4,3,3},再根据第二步,取最小的两个权值构成新树,如图:

    再依次建立哈夫曼树,如下图:

    其中各个权值替换对应的字符即为下图:

    所以各字符对应的编码为:A->11,B->10,C->00,D->011,E->010
    霍夫曼编码是一种无前缀编码。解码时不会混淆。其主要应用在数据压缩,加密解密等场合。

    如果考虑到进一步节省存储空间,就应该将出现概率大(占比多)的字符用尽量少的0-1进行编码,也就是更靠近根(节点少),这也就是最优二叉树-哈夫曼树。

     哈夫曼编码 属于前缀编码,根据前缀编码的定义,任一字符的编码都不是另一个字符编码的前缀。

    例如:110,100,101,11,1   

    1就是属于其他字符编码的前缀。

    ================================================

    二。程序语言:

    1:程序设计语言分为:

    (1)命令式程序设计语言:

    命令式程序设计语言是基于动作的语言,以冯诺依曼计算机体系结构为背景。
     机器语言及汇编语言是最早的命令式语言。在这种语言中,计算机被看做是动作的序列,程序就是用语言提供的操作命令书写的一个操作序列。用命令式程序设计语言编写程序,就是描述解题过程中每一步的过程,程序的运行过程就是问题的求解过程,因此也称为过程式语言。Fortran、ALGOL、COBOL、C、Ada、Pascal等都是命令式程序设计语言。
    (2)函数式程序设计语言:
    函数是一种对应规则(映射),使定义域中每个元素和值域中唯一的元素相对应。函数式语言是一类以λ演算的语言,主要用于人工智能领域。代表有Lisp,ML。
    (3)面向对象程序设计语言:
    3大核心,封装,继承,多态。代表有:java,C++,C#,SmallTalk。
    (4)逻辑程序设计语言:
    以逻辑为基础的语言,适用于书写自动定理证明和其他逻辑性较强的逻辑,代表语言有Prolog。
     
    2.注释:
    (1)序言性注释:位于每个程序的开头部分,给出程序的整体说明,可以包括程序对硬件,软件资源的要求,重要变量和参数的说明,程序的作者,审查者,编程日期,修改日期,程序实现的功能描述。
    (2)功能性注释:嵌套在代码中,用于描述程序中相关语句的作用或注释后程序段要实行的功能。
     
    3.
     
  • 相关阅读:
    solr 的全量更新与增量更新
    solr 服务器的搭建
    Mysql 问题
    App 微信支付
    App 支付宝支付
    Linux 常见命令
    [备注] 钉钉使用教程
    PARAMETER和ARGUMENT的区别
    无界面浏览器
    URLs ...
  • 原文地址:https://www.cnblogs.com/takeyblogs/p/13904762.html
Copyright © 2011-2022 走看看