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