二级公共基础知识详细总结一Word格式文档下载.docx
《二级公共基础知识详细总结一Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《二级公共基础知识详细总结一Word格式文档下载.docx(17页珍藏版)》请在冰豆网上搜索。
图形结构:
数据元素之间存在着多对多的关系,图形结构也称作网状结构。
逻辑结构的主要存储方法有:
顺序存储方法:
是把逻辑上相邻的元素存储在物理位置相邻的存储单元中,由此得到的存储表示称为顺序存储结构。
顺序存储结构是一种最基本的存储表示方法,通常借助于程序设计语言中的数组来实现。
链式存储方法:
对逻辑上相邻的元素不要求其物理位置相邻,元素间的逻辑关系通过附设的指针字段来表示,由此得到的存储表示称为链式存储结构,链式存储结构通常借助于程序设计语言中的指针类型来实现。
除了通常采用的顺序存储方法和链式存储方法外,有时为了查找方便还采用索引存储方法和散列存储方法。
3.线性表
4.栈和队列***
栈的使用
(1)入栈
入栈运算是指在栈顶插入一个新元素,其基本步骤是首先将栈顶指针进一(即top加1),然后将新元素插入到栈顶指针指向的位置。
(2)退栈
退栈运算是指取出栈顶元素并赋给一个指定的变量,分两个步骤进行:
首先将栈顶元素(栈顶指针指向的元素)赋给一个指定的变量,然后将栈顶指针退一(即top减1)。
(3)读栈顶元素
读栈顶元素是指将栈顶元素赋给一个指定的变量。
需要注意的是,这个运算不删除栈顶元素,只是将它的值赋给一个变量,因此,在这个运算中,栈顶指针不会改变。
队列的使用
队列是一种只允许在一端进行插入,而在另一端进行删除的线性表,它也是一种操作受限的线性表。
在表中只允许进行插入的一端称为队尾,只允许进行删除的一端称为队头。
队列的插入操作通常称为入队或进队,而队列的删除操作则称为出队或退队。
当队列中无数据元素时,称为空队列。
根据队列的定义可知,对头元素总是最先进队列的,也总是最先出队列的;
队尾元素总是最后进队列,因而也是最后出队列。
这种表是按照先进先出的原则组织数据的,因此,队列也被称为先进先出表。
循环队列的基本运算:
用s来表示循环队列的状态,假设循环队列的初始状态为空,即:
s=0,且front=rear=m。
入队运算
入队运算是指在循环队列的队尾加入一个新元素,这个运算有两个基本操作:
首先将队尾指针进一(即rear=rear+1),并当rear=m+1时置rear=1;
然后将新元素插入到队尾指针指向的位置。
当循环队列非空(s=1)且队尾指针等于队头指针时,说明循环队列已满,不能进行入队运算,这种情况称为“上溢”。
退队运算
退队运算是指在循环队列的对头位置退出一个元素并赋给指定的变量。
这个运算有两个基本操作:
首先将对头指针进一(即front=front+1),并当front=m+1的时候置front=1;
然后将对头指针指向的元素赋给指定的变量。
5.线性单链表、双链表与循环链表
线性链表是具有链接存储结构的线性表,它用一组地址任意的存储单元存放线性表中的数据元素,逻辑上相邻的元素在物理上不要求相邻,不能随机存取。
一般用节点描述:
结点(表示数据元素)=数据域(数据元素的映像)+指针域(指示后继元素存储的位置)。
在链式存储结构中,存储数据结构的存储空间可以不连续,各数据结点的存储顺序与数据元素之间的逻辑关系可以不一致,而数据元素之间的逻辑关系是由指针域来确定的。
链式存储方式既可以用于表示线性结构,也可用于表示非线性结构。
一般来说,在线性表的链式存储结构中,各数据结点的存储符号是不连续的,并且各结点在存储空间中的位置关系与逻辑关系也不一致。
对于线性链表,可以从头指针开始,沿各节点的指针扫描到链表中的所有结点。
在线性表的连接存储中,为了方便在表头插入或者删除结点的操作,经常在表头结点(存储第一个元素的结点)的前面增加一个结点,称之为头结点或表头附加结点。
这样原来的表头指针由指向第一个元素的结点改为指向头结点,头结点的数据域为空,头结点的指针域指向第一个元素的结点。
6.树的基本概念***
二叉树是个有限元素的集合,该集合或者为空,或者由一个称为根的元素及两个不相交的,被分别称为左子树和右子树的二叉树组成。
当集合为空时,称该二叉树为空二叉树。
在二叉树中,一个元素也称作一个结点。
二叉树不同于前面介绍的树结构,但它与树结构很相似,并且,树结构的所有术语都可以用到二叉树这种数据结构上。
二叉树具有以下两个特点:
非空二叉树只有一个根结点;
每一个结点最多有两棵子树,分别称为该结点的左子树与右子树。
性质1在二叉树的第i层上,最多有2i-1(i>
=1)个结点。
性质2深度为m的二叉树最多有2m-1个结点。
深度为m的二叉树是指二叉树共有m层。
根据性质1,只要将第1层到第m层上最大结点数相加,就可以得到整个二叉树中结点数的最大值。
性质3在任意一棵二叉树中,度为0的结点(即叶子结点)总是比度为2的结点多一个。
性质4具有n个结点的二叉树,其深度至少为[log2n]+1,其中[log2n]表示取log2n的整数部分。
由以上特点可以看出,在二叉树中,每一个结点的度最大为2,即所有子树(左子树或右子树)也均为二叉树,而树结构中的每一个结点的度可以是任意的。
前序遍历是先根结点,再左子树后右子树。
中序遍历是先左子树,再根结点,最后右子树。
后序遍历是先左子树,再右子树,最后根结点。
7.顺序查找与二分查找
查找技术
顺序查找的基本方法时从线性表的第一个元素开始,依次将线性表中的元素与被查找元素进行比较,若相等则表示查找成功;
若都不相等则表示没有要找的元素,查找失败。
缺点是当线性表很大时,平均查找长度较大,效率低;
优点是对表中数据元素的存储没有要求。
二分查找首先要将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;
否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。
重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
二分查找的优点是比较次数少,查找速度快,平均性能好;
缺点是要求待查表为有序表,且插入删除困难。
因此,二分查找方法适用于不经常变动而查找频繁的有序列表。
顺序查找当查找成功时,最少比较次数为一次,在查找失败时也就是最坏情况下,需要n次比较。
二分查找当查找成功时,最少比较次数为一次,在查找失败时也就是最坏情况下,需要log2n次比较。
排序技术
简单插入排序在最坏情况下,即初始排序码开始是逆序的情况下,比较次数为n(n-1)/2,移动次数为n(n-1)/2。
假设待排序文件中的记录以各种排列出现的概率相同,可以证明其平均比较次数和平均移动次数为n2/4,因此简单插入排序算法的时间复杂度为O(n2)。
冒泡排序是一种最简单的交换排序,它是通过相邻数据元素的交换逐步将线性表变成有序。
冒泡排序是稳定的排序,其时间复杂度为O(n2),空间复杂度是O
(1)。
快速排序法也是一种互换类的排序方法,但由于它比冒泡排序法的速度快,因此称之为快速排序法。
快速排序是不稳定的排序的方法,其平均时间效率最佳,为O(nlog2n)。
最坏情况下,即每次划分只得到一个子序列,时间效率为O(n2)。
快速排序通常被认为是在同数量级(O(nlog2n))的排序方法中平均性能最好的。
但若初始序列按关键码有序或基本有序时,快速排序反而蜕化为冒泡排序。
二数据库设计基础(30%)
1.数据库的基本概念
数据库是长期存储在计算机内、有组织的、可共享的数据集合。
数据库中的数据按照一定的数据模型组织、描述和存储,具有较小的冗余度、较高的数据独立性和扩展性,可以被一定范围内的用户共享。
数据库管理系统是位于用户和操作系统之间的一层数据管理软件,用于描述、管理和维护数据库的程序系统,它是专门负责组织和处理数据库信息的程序集合,是数据库系统的核心组成部分。
数据库管理系统的主要功能如下:
(1)数据定义:
包括全局逻辑数据结构定义、局部逻辑数据结构定义、存储结构定义、保密定义以及信息格式定义等。
定义数据库是建立数据库的第一步工作,这一步的完成将为数据库建立一个框架。
(2)数据库管理功能:
包括系统控制、数据存取及更新管理、数据完整性以及安全性控制和并发控制等。
(3)数据库建立和维护功能:
包括数据库的建立、数据库的更新、数据库再组织、数据库结构维护、数据库恢复以及性能监视等。
(4)通信功能:
具备与操作系统的联机处理,从而保证系统的联机用户通过远程终端来存取数据库。
为完成数据库的基本功能,数据库管理系统一般都提供相应的数据库语言,他们通常由三部分组成:
(1)数据定义语言及其翻译程序。
主要负责数据的模型定义与数据的物理存取构件。
(2)数据操纵语言及其翻译程序。
主要负责数据的基本操作,包括查询及增加、删除、修改等操作。
(3)数据控制语言。
主要负责解释每个控制命令的含义,决定如何去执行控制命令。
数据独立性
数据独立性是数据库系统的基本特点之一,也是最基础的特征。
数据独立性是指程序与数据互不依赖,即数据的逻辑结构、存储结构与存取方式的改变不会影响应用程序。
一般分为物理独立性与逻辑独立性。
物理独立性指数据的物理结构的改变,如存储设备的变换、存取方式的改变不影响数据库的逻辑结构,从而不引起应用程序的变化。
逻辑独立性指数据库总体逻辑结构的改变,如修改数据模式、增加新的数据类型、改变数据联系等不需要相应修改应用程序。
2.数据模型***
数据模型通常由数据结构、数据操作和数据完整性约束三部分组成。
(1)数据结构:
主要描述数据的类型、内容、性质以及数据间的联系等。
数据结构是数据模型的基础,数据结构时数据模型的基础,数据操作与数据约束均建立在数据结构上。
其一般可分为两类:
一类是数据类型、内容、性质有关的对象;
一类是与数据之间联系有关的对象;
(2)数据操作:
主要描述在相应数据结构上的操作类型与操作方式。
(3)数据约束:
主要描述数据结构内数据间的语法、语义联系,他们之间的制约与依存关系,以及数据动态变化的规则,以保证数据的正确、有效与相容。
数据约束条件是完整性规则的集合。
数据模型按不同的应用层次分为三种类型,分别是概念数据模型、逻辑数据模型、物理数据模型。
概念数据模型是一种面向客观世界、面向用户的模型,它是对客观世界复杂事物的结构及他们之间的内在联系的描述,与具体的数据库管理系统无关,与具体的计算机平台也无关,例如现在比较有名的ER模型。
逻辑数据模型是一种面向数据库系统的模型,着重于在数据库系统一级的实现,例如层次模型、网状模型。
物理数据模型是一种面向计算机物理表示的模型,此模型给出了数据模型在计算机上物理结构的表示。
概念世界是现实世界在人们头脑中的反映,是对客观事物及其联系的一种抽象描述,从而产生概念模型。
概念模型是现实世界到机器世界必然经过的中间层次。
ER模型简称ER图,是被广泛使用的概念模型。
它是描述概念世界、建立概念模型的实用工具。
ER图包括三个要素:
实体;
属性;
实体间的联系。
联系归结为三种类型:
一对一;
一对多;
多对多。
必须强调指出,有时候联系也有属性,这类属性不属于任一实体只能属于练习。
关系数据模型是以关系数学理论为基础。
用二维表结构来表示实体以及实体之间联系的模型称为关系模型。
在关系模型中把数据看成是二维表中的元素,操作的对象和结果都是二维表,一张二维表就是一个关系。
关系模型与层次型、网状型的本质区别在于数据描述的一致性,模型概念单一。
在关系型数据库中,每一个关系都是一个二维表,无论实体本身还是实体间的联系均用称为关系的二维表来表示,它由表名,行和列组成。
表的每一行代表一个元组,每一列称为一个属性。
使得描述实体的数据本身能够自然地反映它们之间的练习。
而传统的层次和网状模型数据库是使用链接指针来存储和体现练习的。
关键字:
属性或属性组合,其值能够唯一的标识一个元组。
如果一个关系中的属性或属性组并非该关系的关键字,但他们是另外一个关系的关键字,则称为该关系的外关键字。
3.关系代数运算***
关系代数的运算分为两类:
(1)传统的集合运算,如并、交、差、广义笛卡尔积,这类运算将关系看成元组的集合,其运算是以关系的行为单位来进行的。
∪∩∈∨∧
并。
设关系R和关系S具有相同的结构,则关系R和关系S的并记为R∪S,由属于R或属于S的元组组成。
记作R∪S={t|t∈R∨t∈S}。
交。
设关系R和关系S具有相同的结构,则关系R和关系S的并记为R∩S,由既属于R又属于S的元组组成。
记作R∩S={t|t∈R∧t∈S}。
差。
设关系R和关系S具有相同的结构,则关系R和关系S的并记为R-S,由属于R而不属于S的元组组成。
记作R-S={t|t∈R∧t∈S}。
广义笛卡尔积。
两个分别是n元和m元的关系R和S的广义笛卡尔积R*S是一个(n*m)元组的集合。
若R有k1个元组,S有k2个元组,则R*S是一个n+m元关系,有k1*k2个元组,记为R*S。
(2)专门的关系运算,如选择、投影、连接等,这类运算表达了实用系统中应用最普遍的查询操作。
选择。
又称为限制。
它是在关系R中选择满足给定条件的诸元组。
投影。
对于关系内的域指定可引入新的运算叫投影运算。
投影运算是一个一元运算,一个关系通过投影运算后仍为一个关系R’。
R’是从R中选择出若干属性列所组成的新的关系。
连接。
是一种二元运算,通过它可以将两个关系合并为一个大关系。
它是从两个关系的笛卡尔积中选取属性间满足一定条件的元组。
除。
给定关系R(X,Y)和S(Y,Z),其中X,Y,Z为属性组。
可以有不同的属性名,但必须出自相同的域集。
R和S的除运算得到一个新的关系P(X),P是R中满足下列条件的元组在X属性列上的投影;
元组在X上分量值X的象集YX包含S在Y上投影的集合。
4.数据库设计方法和步骤***
数据库设计的基本思想是过程迭代和逐步求精。
数据库设计的根本目标是要根据用户对象的信息需求、处理需求和数据库的支持环境设计出数据模式,即解决大量数据存储问题。
目前主要分为两类方法:
一种是以处理信息需求为主,兼顾处理需求,称为面向数据的方法;
另一种是以处理需求为主,兼顾信息需求,称为面向过程的方法。
数据库设计一般采用生命周期法,即将整个数据库应用系统的开发分解成目标独立的若干阶段。
因此,我们按规范设计方法将数据库设计分为以下六个阶段:
(1)需求分析:
准确了解与分析用户需求(包括数据与处理)。
(2)概念结构设计:
对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型,可以用ER图表示。
(3)逻辑结构模型:
将概念模型结构转换为某个DBMS所支持的数据模型(如关系模型),并对其进行优化。
(4)物理结构设计:
为逻辑数据模型选取一个最适合应用环境的物理结构,包括存储结构和存取方法。
(5)数据库实施阶段:
运用DBMS提供的数据语言(SQL)及其宿主语言(C语言),根据逻辑设计和物理设计的结果建立数据库,编制与调试程序,组织数据入库,并进行试运行。
(6)数据库运行和维护:
对数据库进行评价,调整与修改。
三软件工程基础(20%)
1.软件工程基本概念
软件是计算机系统中与硬件相互依存的另一部分,是包括程序、数据及其相关文档的完整集合。
软件按照功能可以分为应用软件、系统软件和支撑软件(又称为工具软件),根据条件判断所属哪种软件。
(1)应用软件是为解决各类实际问题而设计的程序系统。
例如:
文字处理、表格处理、电子演示、电子邮件收发、绘图软件、图像处理软件等。
(2)系统软件是计算机用来管理、控制和维护计算机软、硬件资源,使其充分发挥作用,提高效率,并能使用户可以方便地使用计算机的程序集合,主要包括操作系统、数据库管理系统、网络通信管理程序和其他常用的服务程序等。
(3)支撑软件是介于上面两种软件之间,协助用户开发软件的工具性软件,例如需求分析工具软件、设计工具软件、编码工具软件、测试工具软件等。
软件的生命周期一般包括可行性研究与需求分析、设计、实现、测试、交付使用以及维护等活动。
软件工程包括三个要素:
方法、工具和过程。
方法是完成软件工程项目的技术手段;
工具支持软件的开发、管理和文档生成;
过程支持软件开发的各个环节的控制、管理。
软件工程的目标是,在给定成本、进度的前提下,开发出具有有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性且满足用户需求的产品。
软件工程基本原则包括抽象、信息隐蔽、模块化、局部化、确定性、一致性、完备性和可验证性。
2.结构化分析方法,数据流图,数据字典
结构化分析就是使用数据流图(DFD图)、数据字典、结构化英语、判定表和判定树等工具,来建立一种称为规格化说明的目标文档。
数据流图是描述数据处理过程的工具,是需求理解的逻辑模型的图形表示。
数据字典中有四种类型的条目:
数据流、数据项、数据存储和加工。
是结构化分析方法的核心。
作用是把不同的需求文档和分析模型紧密结合在一起,与各模型的图形表相配合,能清楚地表达数据处理的要求,概括地说,是对DFD中出现的被命名的图形元素的确定解释。
使用判定树时,应先从问题定义的文字描述中分清哪些是判定的条件,哪些是判定的结论,根据描述材料中的连接词找出判定条件之间的从属关系、并列关系、选择关系,根据它们构造判定树。
软件需求规格说明书是确保软件质量的有力措施,是软件开发中需求分析阶段产生的主要文档,衡量软件需求规格说明书质量好坏的标准、标准的优先及标准的内涵是:
(1)正确性。
体现待开发系统的真实要求。
(2)无歧义性。
对每一个需求只有一种解释,其陈述具有唯一性。
(3)完整性。
包括全部有意义的需求,功能的、设计的、性能的、约束的,属性或外部接口等方面的需求。
(4)可验证性。
描述的每一个需求都是可以验证的,即存在有限代价的有效过程验证确认。
(5)一致性。
各个需求的描述不矛盾。
(6)可理解性。
需求说明书必须简明易懂,尽量少包含计算机的概念和术语,以便用户和软件人员都能接受它。
(7)可修改性。
SRS的结构风格在需求有必要改变时是易于实现的。
(8)可追踪性。
每一个需求的来源、流向是清晰的,当产生和改变文件编制时,可以方便地引证每一个需求。
3.结构化设计方法***
模块独立性是模块化、抽象以及信息隐蔽概念的直接结果,它是通过制定具有单一功能的模块,使得每个模块只完成系统要求的独立的子功能。
模块独立性是通过内聚性和耦合性两个指标来衡量的。
(1)内聚性是一个模块内部包含的信息(过程或数据),对于不需要这些信息的其他模块来说是不能访问的。
内聚性是信息隐蔽和局部化概念的自然扩展,一个模块的内聚性越强该模块的独立性就越强。
(2)耦合性是模块间相互连接的紧密程度的度量。
耦合性取决于各个模块之间接口的复杂程度、调用方式以及哪些信息通过接口。
一个模块与其他模块的耦合性越强,则该模块的独立性越弱。
原则上讲,模块化设计总是希望模块之间的耦合表现为非直接耦合方式,但是,由于问题所固有的复杂性和结构化设计的原则,非直接耦合往往是不存在的。
因此,对模块进行设计时,应该尽量做到高内聚、低耦合,即减弱模块之间的耦合性和提高模块的内聚性,这样有利于提高模块的独立性。
4.软件测试的方法***
软件测试的目的就是在软件投入生成运行之前,尽可能的发现软件中的错误。
测试是对软件规格说明、设计和编码的最后复审,所以软件测试贯穿在整个软件开发期的全过程。
软件测试的方法和技术是多种多样的。
对于软件测试方法和技术,可以从不同的角度加以分类。
若从是否需要执行被测试软件的角度,可以分为静态测试和动态测试方法。
若按照功能划分可以分为白盒测试和黑盒测试方法。
(1)静态测试一般是指人工评审软件文档或程序,借以发现其中的错误,由于被评审的文档或程序不必运行,所以称为静态的。
它可以用于对各种软件文档进行测试,是软件开发中十分有效的质量控制方法之一,在软件开发过程的早起阶段,由于可运行的代码尚未产生,不可能进行动态测试,而这些阶段的中间产品的质量直接关系到软件开发的成败,因此在这些阶段,静态测试尤为重要。
静态测试包括代码检查、静态结构分析、代码质量度量等。
(2)动态测试就是通过运行软件来检验软件中的动态行为和运行结果的正确性,也就是通常所说的上机测试。
动态测试必须包括两个基本要素:
一是被测程序,而是测试数据。
运行软件并非软件测试的目的,通过运行来检验软件是否正确才是动态测试的真正目的。
因此必须对软件的运行行为和输出结果进行检查,以确定其正确性。
测试能否发现错误取决于测试用例的设计。
动态测试的设计测试用例的方法一般分为两类:
黑盒测试方法和白盒测试方法。
(3)白盒测试的基本原则是:
保证所测模块中每一独立路径至少执行一次;
保证所测模块所有判断的每一分支至少执行一次;
保证所测模块每一循环都在边界条件和一般条件下至少各执行一次;
验证所有内部数据结构的有效性。
白盒测试的主要方法有逻辑覆盖、基本路径测试等。
(4)黑盒测试主要诊断功能不对或遗漏、界面错误、数据结构或外部数据库访问错误、性能错误、初始化和终止条件错误。
黑盒法分以下几种:
等价类划分法、边界值分析法、错误推测法、因果图等,主要用于软件确认测试。
5.程序的调试***
在对程序进行成功测试之后将进行程序调试(通常称为Debug,即排错)。
程序调试的任务是诊断和改正程序中的错误。
程序调试与软件测试部同,软件测试是尽可能多的发现软件中的错误,发现错误后,程序调试借助于一定的调试工具去找出软件错误的具体位置,并改正错误。
调试步骤:
错误定位、修改代码、回归测试
软件调试可以分为静态调试和动态调试。
软件测试中讨论的静态分析方法同样适用静态调试。
静态调试主要通过人的思维来分析源程序代码来排错,是主要的调试手段,而动态调试是附注手段。
调试的方法一般有三种,分别是强行排错法、回溯法和原因排错法。
对于强行排错,这是目前使用较多、效率较低的调试方法。
回溯法是在小程序中常用的一种有效的排错方法。
一旦发现了错误,人们先分析错误征兆,确定最先发现症状的位