如题所述
第一章 数据结构与算法 (P1—P38)
1.1 算法
1.1.1 算法的基本概念 (P1—P4)
所谓算法是指解题方案的准确完整的描述。
1. 算法的基本特征
(1)可行性(2)确定性(3)有穷性(4)拥有够的情报
2. 算法的基本要素
一个算法通常由两种基本要素组成:一是对数据对象的运算和操作,二是算法的控制结构。
(1) 算法中对数据的运算和操作 (插入、删除)
(2) 算法的控制结构
一个算法一般都可以用顺序、选择、循环三种基本控制结构组合而成。
1.1.2 算法复杂度(P4—P6)
算法的复杂度主要包括时间复杂度和空间复杂度。
1. 算法的时间复杂度
所谓算法的时间复杂度,是指执行算法所需要的计算工作量。
可以用算法在执行过程中所需基本运算的执行次数来度量算法的工作量。
3. 算法的空间复杂度
一个算法的空间复杂度,一般是指执行这个算法所需要的内存空间。
1.2数据结构的基本概念
数据结构,主要研究和讨论以下三个方面的问题:
① 数据的逻辑结构;
② 数据的存储结构;
③ 对各种数据结构进行的运算。(插入、删除)
主要目的是为了提高数据处理的效率。所谓提高数据处理的效率,主要包括两个方面:一是提高数据处理的速度,(时间复杂度)二是尽量节省在数据处理过程中所占用的计算机存储空间。(空间复杂度)
1.2.1什么是数据结构 (P6—P11)
1. 数据的逻辑结构
所谓数据的逻辑结构,是指反映数据元素之间逻辑关系的数据结构。
2. 数据的存储结构
数据的逻辑结构在计算机存储空间中的存放形式称为数据的存储结构(也称为数据的物理结构)
一种数据的逻辑结构根据需要可以表示成多种存储结构,常用的存储结构有顺序、链接、索引等存储结构。而采用不同的存储结构,其数据处理的效率是不同的。
1.2.3线性结构与非线性结构 (P12)
一般将数据分为两大类型:线性结构与非线性结构。
线性结构又称线性表
如果一个数据结构不是线性结构,则称之为非线性结构。
1.3线性表及其顺序存储结构
1.3.1线性表的基本概念 (P12—P13)
线性表是由n (n≥0)个数据元素a1,a2,…,an组成的一个有限序列,表中的每一个数据元素,除了第一个外,有且只有一个前件,除了最后一个外,有且只有一个后件。即线性表或是一个空表,或可以表示为。
(a1,a2,…,ai,…,an)
非空线性表有如下一些结构特征:
① 有且只有一个根结点a1,它无前件;
② 有且只有一个终结点an,它无后件;
③ 除根结点与终端结点外,其他所有结点有且只有一个前件,也有且只有一个后件。
1.3.2线性表的顺序存储结构 (P13—P14)
在计算机中存放线性表,一种最简单的方法是顺序存储,也称为顺序分配。
线性表的顺序存储结构具有以下两个基本特点:
① 线性表中所有元素据所占的存储空间是连续的;
② 线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。
假设线性表中的第一个数据元素的存储地址为ADR(a1),每一个数据元素占K个字节,则线性表中第i 个元素ai在计算机存储空间中的存储地址为
ADR(a1)=ADR(a1)+(i-1)K
1.3.3顺序表的插入运算 (P14—P15)
在平均情况下,要在线性表中插入一个新元素,需要移动表中一半的元素。因此,在线性表顺序存储的情况下,要插入一个新元素,其效率是很低的。
1.3.4顺序表的删除运算 (P15—P16)
在平均情况下,要在线性表中删除一个元素,需要移动表中表中一半的元素。因此,在线性表顺序存储的情况下,要删除一个元素,其效率也是很低的。
由线性表在存储结构下的插入与删除运算可以看出,线性表的顺序存储结构对于小线性表或者其中元素不常变动的线性表来说是合适的,因为顺序存储的结构比较简单。但这种顺序存储的方式对于元素经常需要变动的大线性表就不太合适了,因为插入删除的效率比较低。
1.4栈和队列
1.4.1栈及其基本运算 (P16—P18)
1.什么是栈
栈是限定在一端进行插入与删除的另一端称为栈底。即栈是按照“先进后出”(FILO)或“后进先出”(LIFO)的原则组织数据的,因此,栈也被称为“先进后出”表或“后进先出”表。由此可以看出,栈具有记忆作用。
2.栈的顺序存储及其运算(采用顺序存储结构的栈称为顺序栈)
栈的基本运算有三种:入栈、退栈与读栈顶元素。
(1) 入栈运算(2)退栈运算(3)读栈顶元素
1.4.2队列及其基本运算 (P18—P20)
1.什么是队列
队列(queue)是指允许在一端进行插入、而在另一端进行删除的线性表。允许插入的一端称为队尾,通常用一个称为尾指针(rear)的指针指向队尾元素,一端称为排头(也称为队头)通常也用一个排头指针(front)指向排头元素的前一个位置。
队列双称为“先进先出”或“后进后出”的线性表。
3. 循环队列及其运算
在实际应用中,队列的顺序存储结构一般采用循环队列的形式。
所谓循环队列,就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,供队列循环使用。
(1) 入队运算
(2) 退队运算
1.5线性链表
1.5.1线性链表的基本概念 (P20—P23)
由于线性表的顺序存储结构存在以上这些缺点,对于大的线性表,特别是元素变动频繁的大线性表不宜采用顺序存储结构,而是采用下面要介绍的链式存储结构。
在链式存储方式中,要求每个结点由两部分组成:一部分用于存放数据元素值,称为数据域;另一部分用于存放指针,称为指针域。
在链式存储结构中,存储数据结构的存储空间可以下连续,各数据结点的存储顺序与数据元素之间的逻辑关系可以不一致,而数据元素之间的逻辑关系是由指针域来确定的。
链式存储方式既可用于表示线性结构,也可以用于表示非线性结构。
1. 线性链表
线性表的链式存储结构称为线性链表。
2. 带链的栈
栈也是线性表,也可以采用链式存储结构。
3. 带链的队列
与栈类似,队列也是线性表,也可以采用链式存储结构。
1.5.2线性链表的基本运算 (P23—P25)
线性链表在插入过程中不发生数据元素移动的现象,只需改变有关结点的指针即可,从而提高了插入的效率。
从线性链表的删除过程可以看出,在线性链表中删除一个元素后,不需要移动表的数据元素,只需改变被删除元素所在结点的前一个结点的指针域即可。
1.5.3循环链表及其基本运算 (P25—P26)
循环链表具有以下两个特点:
(1) 在循环链表中增加了一个表头结点,指针域指向线性表的第一个元素的结点。循环链表的头指针指向表头结点。
(2) 循环链表中最后一个结点的指针域不是空,而是指向表头结点。即在循环链表中,所有结点的指针构成了一个环状链。
1. 6树与二叉树
1.6.1树的基本概念 (P26—P28)
在树结构中,每一个结点只有一个前件,称为父结点,没有前件的结点只有一个,称为树的根结点,简称为树的根。
在树结构中,每一个结点可以有多个后件,它们都称为该结点的子结点。没有后件的结点称为叶子结点。
在树结构中,一个结点所拥有的后件个数称为该结点的度
在树中,所有结点中的最大的度称为树的度。
根结点在第1层。
树的最大层次称为树的深度。
1.6.2二叉树及其基本性质 (P28—P31)
1. 什么是二叉树
二叉树具有以下两个特点:
① 非空二叉树只有一个根结点;
② 每一个结点最多有两棵子树,且分别称为该结点的左子树与右子树。
2. 二叉树的基本性质
性质1在二叉树的第K层上,最多有2K-1(K≥1)个结点。
性质2深度为m的二叉树最多有2m-1个结点。
性质3在任意一棵二叉树中,度为0的结点(即叶子结点)总是比度为2的结点多一个。
3. 满二叉树与完全二叉树
(1)满二叉树
所谓满二叉树是指这样的一种二叉树:除最后一层外,每一层上的所有结点都有两个子结点,这就是说,在满二叉树中,每一层上的结点数都达到最大值,即在满二叉树的第K层上有2K-1个结点,且深度为m的满二叉树有2m-1个结点。
(2)完全二叉树
所谓完全二叉树是指这样的二叉树:除最后一层外,每一层上的结点数均达到最大值;在最后一层上只缺少右边若干结点。
满二叉树也是完全二叉树,而完全二叉树一般不是满二叉树。
性质6设完全二叉树共有n个结点。从根结点开始,按层序用自然数1,2,…,n给结点进行编号,则对于编号为k(k=1,2,…,n)的结点有以下结论:
① 若k=1,则该结点为根结点,它没有父结点;若k>1,则该结点的父结点编号为INT(k/2)。
② 若2k≤n,则编号为k的结点的左子结点编号为2k;否则该结点无左子结点。
③ 若2k+1≤n,则编号为k的结点的右子结点编号为2k+1;否则该结点无右子结点。
1.6.3二叉树的存储结构 (P31—P32)
在计算机中,二叉树通常采用链式存储结构。
1.6.4二叉树的遍历 (P32—P33)
二叉树的遍历可以分为三种:前序遍历、中序遍历、后序遍历。
1. 前序遍历(DLR)
2. 中序遍历(LDR)
3. 后序遍历(LRD)
1.7查找技术
1.7.1顺序查找 (P33)
顺序查找又称顺序搜索。
对于大的线性表来说,顺序查找的效率是很低的。虽然顺序查找的效率不高,但在下列两种情况下也只能采用顺序查找:
(1) 线性表无序表,则不管是顺序存储结构还是链式存储结构,都只能用顺序查找。
(2) 即使是有序线性表,如果采用链式存储结构,也只能用顺序查找。
1.7.2二分法查找 (P33—P34)
二分法查找只适用于顺序存储的有序表。
显然,当有序线性表为顺序存储时都能采用二分查找,并且,二分查找的效率要比顺序查找高得多。可以证明,对于长度为n的有序线性表,在最坏情况下,二分查找只需要比较log2n次,而顺序查找需要比较n次。
1.8排充技术
1.8.1交换类排序法 (P34—P35)
1. 冒泡排序法
冒泡排序法是一种最简单的交换类排序方法。
假设线性表的长度为n,则在最坏情况下,冒泡排序需要的比较次数为n(n-1)/2。
2. 快速排序法
快速排序法也是一种互换类的排序方法,但由于它比冒泡排序法的速度快,因此称之为快速排序法。
1.8.2插入类排序法 (P35—P37)
1. 简单插入排序法
自以为插入排序,是指将无序序列中的各元素依次插入到已经有序的线性表中。
在简单插入排序法中,这种排序方法的效率与冒泡排序法相同。在最坏情况下,证券交易插入排序需要n(n-1)/2次比较。
2. 希尔排序法
希尔排序法属于插入类排序,但它对简单插入排序做了较大的改进。
1.8.3选择类排序法 (P37—P38)
1. 简单选择排序法
从中选出最小的元素,将它交换到表的最前面。
简单选择排序法在最坏情况下需要比较n(n-2)/2次。
2. 堆排序法
堆排序法属于选择类的排序方法。
堆排序的方法对于规模较小的线性表并不合适,但对于较大规模的来说是很有效的。
分享到搜狐微博
第2章 程序设计基础 (P40—P45)
2.1程序设计方法与风格
程序设计的风格总体而言应该强调简单和清晰,程序必须是可以理解的。可以认为,著名的“清晰第一,效率第二”的论点已成为当今主导的程序设计风格。
源程序文档化应考虑如下几点:
(1) 符号名的命名:符号名的命名应具有一定的实际含义,以便于对程序功能的理解。
(2) 程序注释:正确的注释能够帮助读者理解程序。注释一般分为序言性注释和功能性注释。
(3) 视觉组织:为使程序的结构一目了然,可以在程序中利用空格、空行、缩进等技巧使程序层次清晰。
2.2结构化程序设计
2.2.1结构化程序设计的原则 (P41—P42)
结构化程序设计方法的主要原则可以概括为自顶向下,逐步求精,模块化,限制使用goto语句。
2.2.2结构化程序的基本结构与特点 (P42—P43)
1. 顺序结构
2. 选择结构:选择结构又称为分支结构。
3. 重复结构:重复结构又称为循环结构。
2.3面向对象的程序设计
今天面向对象方法已经发展成为主流的软件开发方法。
一些著名的面向对象语言(如C++、Java)
2.3.2面向对象方法的基本概念 (P45—P48)
1. 对象
对象是面向对象方法中最基本的概念。对象可以用来表示客观世界中的任何实体。
面向对象的程序设计方法中涉及的对象由一组表示其静态特征的属性和它可执行的一组操作组成。
(4) 封装性。
2. 类(Class)和实例(Instance)
将属性、操作相似的对象归为类,也就是说,类是具有共同属性、共同方法方法的对象的集合。所以,类是对象的抽象,而一个对象则是其对应类的一个实例。
3. 消息
对象间的这种相互合作需要一个机制协助进行,这样的机制称为“消息”。消息是一个实例与另一个实例之间传递的信息。
4. 继承
继承是面向对象的方法的一个主要特征。
第3 章 软件工程基础
3.1软件工程基本概念
3.1.1软件定义与软件特点 (P50)
计算机软件是包括程序、数据及相关文档的完整集合。
可见软件由两部分组成:一是机器可执行和程序和数据;二是机器不可执行的,与软件开发、运行、维护、使用等有关的文档。
软件的特点:
① 软件是一种逻辑实体,而不是物理实体,具有抽象性。
② 软件的生产与硬件不同,它没有明显的制作过程。
③ 软件在运行、使用期间不存在磨损、老化问题。
④ 软件的开发、运行对计算机系统具有依赖性,受计算机系统的限制,这导致了软件移植的问题。
⑤ 软件复杂性高,成本昂贵。
⑥ 软件开发涉及诸多的社会因素。
3.1.2软件危机与软件工程 (P51—P52)
软件工程概念的出现源自软件危机。
20世纪60年代末以后,“软件危机”。所谓软件危机是泛指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
1968年在北大西洋公约组织会议(NATO会议)上,讨论摆脱软件危机的办法,软件工程作为一个概念首次被提出。
软件工程包括个要素,即方法、工具和过程。
3.1.3软件工程过程与软件生命周期 (P52—P53)
2.软件生命周期
通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为软件生命周期。
3.1.4软件工程的目标与原则(P53—P54)
1. 软件工程的目标
软件工程内容主要包括:软件开发技术和软件工程管理。
3.1.5软件开发工具与软件开发环境 (P54)
1. 软件开发工具 (VB、VC++、VFP)
2. 软件开发环境
软件开发环境或称软件工程环境是全面支持软件开发全过程的软件工具集合。
计算机辅助软件工程(CASE)
3.2结构化分析方法
3.2.1需求分析与需求分析方法 (P53—P59)
1. 需求分析
(1) 需求分析阶段的工作
需求分析阶段的工作,可以概括为四个方面:
① 需求获取
② 需求分析
③ 编写需求规格说明书
④ 需求评审
2. 需求分析方法
常见的需求分析方法有:
① 结构化分析方法。主要包括:面向数据流的结构化分析方法(SA)面向数据结构的Jackson方法(JSD)面向数据结构的结构化数据系统开发方法(DSSD)
② 面向对象的分析方法(OOA)
3.2.2结构化分析方法 (P55—P59)
2.结构化分析的常用工具
(1) 数据流图(DFD)
(2) 数据字典(DD)
数据字典是结构化分析方法的核心。
(3) 判定树
(4) 判定表
3.2.3软件需求规格说明书 (P59—P60)
软件规格说明书(SRS)是需求分析阶段的最后成果,是软件开发中的重要文档。
软件需求规格说明书的作用是:
① 便于用户、开发人员进行理解和交流。
② 反映出用户问题的结构,可以作为软件开发工作的基础和依据
③ 作为确认测试和验收的依据。
3.3结构化设计方法
3.3.1软件设计基本概念 (P60—P62)
1.软件设计的基础
软件设计分两步完成:概要设计和详细设计。
2.软件设计的基本原理
(1) 抽象
(2) 模块化
(3) 信息隐蔽
(4) 模块独立性
模块独立程度是评价设计好坏的重要度量标准。衡量软件的模块独立软件的模块独立性使用耦合性和内聚性两个定性的度量标准。
① 内聚性:内聚性是一个模块内部各个元素间彼此结合的紧密程度的度量。
② 耦合性:耦合性是模块间互相连接的紧密程度的度量。
耦合性与内聚性是模块独立性的两个定性标准,耦合与内聚是相互关联的。在程序结构中,各模块的内聚性越强,则耦合性越弱。一般较优秀的软件设计,应尽量做到高内聚,低耦合。
3.3.3详细设计 (P67—P71)
几种主要的工具:
1. 程序流程图(PFD)
2. N-S (盒图)
3. PAD图 PAD图是问题分析图(Problem Analysis Diagram)的英文缩写。
4. PDL
过程设计语言(PDL)也称为结构化的英语和伪码。
3.4软件测试
软件测试的投入,通常其工作量、成本占软件开发总工作量、总成本的40%以上。
软件测试是保证软件质量的重要手段,其主要过程涵盖了整个软件生命期的过程。
3.4.1软件测试的目的 (P71)
关于软件测试的目的,软件测试是为了发现错误而执行程序的过程。
3.4.3软件测试技术与方法综述(P71—P77)
可以分为静态测试和动态测试方法。若按照功能划分可以分为白盒测试和黑盒测试方法。
1. 静态测试与动态测试
(1) 静态测试
静态测试可以由人工进行,充分发挥人的逻辑思维优势。
(2) 动态测试
静态测试不实际运行软件,主要通过人工进行。动态测试是基于计算机的测试,是为了发现错误而执行程序的过程。
2. 白盒测试
白盒测试方法也称结构测试或逻辑驱动测试。
3. 黑盒测试方法
黑盒测试方法也称功能测试或数据驱动测试。黑盒测试是对软件已经实现的功能是否满足需求进行测试和验证。黑盒测试完全不考虑程序内部和逻辑结构和内部特性。
3.4.4软件测试的实施(P77—P80)
软件测试是保证软件质量的重要手段。
软件测试过程一般按4个步骤进行,
1. 单元测试
单元测试是对软件设计的最小单位——模块(程序单元)进行正确性检验的测试。
2. 集成测试
集成测试是测试和组装软件的过程。
3. 确认测试
4. 系统测试
3.5程序的调试
3.5.1基本概念 (P80—P81)
程序调试的任务是诊断和改正程序中的错误。它与软件测试不同,软件测试是尽可能多地发现软件中的错误。
软件测试贯穿整个软件生命期,调试主要在开发阶段。
3.5.2软件调试方法 (P81—P82)
1. 强行排错法
2. 回溯法
3. 原因排除法
第4章 数据库设计基础 (P84—P111)
4.1数据库系统的基本概念
4.1.1数据、数据库、数据库管理系统 (P84—P87)
1. 数据
数据(Data)实际上就是描述事物的符号记录。
2. 数据库
数据库(简称DB)是数据的集合。
3. 数据库管理系统
数据库管理系统(简称DBMS)它是一种软件。
数据库管理系统是数据库系统的核心。
目前流行的DBMS均为关系数据库系统,如微软的Visual FoxPro和Access等。
4. 数据库管理员(简称DBA)
5. 数据库系统
数据库系统(简称DBS)由如下几部分组成:数据库(数据)、数据库管理系统(软件)、数据库管理员(人员)、系统平台之一____硬件平台(硬件)、系统平台之二——软件平台(软件)这五个部分构成了一个以数据库为核心的完整的运行实体,称为数据库系统。
4.1.2数据库系统的发展 (P87—P88)
数据管理发展至今已经历了三个阶段:人工管理阶段、文件系统阶段和数据库系统阶段。
1. 关系数据库系统阶段
数据管理三个阶段的比较
人工管理 文件系统 数据库系统
特点 数据共享程度 无共享
冗余度大 共享性差
冗余度大 共享性大
冗余度小
数据独立性 不独立,完全依赖于程序 独立性差 具有高度的物理独立性和一定的逻辑独立性
4.1.3数据库系统的基本特点 (P88—P890
数据库系统具有以下特点:
1. 数据的集成性
2. 数据的高共享性与低冗余性
3. 数据独立性
数据独立性是数据与程序间的互不依赖性,数据独立性一般分为物理独立性与逻辑独立性两级。
(1) 物理独立性:物理独立性即是数据的物理结构的改变,从而不致引起应用程序的变化。
(2) 逻辑独立性:数据库总体逻辑结构的改变,不需要相应修改应用程序,这就是数据 的逻辑独立性。
4. 数据统一管理与控制
4.1.4数据库系统的内部结构体系 (P89—P91)
1. 数据库系统的三级模式
(1) 概念模式。概念模式是数据库系统中全局数据逻辑结构的描述,是全体用户(应用)公共数据视图。
(2) 外模式。外模式也称子模式或用户模式。它是用户的数据视图。
(3) 内模式。内模式又称物理模式,它给出了数据库物理存储结构与物理存取方法。
2. 数据库系统的两级映射
(1) 概念模式到内模式的映射。
(2) 外模式到概念模式的映射。
4.2数据模型
4.2.1数据模型的基本概念 (P91)
数据模型按不同的应用层次分成三种类型,它们是概念数据模型、逻辑模型、物理数据模型,
概念模型有E-R模型、逻辑数据模型又称数据模型,
层次模型、网状模型、关系模型,
物理数据模型又称物理模型。
1.2.2 E-R模型 (P91—P95)
概念模型是E-R模型(或实体联系模型)
1.E-R模型的基本概念
(1)实体
现实世界中的事物可以抽象成为实体
(2)属性
现实世界均有一些特性,这些特性可以用属性来表示。属性刻画了实体的特征。
(3)联系
一对一的联系,简记为1:1。
一对多或多对一联系,简记为1:M(1:m)或M:1(m:1)。
多对多联系,简高为M:N或m:n。
3.E-R模型的图示法
在E-R图中用椭圆形表示属性。
在E-R图中用菱形表示联系。
4.2.3层次模型的基本结构是树形结构 (P95)
4.2.4网状模型 (P95—P96)
网状模型是一个不加任何条件限制的无向图。
4.2.5关系模型 (P96—P98)
1.关系的数据结构
关系模型采用二维表来表示。
4.3关系代数
(4)查询
① 投影运算
② 选择运算
③ 笛卡尔积运算
则关系R与S经笛卡尔积记为R×S。
3.关系代数中的扩充运算
(1)交运算 (还有并和差)
关系R与S经交运算后所得到的关系是由那些既在R内又在S内的有序组成,记为R∩S。
(2)除运算
如果将笛卡尔积运算看作乘运算的话,那么除运算就是它的运算。
T÷R=S或R/R=S
4.4数据库设计与管理
数据库设计是数据库应用核心。
4.4.1数据库设计概述 (P104)
整个数据库应用系统的开发成目标独立的若干阶段。它们是:需求分析阶段、概念设计阶段、逻辑设计阶段、物理设计阶段。
4.4.2数据库设计的需求分析 (P104—P105)
4.4.3数据库概念设计 (画E-R图) (P105—P108)
4.4.4数据库的逻辑设计 (P108—P109)
1. 从E-R图向关系模式转换。
4.4.5数据库的物理设计 (P110)
1.1 算法
1.1.1 算法的基本概念 (P1—P4)
所谓算法是指解题方案的准确完整的描述。
1. 算法的基本特征
(1)可行性(2)确定性(3)有穷性(4)拥有够的情报
2. 算法的基本要素
一个算法通常由两种基本要素组成:一是对数据对象的运算和操作,二是算法的控制结构。
(1) 算法中对数据的运算和操作 (插入、删除)
(2) 算法的控制结构
一个算法一般都可以用顺序、选择、循环三种基本控制结构组合而成。
1.1.2 算法复杂度(P4—P6)
算法的复杂度主要包括时间复杂度和空间复杂度。
1. 算法的时间复杂度
所谓算法的时间复杂度,是指执行算法所需要的计算工作量。
可以用算法在执行过程中所需基本运算的执行次数来度量算法的工作量。
3. 算法的空间复杂度
一个算法的空间复杂度,一般是指执行这个算法所需要的内存空间。
1.2数据结构的基本概念
数据结构,主要研究和讨论以下三个方面的问题:
① 数据的逻辑结构;
② 数据的存储结构;
③ 对各种数据结构进行的运算。(插入、删除)
主要目的是为了提高数据处理的效率。所谓提高数据处理的效率,主要包括两个方面:一是提高数据处理的速度,(时间复杂度)二是尽量节省在数据处理过程中所占用的计算机存储空间。(空间复杂度)
1.2.1什么是数据结构 (P6—P11)
1. 数据的逻辑结构
所谓数据的逻辑结构,是指反映数据元素之间逻辑关系的数据结构。
2. 数据的存储结构
数据的逻辑结构在计算机存储空间中的存放形式称为数据的存储结构(也称为数据的物理结构)
一种数据的逻辑结构根据需要可以表示成多种存储结构,常用的存储结构有顺序、链接、索引等存储结构。而采用不同的存储结构,其数据处理的效率是不同的。
1.2.3线性结构与非线性结构 (P12)
一般将数据分为两大类型:线性结构与非线性结构。
线性结构又称线性表
如果一个数据结构不是线性结构,则称之为非线性结构。
1.3线性表及其顺序存储结构
1.3.1线性表的基本概念 (P12—P13)
线性表是由n (n≥0)个数据元素a1,a2,…,an组成的一个有限序列,表中的每一个数据元素,除了第一个外,有且只有一个前件,除了最后一个外,有且只有一个后件。即线性表或是一个空表,或可以表示为。
(a1,a2,…,ai,…,an)
非空线性表有如下一些结构特征:
① 有且只有一个根结点a1,它无前件;
② 有且只有一个终结点an,它无后件;
③ 除根结点与终端结点外,其他所有结点有且只有一个前件,也有且只有一个后件。
1.3.2线性表的顺序存储结构 (P13—P14)
在计算机中存放线性表,一种最简单的方法是顺序存储,也称为顺序分配。
线性表的顺序存储结构具有以下两个基本特点:
① 线性表中所有元素据所占的存储空间是连续的;
② 线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。
假设线性表中的第一个数据元素的存储地址为ADR(a1),每一个数据元素占K个字节,则线性表中第i 个元素ai在计算机存储空间中的存储地址为
ADR(a1)=ADR(a1)+(i-1)K
1.3.3顺序表的插入运算 (P14—P15)
在平均情况下,要在线性表中插入一个新元素,需要移动表中一半的元素。因此,在线性表顺序存储的情况下,要插入一个新元素,其效率是很低的。
1.3.4顺序表的删除运算 (P15—P16)
在平均情况下,要在线性表中删除一个元素,需要移动表中表中一半的元素。因此,在线性表顺序存储的情况下,要删除一个元素,其效率也是很低的。
由线性表在存储结构下的插入与删除运算可以看出,线性表的顺序存储结构对于小线性表或者其中元素不常变动的线性表来说是合适的,因为顺序存储的结构比较简单。但这种顺序存储的方式对于元素经常需要变动的大线性表就不太合适了,因为插入删除的效率比较低。
1.4栈和队列
1.4.1栈及其基本运算 (P16—P18)
1.什么是栈
栈是限定在一端进行插入与删除的另一端称为栈底。即栈是按照“先进后出”(FILO)或“后进先出”(LIFO)的原则组织数据的,因此,栈也被称为“先进后出”表或“后进先出”表。由此可以看出,栈具有记忆作用。
2.栈的顺序存储及其运算(采用顺序存储结构的栈称为顺序栈)
栈的基本运算有三种:入栈、退栈与读栈顶元素。
(1) 入栈运算(2)退栈运算(3)读栈顶元素
1.4.2队列及其基本运算 (P18—P20)
1.什么是队列
队列(queue)是指允许在一端进行插入、而在另一端进行删除的线性表。允许插入的一端称为队尾,通常用一个称为尾指针(rear)的指针指向队尾元素,一端称为排头(也称为队头)通常也用一个排头指针(front)指向排头元素的前一个位置。
队列双称为“先进先出”或“后进后出”的线性表。
3. 循环队列及其运算
在实际应用中,队列的顺序存储结构一般采用循环队列的形式。
所谓循环队列,就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,供队列循环使用。
(1) 入队运算
(2) 退队运算
1.5线性链表
1.5.1线性链表的基本概念 (P20—P23)
由于线性表的顺序存储结构存在以上这些缺点,对于大的线性表,特别是元素变动频繁的大线性表不宜采用顺序存储结构,而是采用下面要介绍的链式存储结构。
在链式存储方式中,要求每个结点由两部分组成:一部分用于存放数据元素值,称为数据域;另一部分用于存放指针,称为指针域。
在链式存储结构中,存储数据结构的存储空间可以下连续,各数据结点的存储顺序与数据元素之间的逻辑关系可以不一致,而数据元素之间的逻辑关系是由指针域来确定的。
链式存储方式既可用于表示线性结构,也可以用于表示非线性结构。
1. 线性链表
线性表的链式存储结构称为线性链表。
2. 带链的栈
栈也是线性表,也可以采用链式存储结构。
3. 带链的队列
与栈类似,队列也是线性表,也可以采用链式存储结构。
1.5.2线性链表的基本运算 (P23—P25)
线性链表在插入过程中不发生数据元素移动的现象,只需改变有关结点的指针即可,从而提高了插入的效率。
从线性链表的删除过程可以看出,在线性链表中删除一个元素后,不需要移动表的数据元素,只需改变被删除元素所在结点的前一个结点的指针域即可。
1.5.3循环链表及其基本运算 (P25—P26)
循环链表具有以下两个特点:
(1) 在循环链表中增加了一个表头结点,指针域指向线性表的第一个元素的结点。循环链表的头指针指向表头结点。
(2) 循环链表中最后一个结点的指针域不是空,而是指向表头结点。即在循环链表中,所有结点的指针构成了一个环状链。
1. 6树与二叉树
1.6.1树的基本概念 (P26—P28)
在树结构中,每一个结点只有一个前件,称为父结点,没有前件的结点只有一个,称为树的根结点,简称为树的根。
在树结构中,每一个结点可以有多个后件,它们都称为该结点的子结点。没有后件的结点称为叶子结点。
在树结构中,一个结点所拥有的后件个数称为该结点的度
在树中,所有结点中的最大的度称为树的度。
根结点在第1层。
树的最大层次称为树的深度。
1.6.2二叉树及其基本性质 (P28—P31)
1. 什么是二叉树
二叉树具有以下两个特点:
① 非空二叉树只有一个根结点;
② 每一个结点最多有两棵子树,且分别称为该结点的左子树与右子树。
2. 二叉树的基本性质
性质1在二叉树的第K层上,最多有2K-1(K≥1)个结点。
性质2深度为m的二叉树最多有2m-1个结点。
性质3在任意一棵二叉树中,度为0的结点(即叶子结点)总是比度为2的结点多一个。
3. 满二叉树与完全二叉树
(1)满二叉树
所谓满二叉树是指这样的一种二叉树:除最后一层外,每一层上的所有结点都有两个子结点,这就是说,在满二叉树中,每一层上的结点数都达到最大值,即在满二叉树的第K层上有2K-1个结点,且深度为m的满二叉树有2m-1个结点。
(2)完全二叉树
所谓完全二叉树是指这样的二叉树:除最后一层外,每一层上的结点数均达到最大值;在最后一层上只缺少右边若干结点。
满二叉树也是完全二叉树,而完全二叉树一般不是满二叉树。
性质6设完全二叉树共有n个结点。从根结点开始,按层序用自然数1,2,…,n给结点进行编号,则对于编号为k(k=1,2,…,n)的结点有以下结论:
① 若k=1,则该结点为根结点,它没有父结点;若k>1,则该结点的父结点编号为INT(k/2)。
② 若2k≤n,则编号为k的结点的左子结点编号为2k;否则该结点无左子结点。
③ 若2k+1≤n,则编号为k的结点的右子结点编号为2k+1;否则该结点无右子结点。
1.6.3二叉树的存储结构 (P31—P32)
在计算机中,二叉树通常采用链式存储结构。
1.6.4二叉树的遍历 (P32—P33)
二叉树的遍历可以分为三种:前序遍历、中序遍历、后序遍历。
1. 前序遍历(DLR)
2. 中序遍历(LDR)
3. 后序遍历(LRD)
1.7查找技术
1.7.1顺序查找 (P33)
顺序查找又称顺序搜索。
对于大的线性表来说,顺序查找的效率是很低的。虽然顺序查找的效率不高,但在下列两种情况下也只能采用顺序查找:
(1) 线性表无序表,则不管是顺序存储结构还是链式存储结构,都只能用顺序查找。
(2) 即使是有序线性表,如果采用链式存储结构,也只能用顺序查找。
1.7.2二分法查找 (P33—P34)
二分法查找只适用于顺序存储的有序表。
显然,当有序线性表为顺序存储时都能采用二分查找,并且,二分查找的效率要比顺序查找高得多。可以证明,对于长度为n的有序线性表,在最坏情况下,二分查找只需要比较log2n次,而顺序查找需要比较n次。
1.8排充技术
1.8.1交换类排序法 (P34—P35)
1. 冒泡排序法
冒泡排序法是一种最简单的交换类排序方法。
假设线性表的长度为n,则在最坏情况下,冒泡排序需要的比较次数为n(n-1)/2。
2. 快速排序法
快速排序法也是一种互换类的排序方法,但由于它比冒泡排序法的速度快,因此称之为快速排序法。
1.8.2插入类排序法 (P35—P37)
1. 简单插入排序法
自以为插入排序,是指将无序序列中的各元素依次插入到已经有序的线性表中。
在简单插入排序法中,这种排序方法的效率与冒泡排序法相同。在最坏情况下,证券交易插入排序需要n(n-1)/2次比较。
2. 希尔排序法
希尔排序法属于插入类排序,但它对简单插入排序做了较大的改进。
1.8.3选择类排序法 (P37—P38)
1. 简单选择排序法
从中选出最小的元素,将它交换到表的最前面。
简单选择排序法在最坏情况下需要比较n(n-2)/2次。
2. 堆排序法
堆排序法属于选择类的排序方法。
堆排序的方法对于规模较小的线性表并不合适,但对于较大规模的来说是很有效的。
分享到搜狐微博
第2章 程序设计基础 (P40—P45)
2.1程序设计方法与风格
程序设计的风格总体而言应该强调简单和清晰,程序必须是可以理解的。可以认为,著名的“清晰第一,效率第二”的论点已成为当今主导的程序设计风格。
源程序文档化应考虑如下几点:
(1) 符号名的命名:符号名的命名应具有一定的实际含义,以便于对程序功能的理解。
(2) 程序注释:正确的注释能够帮助读者理解程序。注释一般分为序言性注释和功能性注释。
(3) 视觉组织:为使程序的结构一目了然,可以在程序中利用空格、空行、缩进等技巧使程序层次清晰。
2.2结构化程序设计
2.2.1结构化程序设计的原则 (P41—P42)
结构化程序设计方法的主要原则可以概括为自顶向下,逐步求精,模块化,限制使用goto语句。
2.2.2结构化程序的基本结构与特点 (P42—P43)
1. 顺序结构
2. 选择结构:选择结构又称为分支结构。
3. 重复结构:重复结构又称为循环结构。
2.3面向对象的程序设计
今天面向对象方法已经发展成为主流的软件开发方法。
一些著名的面向对象语言(如C++、Java)
2.3.2面向对象方法的基本概念 (P45—P48)
1. 对象
对象是面向对象方法中最基本的概念。对象可以用来表示客观世界中的任何实体。
面向对象的程序设计方法中涉及的对象由一组表示其静态特征的属性和它可执行的一组操作组成。
(4) 封装性。
2. 类(Class)和实例(Instance)
将属性、操作相似的对象归为类,也就是说,类是具有共同属性、共同方法方法的对象的集合。所以,类是对象的抽象,而一个对象则是其对应类的一个实例。
3. 消息
对象间的这种相互合作需要一个机制协助进行,这样的机制称为“消息”。消息是一个实例与另一个实例之间传递的信息。
4. 继承
继承是面向对象的方法的一个主要特征。
第3 章 软件工程基础
3.1软件工程基本概念
3.1.1软件定义与软件特点 (P50)
计算机软件是包括程序、数据及相关文档的完整集合。
可见软件由两部分组成:一是机器可执行和程序和数据;二是机器不可执行的,与软件开发、运行、维护、使用等有关的文档。
软件的特点:
① 软件是一种逻辑实体,而不是物理实体,具有抽象性。
② 软件的生产与硬件不同,它没有明显的制作过程。
③ 软件在运行、使用期间不存在磨损、老化问题。
④ 软件的开发、运行对计算机系统具有依赖性,受计算机系统的限制,这导致了软件移植的问题。
⑤ 软件复杂性高,成本昂贵。
⑥ 软件开发涉及诸多的社会因素。
3.1.2软件危机与软件工程 (P51—P52)
软件工程概念的出现源自软件危机。
20世纪60年代末以后,“软件危机”。所谓软件危机是泛指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
1968年在北大西洋公约组织会议(NATO会议)上,讨论摆脱软件危机的办法,软件工程作为一个概念首次被提出。
软件工程包括个要素,即方法、工具和过程。
3.1.3软件工程过程与软件生命周期 (P52—P53)
2.软件生命周期
通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为软件生命周期。
3.1.4软件工程的目标与原则(P53—P54)
1. 软件工程的目标
软件工程内容主要包括:软件开发技术和软件工程管理。
3.1.5软件开发工具与软件开发环境 (P54)
1. 软件开发工具 (VB、VC++、VFP)
2. 软件开发环境
软件开发环境或称软件工程环境是全面支持软件开发全过程的软件工具集合。
计算机辅助软件工程(CASE)
3.2结构化分析方法
3.2.1需求分析与需求分析方法 (P53—P59)
1. 需求分析
(1) 需求分析阶段的工作
需求分析阶段的工作,可以概括为四个方面:
① 需求获取
② 需求分析
③ 编写需求规格说明书
④ 需求评审
2. 需求分析方法
常见的需求分析方法有:
① 结构化分析方法。主要包括:面向数据流的结构化分析方法(SA)面向数据结构的Jackson方法(JSD)面向数据结构的结构化数据系统开发方法(DSSD)
② 面向对象的分析方法(OOA)
3.2.2结构化分析方法 (P55—P59)
2.结构化分析的常用工具
(1) 数据流图(DFD)
(2) 数据字典(DD)
数据字典是结构化分析方法的核心。
(3) 判定树
(4) 判定表
3.2.3软件需求规格说明书 (P59—P60)
软件规格说明书(SRS)是需求分析阶段的最后成果,是软件开发中的重要文档。
软件需求规格说明书的作用是:
① 便于用户、开发人员进行理解和交流。
② 反映出用户问题的结构,可以作为软件开发工作的基础和依据
③ 作为确认测试和验收的依据。
3.3结构化设计方法
3.3.1软件设计基本概念 (P60—P62)
1.软件设计的基础
软件设计分两步完成:概要设计和详细设计。
2.软件设计的基本原理
(1) 抽象
(2) 模块化
(3) 信息隐蔽
(4) 模块独立性
模块独立程度是评价设计好坏的重要度量标准。衡量软件的模块独立软件的模块独立性使用耦合性和内聚性两个定性的度量标准。
① 内聚性:内聚性是一个模块内部各个元素间彼此结合的紧密程度的度量。
② 耦合性:耦合性是模块间互相连接的紧密程度的度量。
耦合性与内聚性是模块独立性的两个定性标准,耦合与内聚是相互关联的。在程序结构中,各模块的内聚性越强,则耦合性越弱。一般较优秀的软件设计,应尽量做到高内聚,低耦合。
3.3.3详细设计 (P67—P71)
几种主要的工具:
1. 程序流程图(PFD)
2. N-S (盒图)
3. PAD图 PAD图是问题分析图(Problem Analysis Diagram)的英文缩写。
4. PDL
过程设计语言(PDL)也称为结构化的英语和伪码。
3.4软件测试
软件测试的投入,通常其工作量、成本占软件开发总工作量、总成本的40%以上。
软件测试是保证软件质量的重要手段,其主要过程涵盖了整个软件生命期的过程。
3.4.1软件测试的目的 (P71)
关于软件测试的目的,软件测试是为了发现错误而执行程序的过程。
3.4.3软件测试技术与方法综述(P71—P77)
可以分为静态测试和动态测试方法。若按照功能划分可以分为白盒测试和黑盒测试方法。
1. 静态测试与动态测试
(1) 静态测试
静态测试可以由人工进行,充分发挥人的逻辑思维优势。
(2) 动态测试
静态测试不实际运行软件,主要通过人工进行。动态测试是基于计算机的测试,是为了发现错误而执行程序的过程。
2. 白盒测试
白盒测试方法也称结构测试或逻辑驱动测试。
3. 黑盒测试方法
黑盒测试方法也称功能测试或数据驱动测试。黑盒测试是对软件已经实现的功能是否满足需求进行测试和验证。黑盒测试完全不考虑程序内部和逻辑结构和内部特性。
3.4.4软件测试的实施(P77—P80)
软件测试是保证软件质量的重要手段。
软件测试过程一般按4个步骤进行,
1. 单元测试
单元测试是对软件设计的最小单位——模块(程序单元)进行正确性检验的测试。
2. 集成测试
集成测试是测试和组装软件的过程。
3. 确认测试
4. 系统测试
3.5程序的调试
3.5.1基本概念 (P80—P81)
程序调试的任务是诊断和改正程序中的错误。它与软件测试不同,软件测试是尽可能多地发现软件中的错误。
软件测试贯穿整个软件生命期,调试主要在开发阶段。
3.5.2软件调试方法 (P81—P82)
1. 强行排错法
2. 回溯法
3. 原因排除法
第4章 数据库设计基础 (P84—P111)
4.1数据库系统的基本概念
4.1.1数据、数据库、数据库管理系统 (P84—P87)
1. 数据
数据(Data)实际上就是描述事物的符号记录。
2. 数据库
数据库(简称DB)是数据的集合。
3. 数据库管理系统
数据库管理系统(简称DBMS)它是一种软件。
数据库管理系统是数据库系统的核心。
目前流行的DBMS均为关系数据库系统,如微软的Visual FoxPro和Access等。
4. 数据库管理员(简称DBA)
5. 数据库系统
数据库系统(简称DBS)由如下几部分组成:数据库(数据)、数据库管理系统(软件)、数据库管理员(人员)、系统平台之一____硬件平台(硬件)、系统平台之二——软件平台(软件)这五个部分构成了一个以数据库为核心的完整的运行实体,称为数据库系统。
4.1.2数据库系统的发展 (P87—P88)
数据管理发展至今已经历了三个阶段:人工管理阶段、文件系统阶段和数据库系统阶段。
1. 关系数据库系统阶段
数据管理三个阶段的比较
人工管理 文件系统 数据库系统
特点 数据共享程度 无共享
冗余度大 共享性差
冗余度大 共享性大
冗余度小
数据独立性 不独立,完全依赖于程序 独立性差 具有高度的物理独立性和一定的逻辑独立性
4.1.3数据库系统的基本特点 (P88—P890
数据库系统具有以下特点:
1. 数据的集成性
2. 数据的高共享性与低冗余性
3. 数据独立性
数据独立性是数据与程序间的互不依赖性,数据独立性一般分为物理独立性与逻辑独立性两级。
(1) 物理独立性:物理独立性即是数据的物理结构的改变,从而不致引起应用程序的变化。
(2) 逻辑独立性:数据库总体逻辑结构的改变,不需要相应修改应用程序,这就是数据 的逻辑独立性。
4. 数据统一管理与控制
4.1.4数据库系统的内部结构体系 (P89—P91)
1. 数据库系统的三级模式
(1) 概念模式。概念模式是数据库系统中全局数据逻辑结构的描述,是全体用户(应用)公共数据视图。
(2) 外模式。外模式也称子模式或用户模式。它是用户的数据视图。
(3) 内模式。内模式又称物理模式,它给出了数据库物理存储结构与物理存取方法。
2. 数据库系统的两级映射
(1) 概念模式到内模式的映射。
(2) 外模式到概念模式的映射。
4.2数据模型
4.2.1数据模型的基本概念 (P91)
数据模型按不同的应用层次分成三种类型,它们是概念数据模型、逻辑模型、物理数据模型,
概念模型有E-R模型、逻辑数据模型又称数据模型,
层次模型、网状模型、关系模型,
物理数据模型又称物理模型。
1.2.2 E-R模型 (P91—P95)
概念模型是E-R模型(或实体联系模型)
1.E-R模型的基本概念
(1)实体
现实世界中的事物可以抽象成为实体
(2)属性
现实世界均有一些特性,这些特性可以用属性来表示。属性刻画了实体的特征。
(3)联系
一对一的联系,简记为1:1。
一对多或多对一联系,简记为1:M(1:m)或M:1(m:1)。
多对多联系,简高为M:N或m:n。
3.E-R模型的图示法
在E-R图中用椭圆形表示属性。
在E-R图中用菱形表示联系。
4.2.3层次模型的基本结构是树形结构 (P95)
4.2.4网状模型 (P95—P96)
网状模型是一个不加任何条件限制的无向图。
4.2.5关系模型 (P96—P98)
1.关系的数据结构
关系模型采用二维表来表示。
4.3关系代数
(4)查询
① 投影运算
② 选择运算
③ 笛卡尔积运算
则关系R与S经笛卡尔积记为R×S。
3.关系代数中的扩充运算
(1)交运算 (还有并和差)
关系R与S经交运算后所得到的关系是由那些既在R内又在S内的有序组成,记为R∩S。
(2)除运算
如果将笛卡尔积运算看作乘运算的话,那么除运算就是它的运算。
T÷R=S或R/R=S
4.4数据库设计与管理
数据库设计是数据库应用核心。
4.4.1数据库设计概述 (P104)
整个数据库应用系统的开发成目标独立的若干阶段。它们是:需求分析阶段、概念设计阶段、逻辑设计阶段、物理设计阶段。
4.4.2数据库设计的需求分析 (P104—P105)
4.4.3数据库概念设计 (画E-R图) (P105—P108)
4.4.4数据库的逻辑设计 (P108—P109)
1. 从E-R图向关系模式转换。
4.4.5数据库的物理设计 (P110)
温馨提示:答案为网友推荐,仅供参考
第1个回答 2011-07-31