C语言程序设计(李欣然)1第一章公共基础知识1.1数据结构与算法1.1.1算法1.算法的基本概念(1)概念:算法是指一系列解决问题的清晰指令。(2)4个基本特征:可行性、确定性、有穷性、拥有足够的情报。(3)两种基本要素:对数据对象的运算和操作、算法的控制结构(运算和操作时间的顺序)。(4)设计的基本方法:列举法、归纳法、递推法、递归法、减半递推技术和回溯法。2.算法的复杂度(1)算法的时间复杂度:执行算法所需要的计算工作量。(2)算法的空间复杂度:执行算法所需的内存空间。1.1.2数据结构的基本概念数据结构指相互有关联的数据元素的集合,即数据的组织形式,其中逻辑结构反映数据元素之间逻辑关系。其中逻辑结构反映数据元素之间逻辑关系;存储结构为数据结构的逻辑结构在计算机存储空间中的存放形式,有顺序存储、链式存储、引索存储和散列存储4种方式。数据结构按个元素之间前后关系的复杂度可划分为:(1)线性结构:有且只有一个根节点,且每个节点最多有一个直接前驱和一个直接后继的非空数据结构。(2)非线性结构:不满足线性结构的数据结构。1.1.3线性表及其顺序存储结构1.线性表的基本概念线性结构又称线性表,线性表是最简单也是最常用的一种数据结构。2.线性表的顺序存储结构元素所占的存储空间必须连续。元素在存储空间的位置是按逻辑顺序存放的。3.线性表的插入运算C语言程序设计(李欣然)2在第i个元素之前插入一个新元素的步骤如下:步骤一:把原来第n个节点至第i个节点依次往后移一个元素位置。步骤二:把新节点放在第i个位置上。步骤三:修正线性表的节点个数。4.线性表的删除运算步骤一:把i个元素之后不包括第i个元素的n-i个元素依次前移一个位置;步骤二:修正线性表的结点个数。1.1.4栈和队列1.栈及其基本运算(1)基本概念:栈是一种特殊的线性表,其插入运算与删除运算都只在线性表的一端进行,也被称为“先进后出”表或“后进先出”表。栈顶:允许插入与删除的一端。栈底:栈顶的另一端。空栈:栈中没有元素的栈。(2)特点。栈顶元素是最后被插入和最早被删除的元素。栈底元素是最早被插入和最后被删除的元素。栈有记忆作用。在顺序存储结构下,栈的插入和删除运算不需移动表中其他数据元素。栈顶指针top动态反映了栈中元素的变化情况。(3)顺序存储和运算:入栈运算、腿栈运算和读栈顶运算。2.队列及其基本运算(1)基本概念:队列是指允许在一端进行插入,在另一端进行删除的线性表,又称“先进先出”的线性表。队尾:允许插入的一端,用尾指针指向队尾元素。排头:允许删除的一端,用头指针指向头元素的前一位置。(2)循环队列及其运算:入队运算与退队运算。C语言程序设计(李欣然)31.1.5树和二叉树1.树的基本概念树是简单的非线性结构,树中有且仅有一个没有前驱的节点称为“根”,其余节点分成m个互不相交的有限集合T1,T2,…,T|rmm,每个集合又是一棵树,称T1,T2,…,T|rmm为根结点的子树。父节点:每一个节点只有一个前件,无前件的节点只有一个,称为树的根结点(简称树的根)。子节点:每一个节点可以后多个后件,无后件的节点称为叶子节点。树的度:所有节点最大的度。树的深度:树的最大层次。2.二叉树及其基本性质二叉树是一种非线性结构,是有限的节点集合,该集合为空(空二叉树)或由一个根节点及两棵互不相交的左右二叉子树组成。可分为满二叉树和完全二叉树,其中满二叉树一定是完全二叉树,但完全二叉树不一定是满二叉树。二叉树可为空,空的二叉树无节点,非空二叉树有且只有一个根节点;每个节点最多可有两棵子树,称为左子树和右子树。3.二叉树的存储结构二叉树通常采用链式存储结构,存储节点由数据域和指针域(左指针域和右指针域)组成。二叉树的链式存储结构也称二叉链表,对满二叉树和完全二叉树可按层次进行顺序存储。4.二叉树的遍历二叉树的遍历是指不重复地访问二叉树中所有节点,主要指非空二叉树,对于空二叉树则结束返回。二叉树的遍历包括前序遍历、中序遍历和后序遍历。1.1.6查找技术(1)顺序查找:在线性表中查找指定的元素。(2)二分查找:线性表必是顺序存储结构,且必是有序表,反复查找C语言程序设计(李欣然)4直到成功或子表长度为0时结束。1.1.7排序技术(1)交换类排序法:借助数据元素的“交换”进行排序,包括冒泡排序法和快速排序法。(2)插入类排序法:包括简单插入排序法和希尔排序法。(3)选择类排序法:包括简单选择排序法和推排序法。1.2程序设计基础1.2.1程序设计方法与风格(1)设计方法:程序设计指设计、编制、调试程序的方法和过程,主要有结构化程序设计方法、软件工程方法和面向对象方法。(2)设计风格:良好的设计风格要注重源程序文档化、数据说明方法、语句的结构和输入输出。1.2.2面向对象的程序设计面向对象方法的本质是主张从客观世界固有的事物出发来构造系统,强调建立的系统能映射问题域。对象:用来表示客观世界中任何实体,可以是任何有明确边界和意义的东西。类:具有共同属性、共同方法的对象的集合。实例:一个具体对象就是其对应分类的一个实例。消息:实例间传递的信息,它统一了数据流和控制流。继承:使用已有的类定义作为基础建立新类的定义技术。多态性:是指对象根据所接受的信息而作出动作,同样的信息被不同的对象接收时有不同行动的现象。面向对象程序设计的优点:与人类习惯的思维方法一致、稳定性好、可重用性好、易于开发大型软件产品、可维护性好。1.3软件工程基础1.3.1软件工程基本概念1.软件的定义与特点(1)定义:软件是指计算机系统的操作有关的计算机程序、规程、规C语言程序设计(李欣然)5则,以及可能有的文件、文档和数据。(2)特点。是逻辑实体,有抽象性。生产没有明显的制作过程。运行使用期间不存在磨损、老化问题。开发、运行对计算机系统有依赖性,受计算机系统的限制,导致了软件移植问题。复杂性较高,成本昂贵。开发涉及诸多社会因素。2.软件危机与软件工程软件危机指在计算机软件的开发和维护中遇到的一系列严重问题。软件工程是应用于计算机软件的定义、开发和维护的一整套方法、工具、文档、实践标准和工序,包括软件开发技术和软件工程管理。3.软件工程过程把输入转化为输出的一组彼此相关的资源和活动。4.软件生命周期软件产品从提出、实现、使用维护到停止使用的过程。5.软件工程的目标在给定成本、进度的前提下,开发具有有效性、可靠性、可理解性、可维护性、可重用性、可适用性、可移植性、可追踪性和可互操作性且满足用户需求的产品。6.软件工程的原则软件工程的原则包括:抽象、信息隐蔽、模块化、局部化、确定性、一致性、完备性和可验证性。7.软件开发工具从初期的单向工具向集成工具发展,软件开发的方法必须得到相应工具的支持。8.软件开发环境软件开发环境是全面支持软件开发过程的软件工具的集合。计算机辅助C语言程序设计(李欣然)6软件工程(CASE)是当前最有特色的研究工作和发展方向。1.3.2结构化分析方法需求分析的任务是发现需求、求精、建模和定义需求的过程,可概括为:需求获取、需求分析、编写需求规格说明书和需求审评。常用的分析方法:结构化分析方法:其实质着眼于数据流,自顶向下,逐层分解,建立系统的处理流程。常用工具包括数据流图、数字字典(核心方法)、判断树和判断表。面向对象分析方法。1.3.3结构化设计方法1.软件设计的基本概念和方法软件设计是一个把软件需求转换为软件表示的过程。(1)基本原理:抽象、模块化、信息隐藏、模块独立性(度量标准:耦合性和内聚性)(2)基本思想:将软件设计成由相对独立、单一功能的模块组成的结构。2.概要设计(1)4个任务:设计软件系统结构、数据结构及数据库设计、编写概要设计文档、概要设计文档评审。(2)面向数据流的设计方法:数据流图的信息分为交换流和事物流,结构形式有交换型和事物型。3.详细设计的工具详细设计的工具包括:图形工具:程序流程图、N-S、PAD、HIPO。表格工具:判定表。语言工具:PDL(伪码)。1.3.4软件测试1.目的为了发现错误而执行程序的过程。2.准则C语言程序设计(李欣然)7所有测试应追溯到用户需求。严格执行测试计划,排除测试的随意性。充分注意测试中的群集现象。程序员应避免检查自己的程序。穷举测试不可能。妥善保存设计计划、测试用例、出错统计和最终分析报告。3.软件测试技术和方法软件测试的方法按是否需要执行被测软件的角度,可分为静态测试和动态测试,按功能分为白纸盒测试和黑纸盒测试。(1)白盒测试:根据程序的内部逻辑设计测试用例,主要方法有逻辑覆盖测试、基本路径测试等;(2)黑盒测试:根据规格说明书的功能来设计测试用例,主要诊断方法有等价划分法、边界值分析法、错误推测发、因果图法等,主要用于软件确认测试。1.3.5程序的调试(1)任务:诊断和改正程序中的错误。(2)调试方法:强行排错法、回溯法和原因排除法。1.4数据库设计基础1.4.1数据库系统的基本概念(1)数据(Data):描述事物的符号记录。(2)数据库(DataBase):长期存储在计算机内的、有组织的、可共享的数据集合。(3)数据库管理系统的6个功能:数据组织、数据操纵、数据维护、控制及保护和数据服务。(4)数据库技术发展经历了3个阶段:人工管理阶段→文件系统阶段→数据库系统阶段(5)数据库系统的特点:集成性、高共享性、低冗余性、数据独立性、数据统一管理与控制等。(6)数据库系统的内部机构体系:三级模式(概念模式、内模式、外模式)C语言程序设计(李欣然)8和二级映射模式(外模式/概念模式的映射、概念模式/内模式的映射)构成了数据库系统内部的抽象结构体系。1.4.2数据模型数据模型是数据特征的抽象,从抽象层次上描述了系统的静态特征、动态行为和约束条件,描述的内容有数据结构、数据操作和数据约束。有3个层次:概念数据模型、逻辑数据模型和物理数据模型。(1)E-R模型:提供了表示实体、属性和联系的方法。实体间联系有“一对一”、“一对多”和“多对多”;(2)层次模型:利用树形结构表示实体及其之间联系,其中节点是实体,树枝是联系,从上到下是一对多关系;(3)网状模型:用网状结构表示实体及其之间联系,是层次模型的扩展。网络模型以记录型为节点,反映现实中较为复杂的事物联系。(4)关系模型:采用二维表(由表框架和表的元组组成)来表示,可进行数据查询、增加、删除及修改操作。关系模型允许定义“实体完整性”、“参照完整性”和“用户定义的完整性”和“用户定义的完整性”三种约束。键(码):二维码中唯一能标识元组的最小属性集。候选键(候选码):二维表中可能有的多个键。主键:被选取的一个使用的键。1.4.3关系代数(1)传统的集合运算:关系并运算、关系交运算、关系差运算和广义笛卡尔积。(2)专门的关系运算:选择、投影、连接。1.4.4数据库设计与管理1.数据库设计概述基本思想:过程迭代和逐步求精。方法:面向数据的方法和面向过程的方法。设计过程:需求分析→概念设计→逻辑设计→物理设计→编码→测试→运行→进一步修改。2.数据库设计的需求分析C语言程序设计(李欣然)9需求收集和分析是数据库设计的第一阶段,常用结构化分析方法(自顶向下、逐层分解)和面向对象的方法,主要工作有绘制数据流程图、数据分析、功能分析、确定功能处理模块和数据间关系。数据字典:包括数据项、数据结构、数据流、数据存储和处理过程,是对系统中数据的详尽描述。3.数据库的设计(1)数据库的概念设计:分析数据间内在的语义关联,以建立数据的抽象模型。(2)数据库的逻辑设计:从E-R图向关系模型转换,逻辑模式规范化,关系视图设计可以根据用户需求随时创建。(3)数据库的物理设计:是数据在物理设备上的存储结构与存取方法,目的是对数据库内部物理结构作出调整并选择合理的存取路径,以提高速度和存储空间。4.数据库管理数据库管理包括数据库的建立、数据库的调整、数据库的重组、数据库的安全性与完整性控制、数据库故障恢复和数据库的监控。薃肀莂蒃袂肀肂虿袈聿芄薂螄肈