软考知识点整合

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

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.
 
原文地址:https://www.cnblogs.com/takeyblogs/p/13904762.html