1、计算机二级公共基础知识考点公共基础知识考点数据结构与算法1、算法的概念算法是解决问题的操作方案(1)算法的基本特征1可行性:步骤可以实现;执行效果达到预期目的。2确定性:步骤明确,不准有多义性3有穷性:有限的时间完成4拥有足够的情报:算法在拥有足够的输入信息和初始化信息时, 才是有效的。(2)算法复杂度复杂度是用来衡量算法的优劣1算法的时间复杂度 :是指算法所需要的计算工作量。 与算法时特定的输入有关。算法的基本工作量是用算法所执行的基本运算次数来度量的。2算法的空间复杂度:是指这个算法所需要的内存空间。2、数据结构的基本概念1)什么是数据结构数据结构是指相互有关联的数据元素的集合, 包含俩个
2、要素: “数据”和“结(构这” 些数据元素都具有某个共同的特征) 数据结构分为:数据的逻辑结构 (反映数据的逻辑关系,即前后件关系) 数据的存储结构 (又称物理结构,是数据的逻辑结构在计算机存 储空间中的存放方式)(2)数据结构的表示二元关系表示: B=(D, R)B表示数据结构, D是数据元素的集合, R是D上关系的集合,它反应了 D中各 数据元素之间的前后件关系。数据结构的图形表示: 用中间标有元素值的方框表示数据元素, 一般称之为数据 节点。早餐午餐晚餐一日三餐数据结构的图形表示(线性结构)组织层次数据结构的图形表示(非线性结构)由前后件关系引出的 3 个基本概念根节点:数据结构中,没有
3、前件的节点 终端节点(或叶子节点) :数据结构中没有后件的节点 内部节点:数据结构中,除了根节点和终端节点以外的节点(3)线性结构与非线性结构 根据数据结构中个数据元素之间前后件关系的复杂程度, 一般将数据结构划分为 俩大类型: 线性结构与非线性结构线性结构:有且只有一个根节点 每一个根节点最多只有一个前件,也最多又一个后件非线性结构:不满足以上俩个条件的数据结构 主要是指树形结构和网状结构如果一个数据结构中没有数据元素,则称该数据结构为空的数据结构3、线性表及其顺序存储结构(1)线性表的基本概念 线性结构习惯称为线性表,线性表是最简单也是最常用的一种数据结构 线性表是 n( n 0)个数据元
4、素构成的有限序列,表中出第一个元素外的每一个 元素,有且只有一个前件,除最后一个外,有且只有一个后件。 线性表要么是空表,要么可以表示为( a1,a2,a3 an) 节点个数 n 称为线性的长度,当 n=0 时,称为空表(2)线性表的顺序存储结构 通常,线性表可以采用 顺序存储 和 链接存储 俩种存储结构 顺序存储时线性表最简单的方法: 将表中的元素一个接一个地存储在相邻的存储 区域中。这种顺序表示的线性表也称为顺序表。 顺序表具有以下俩个基本特征:线性表中所有的元素所占的存储空间是连续的; 线性表中各数据元素在存储空间中是按逻辑顺序一次存放的。链表的特征(第 5 点也有讲解) 存储单元是任意
5、的,即各数据节点的存储序号可以是连续,也可以是不连续 的。各节点在存储空间中的位置关系与逻辑关系不一致。4、栈和列队(1)栈及其基本运算栈是一种特殊的线性表, 它所有的插入与删除都限定在表的同一端进行, 允许插 入的一端为栈顶,不允许的一端为栈底。无元素时,称为空栈。栈的修改原则为是“后进先出”或“先进后出”通常用指针 top 来指示栈顶的位置,用指针 bottom 来指向栈底。栈顶指针 top 反映了栈的状态不断地变化。 在整个过程中, 栈底指针不变, 入栈和出栈操作均 有栈顶指针的变化来操作。栈结构的例子:子弹匣栈的基本运算有 3 种:入栈,退栈,读栈顶元素 栈和一般线性表的实现方法类似,
6、通常也 可以采用顺序方式和链接方式来实现。 栈支持子程序调用。(2)队列及其基本运算1队列的定义队列是指允许在一端进行插入, 而在另一端进行删除的线性表。 允许插入的一端 称为队头(或排头),允许插入运算的一端称为队尾。队列的修改原则与栈相反:“先进先出”或“后进后出”2队列的运算可以用顺序存储的线性表来表示队列 ,为了指示当前执行退队运算的队头位置, 需要一个队头指针 (排头指针) front ,为了指示当前执行入队运算的队尾指针位 置,需要一个队尾指针 rear。队头指针 front 总是指向对头元素的前一个位置, 而队尾指针 rear 总是指向队尾元素, 队尾指针 rear 和队头指针
7、front 共同反映 了队列中元素动态变化的情况。3循环列队 在实际应用中,队列的顺序存储结构一般采用循环队列的形式。所谓循环队列, 就是将队列存储空间的最后一个位置绕到第一个位置, 形成逻辑 上的环状空间,供队列循环使用。在循环队列中,用队尾指针 rear 指向队列中的队尾元素,用队头指针指向排头 元素的前一个位置。 因此,从队头指针 front 指向的后一个位置直到队尾指针 rear 指向的位置之间所有的元素均为队列中的元素。循环列队初始状态示意图队列中元素,动态变化情况需要队头指针与队尾指针共同反映。5、线性链表(1)线性链表的基本概念1线性链表 线性链表指线性表的链式存储结构,简称链表
8、。这种链表每个节点只有一个指针 域,又称为单链表。在线性单链表中,第一个元素没有前件,指向链表中的第一个节点的指针,是一 个特殊的指针,称为这个链表的头指针( HEAD)。最后一个没有后件,因此,线 性链表最后一个节点的指针域为空,用 NULI 或 0 表示。数据域指针域数据域指针域数据域指针域存储单元是任意的,即各数据节点的存储序号可以是连续,也可以是不连续的, 各节点在存储空间中的位置关系与逻辑关系不一致。 前后件关系由存储节点的指 针来表示。指向第一个数据元素的头指针 HEAD 等于 NULI 或 0 是,称为空表。双向链表:在某些应用中,对线性链表中的每个节点设置俩个指针, 一个指针域
9、 存放前件的地址,称之为左指针(Link),一个指针存放后件的地址,称为右指针 ( Rlink )这样的线性链表称为双向链表。由于为每个节点设置了俩个指针,从某一个节点出发,可以很方便地找到其他任 意一个节点。HEAD双向链表示意图2带链的栈栈也可以采用链式存储结构表示,把栈组织成一个单链表。这种数据结构可 称为带链的栈。(书 p14 )3带链的队列与栈类似,队列也可以采用链式存储结构表示。带链的队列就是用一个单链 表来表示队列,队列中的每一个元素对应链表中的一个节点。 (书 p14 ) 顺序表和链表的比较顺序表:优点: 1)可以随意存取表中的任意节点。 2)无须为表示节点 间的逻辑关系额外增
10、加存储空间;缺点:1)顺序表的插入和删除运算效率很低。 2)顺序表的存储空间不便于扩充。 3)顺序表不便于对存储空间的动态分配;链表:优点: 1)在进行插入和删除运算时,只需要改变指针即可,不需要移动元素。 2)链表的存储空间易于扩充并且方便空间的动态分配;缺点:1)需要额外的空间 (指针域) 来表示数据元素之间的逻辑 关系,存储密度比顺序表低;(2)循环链表在单链表的第一个节点前增加一个表头节点, 队头指针指向表头节点, 最后一个 指针域的值由 NULI 改为指向表头节点, 这样的链表称为循环链表。 循环链表中, 所有节点的指针构成了一个环状链。非空循环链表线性链表的基本运算:查找、插入、删
11、除6、树与二叉树(1)树的基本概念树( Tree)是一种简单的非线性结构树的示例树的相关术语 父节点(根):没有前件的节点只有一个,称为树的根节点,简称树的根。 (图中 节点 A)子节点和叶子节点: 没有后件的节点。(图中节点 D H I F G) 度:一个节点所拥有的后件个数称为该节点的度, 所有节点中最大的度称为树的 度。(图中根节点 A 和节点 E 的度为 2,树的度为 3) 深度:定义一棵树的根节点所在的层次为 1,其他节点所在的层次等于它的父节 点所在层度加 1。树的最大层次称为树的深度。 (图中树的根节点 A 在第一层, B、C 在第二层,树的深度为 4) 子树:在树中,以某节点的
12、一个子节点为根构成的树称为该节点的一棵子树。 (图 中节点 A 有俩棵子树,它们分别以 B、 C为根节点在树中,树的节点数等于树中所有节点的度之和再加 1(2)二叉树及其基本特征1二叉树的定义二叉树与树不同,但它的结构与树很相似二叉树的特点如下:二叉树可以为空,空的二叉树没有节点,非空二叉树有且只有一个根节 点;每个节点最多只有俩棵子树,即二叉树中不存在度大于 2 的节点;二叉树有左右之分,其顺序不能任意颠倒;2二叉树的性质 二叉树具有以下几个性质:性质 1:在二叉树的第 K 层上,最多有 2k-1( k 1)个节点。性质 2:深度为 m 的二叉树中,最多有 2m-1 个节点。性质 3:对任何
13、一棵二叉树,度为 0 的节点(即叶子节点)总是比度为 2 的节点多一个。性质 4:具有 n 个节点的二叉树,其深度至少为 log 2n+1 ,其中log 2n表示取 log2n 的整数部分3满二叉树和完全二叉树 满二叉树是指除最后一层外,每一层上的所有节点都有俩个子节点的二叉树。 完全二叉树是指出最后一层外, 每一层上的节点数均达最大值, 在最后一层上只 缺少右边的若干节点的二叉树。性质 5:具有 n 个节点的完全二叉树的深度为 log2n+1 。(3)二叉树的存储结构在计算机中, 二叉树通常采用链式存储结构。 用于存储二叉树中元素的存储节点 由数据域和指针域两部分构成。 由于每一个元素可以有
14、俩个后件, 所以用于存储 二叉树的存储节点有两个: 一个用于指向该节点的左子节点, 即左指针域; 另一 个用于指向该节点的右子节点,即右指针域。左指针域 数据域 右指针域L(i)Data ( i)R(i)二叉树的一个存储节点由于二叉树的存储结构中每一个存储节点有俩个指针域, 因此,二叉树的链式存 储结构也称为二叉链表。对于满二叉树与完全二叉树可以按层次进行顺序存储。(4)二叉树的遍历 二叉树的遍历是指不重复地访问二叉树中的所有节点。 在二叉树的过程中,一般先遍历左子树,再遍历右子树。 在先左后右的原则下, 根据访问根节点的次序不同, 二叉树的遍历可以分为三种:1前序遍历( DLR)首先访问根节
15、点, 然后遍历左子树, 最后遍历右子树。 并且在遍历左子树和右子树时,仍然先遍历左子树,然后访问根节点,最后遍历右子树。例如图中的二叉一棵二叉树2中序遍历( LDR)首先遍历左子树, 然后访问根节点, 最后遍历右子树。 并且在遍历左子树和右子 树时,仍然首先遍历左子树,然后访问根节点,最后遍历右子树。例如图中的二 叉树遍历结果: H D B E I A C G F.3后序遍历( LRD)首先遍历左子树, 然后遍历右子树, 最后遍历根节点 ;并且在遍历左子树和右子 树时,仍然首先遍历左子树,然后遍历右子树,最后遍历根节点。例如图中的二 叉树遍历结果: H D I E B G F C A.如果已知
16、一棵二叉树的前序遍历序列和中序遍历序列, 可以唯一确定这棵二叉树; 已知后序遍历和中序遍历也可以确定这棵二叉树; 但是如果, 已知一棵二叉树的 前序遍历和后序遍历序列,不能唯一确定这棵二叉树7、查找技术(1)顺序查找基本思想: 从线性表的第一个元素开始, 逐个将线性表中的元素与被查找元素进 行比较,如果相等,则查找成功,停止查找;若整个线性表扫描完毕,仍未找到 与被查找元素相等的元素,则表示线性表中没有要查找的元素,查找失败。最好的情况下查找的比较次数为 1 次。 最坏的情况下最后一个元素或者没有要查找的元素,比较次数为 n 次。平均情况下,需要查找 n/2 次。在以下俩种情况下,顺序查找运算
17、是唯一的选择:1线性表为 无序表 (即表中的元素是无序的)2即使线性表是有序的,如果采用 链式存储结构, 也只能用顺序查找。(2)二分法查找能用二分法查找的线性表必须满足两个条件 用 顺序存储结构 线性表是 有序 表。此处的“有序”是特指元素按非递减排序,即从小到大排列,但允许相邻元素相等。查找方法:将查找元素与中间项比较顺序查找法每一次比较,只将查找范围减少 1,而二分法查找,每比较一次,可 将查找范围减少为原来的一半, 效率大大提高。 对于长度为 n的有序线性表, 最 坏的情况下,二分查找只需要比较 log2n 次,而顺序查找需要比较 n 次8、排序技术排序是指将一个无序序列整理成按值非递
18、减顺序排列的有序序列。( 1) 交换类排序法 交换类排序法是借助数据元素的“交换”来进行排序的一种方法。 冒泡排序法 :通过两两相邻数据元素之间的比较和交换, 不断消去逆序, 直到所有数据元素有序为止。最坏情况下比较 n(n-1 ) /2 次 快速排序法 :在待排序的 n 个元素中取一个元素 K(通常取第一个元素) , 以元素 K 作为分割标准,把所有小于 K 的元素移到前面,把所有大于 K 的元素移到后面,对 K 前后哦的俩个子表重复以上过程,继续下去。 最坏情况下比较 n(n-1 ) /2 次 ,但实际效率比冒泡排序法高得多。( 2) 插入类排序法插入法是把每次将一个待排序元素, 按其元素
19、值的大小插入到前面已经排好序的 子表中的适当位置,直到元素插入完成为止。 简单插入排序:最坏情况下,需要 n( n-1 )/2 次。 希尔排序:需要比较的次数是 nr (1r2 )。( 3) 选择类排序法通过每一趟从待排序序列中选出值最小的元素, 顺序放在已排好序的有序子表的 后面,直到全部序列满足排序要求为止。 简单选择排序法最坏的情况下需比较 n(n-1 )/2 次。 推排序法将元素组成一棵二叉树最坏的情况下需比较 nlog2n 次。最坏的情况下复杂度最低的排序技术。程序设计基础1、程序设计风格程序的质量主要受到程序设计的方法、技术和风格等因素的影响。 “清晰第一 效率第二”是当今主导的程
20、序设计风格。要形成良好的程序设计风格,主要应注意和考虑下述一些因素。1源程序文档化2数据说明风格3语句的结构4输入和输出就程序设计方法的发展而言, 主要经历了结构化程序设计和面向对象的程序设计。2、结构化程序设计( 1) 结构化程序设计的原则结构化程序设计方法最重要的原则是 自顶向下、逐步求精、模块化及限制使用 goto 语句。( 2) 结构化程序设计的基本结构 使用“顺序结构”“选择结构”和“循环结3构”种基本结构就足以表达各种其他形式 结构的程序设计方法。它们的共同特征是:严格地只有一个入口和一个出口。 按结构化程序设计方法设计出的程序具有明显的优点:程序易于理解、使用、维护;提高了编程工
21、作的效率,降低了软件开发成本3、面向对象的程序设计( 1) 面向对象方法的有优点与人类习惯的思维方法一致稳定性好可重用性好容易开发大型软件产品可维护性好( 2) 面向对象方法的基本概念1对象面向对象方法中的对象由两部分组成:A:数据, 也称为属性,即对象所包含的信息,表示对象的状态B:方法, 也称为操作,即对象所能执行的功能、所能具有的行为。 对象的基本特点:标识唯一性,分类性,多态性,封装性,模块独立性好2类和实例类是具有共同属性, 共同方法的对象的集合, 是关于对象的抽象描述 ,反映属于 该对象类型的所有对象的性质。一个具体的对象则是其对应类的一个实例 (instance)。例如,“大学生
22、”是一个大学生类,它描述了所有大学生的性质,而 一 i 个具体的大学生“张三”是类“大学生”的一个实例。3消息消息传递是对象间通信的手段, 一个对象通过向另一对象发送消息来请求其服务。4继承 在面向对象程序设计中,类与类之间也可以继承,一个子类可以直接继承其 父类的全部描述(数据和操作),此外,子类还可以定义它自己的属性和操作。5多态性 在面向对象的软件技术中,多态性是指子类对象可以像父类对象那样使用, 同样的消息既可以发送给父类对象也可以发送给子类对象。软件工程基础1、软件工程的基本概念(1)软件定义与软件特点 计算机软件是由程序、 数据及相关文档构成的完整集合, 它与计算机硬件一起组 成计
23、算机系统。 其中,程序和数据是机器可执行的,文档是机器不可执行的。 软件具有以下特点:1软件是一种逻辑实体,具有抽象性2软件没有明显的制作过程3软件在使用期间不存在磨损、老化问题4对硬件和环境具有依赖性5软件复杂性高,成本昂贵6软件开发涉及诸多的社会因素(2)软件的分类 计算机软件按功能分为应用软件、系统软件、支撑软件(或软件工具) 。(3)软件工程软件工程是试图用工程、 科学和数学的原理与方法研制、 维护计算机软件有关技 术及管理方法,是应用于计算机软件的定义、开发和维护的一整套方法、工具、 文档、实践标准和工序。 软件工程包括 3 个要素:方法、工具和过程。(4)软件过程软件过程是把输入转
24、化为输出的一组彼此相关的资源和活动。 软件过程所进行的 基本活动只要有软件规格说明、 软件开发或软件设计与实现、 软件确认、 软件演 进。(5)软件生命周期 通常把软件产品从提出、实现、使用、维护、到停止使用、退役的过程称为软件 生命周期 。软件定义期1问题定义2可行性研究3需求分析 :对待开发软件提出的需求进行分析并给出详细定义。编写 软件规 格说明书及初步的用户手册 ,提交评审。软件开发期4软件设计 :通常又分为 概要设计 和详细设计 俩个阶段,给出软件的结构、模 块的划分、功能的分配以及处理流程。软件设计阶段提交评审的文档有 概要 设计说明书、详细设计说明书和测试计划初稿 。5软件实现
25、:在软件设计的基础上编写程序。该阶段完成的文档有 用户手册 、 操作手册 等面向用户的文档 、以及为下一步做准备而编写的单元测试计划。6软件测试 :在设计基础用例的基础上,检验软件的各个组成部分。编写测试 分析报告。运行维护期7运行维护 :将已交付的软件投入运行,同时不断地维护,进行必要而且可行的扩充和修改2、需求分析及其方法( 1)需求分析1需求分析相关概念需求分析的任务是发现需求、 求精、 建模和定义需求的过程。 需求分析将创建所 需的数据模型、功能模型和控制模型。需求分析阶段的工作可以分为 4 个方面:需求获取、需求分析、 编写需求规格说 明书和需求评审 。2需求规格说明书软件需求规格说
26、明书是需求分析阶段的最后结果。 软件需求规格说明书的特点:正确性;无歧义性;完整性;可验证性;一致性; 可理解性;可修改性;可追踪性。软件需求规格说明内容: 运行环境、软件的主要功能、软件的性能、数据库完整性方案。3需求分析方法 可以分为结构化分析方法和面向对象的分析方法。结构化分析方法 :面向数据流的结构化分析方法,面向数据结构的 Jackson 系统开发方法和面向数据结构的结构化数据系统开发方法。面向对象分析方法 :面向对象分析是面向对象软件工程方法的第一个环 节,包括一套概念原则、过程步骤、表示方法、提交档案等规范要求。( 3) 结构化分析方法的常用工具 结构化分析是使用数据流图、数据字
27、典、结构化英语、判定树等工具、来建立 一种新的、称为结构化规格说明的目标文件 数据流图的主要图形元素数据流 ( data flow ):沿箭头方向传送数据,一般在旁边标注数据流名加工 ( process): 又称为转换,表示数据处理存储文件 (file): 又称数据源,表示处理过程中存放各种数据的文件泥/潭( source/sink ): 数据起源的地方和数据最终的目的地3、软件设计及其方法(1)软件设计的基本概念 软件设计的基本目标是用比较抽象概括的方式确定目标系统如何完成预定的任 务,也就是说,软件是确定系统的物理模型。从工程管理角度来看可分为两步:概要设计和详细设计。 从技术观点来看,软
28、 件设计包括软件结构设计、数据设计、接口设计、过程设计 4 个步骤。 将软件按功能分解为组成模块,是概要设计的主要任务。划分模块本着提高独 立性的原则。模块的独立程度可以由两个定性标准度量:内聚性和耦合性。1耦合 衡量不同模块彼此间互相依赖的紧密程度2内聚 衡量一个模块内部各个元素彼此结合的紧密程度模块的内聚性越高,模块间的耦合性就越低。应尽量做到 高内聚,低耦合。(2)概要设计1概要设计的任务 概要设计又称总体设计,基本任务如下:设计软件系统结构。数据结构及数据库设计。编写概要设计文档。有概要设计说明书、数据库设计说明书和集成测试计 划等概要设计文档评审3结构图 在概要设计中,常用的软件结构
29、设计工具是结构图,也称程序结构图。它反映 了整个系统的功能实现以继模块与模块之间的联系。结构图基本图符及含义:模块:调用关系:信息:上面那条为数据信息,下面那条为控制信息(3)详细设计 详细设计的任务,是为软件结构图中的每一个模型确定实现算法和局部结构, 用某种选定的表达工具表示算法和数据结构的细节。 常用的设计工具有程序流程图( PFD),N-S 图、PAD 图、 HIPO 图、判定表、PDL、结构图4、软件测试(1)软件测试的目的 软件测试就是在软件投入运行之前,尽可能多地发现软件中的错误。 目的就是 发现软件中的错误 。(2) 软件测试方法 根据软件是否需要被执行,可以分为静态测试和动态
30、测试。 如果按照功能划分,可以分为白盒测试和黑盒测试。1静态测试和动态测试静态测试: 包括代码检查、静态结构分析、代码质量度量等。主要通过 人 工进行分析。动态测试: 就是通常说的上机测试, 通过运行软件来检验 软件中的动态行 为和结果是否正确。2白盒测试和黑盒测试 白盒测试:测试者完全了解程序的结构和处理过程 ,根据程序内部逻辑来 设计测试用例,检查程序中的逻辑通路是否都按预定的要求来正确地工 作。黑盒测试:测试者完全不了解 ,根据规格说明书的功能来设计测试用例。(3) 软件测试的实施主要过程有 4 个步骤:单元测试、集成测试、确认测试(验收测试)和系 统测试 。 单元测试也称模块测试,模块
31、是软件设计的最小单位, 单元测试是对模块进行正确性的检验,以期尽早发现各模块内部可能存在的各种错误。通常是在编码阶段进行,依据除了源程序以外还有详细设计说明书。2集成测试主要目的是发现与接口有关的错误 ,依据是概要说明书,通常采用黑盒测试。3确认测试检查软件的功能、性能及其他特征是否与用户的需求一致。以需求规格说明书作为依据的测试。4系统测试在实际运行环境下对计算机系统 进行一系列的集成测试和确认测试。5、程序的调试(1)程序调试基本概念调试(也称 debug ,排错) 调试是在测试发现错误之后排除错误的过程。 程序 调试任务是诊断和改正程序中的错误。(2)调试方法 调试从是否跟踪和执行程序的角度,分为静
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1