计算机基础笔记
数据结构与算法
栈
- 指针是存储空间的地址,而不是数据
- 栈:后进先出
- 栈顶指针:栈顶元素的地址top
- 栈底指针:栈底指针的地址bottom
- top = bottom(前提:栈底元素唯一)栈为空
- 栈元素个数计算公式abs(top-bottem)+1
- 如果栈顶指针超过了储存空间,那么top=bottom,栈为空,在那边超出那边为bottom
- 链:含有前键和后键,数据元素由两部分组成:数据域,指针域
- 带链的栈:栈内任意一个元素均可通过指针域的改变而发生更改,这种情况下栈底指针可以改变
队列
- 与栈一样是线性结构
- 先进先出
- front:队头元素的前一个位置
- rear:队尾最后一个元素
- 循环队列元素个数,一般队列rear>front,但对于循环队列rear和front大小未知,rear-front>0,便是循环队列元素,<0时加上容量,=0时为空或全满
线性链表 - 线性链表(线性表的链式储存)由数据域和指针域两部分组成,也是线性结构
- 特殊的,双向链表的指针域由前件指针和后件指针组成
HEAD头指针 - 线性表的插入删除效率不高,需要移动位置,而线性链表直接更改地址,没有覆盖,效率较高,但浪费储存空间
- 线性链表不一定按本身逻辑结构存储,但线性表的顺序结构需要按逻辑结构和物理结构
- 二分查找法只适用于顺序储存的有序线性表
- 另外,链表可分为双向链表与二叉链表,前者是线性的,后者是非线性的
树与二叉树
- 子节点每个节点后可以有多个后件,称为子节点
没有后件的节点称为叶子节点 - 度:一个节点所拥有的后件的个数称为该节点的度,叶子结点的度为0
- 树的度:所有节点中的最大的度
- 树的深度:树的层数
- 二叉树:非线性的数据结构,子节点的数量最多为两个
- 满二叉树:节点全
- 完全二叉树:前k-1层全满,最后一层从右侧削减
- 三个性质:NO.1.第k层的节点数为2**(k-1);NO.2.k层节点总数为2**k -1;NO.3.度为0的节点(叶子节点)总比度为2的节点多一个
- 三种遍历方式:前序遍历,中序遍历,后序遍历
- 扇入:指调用某个模块所用的前件数量,其中最大扇入指二叉树中某个节点前件最多的节点的前件的数量
- 类似的最大扇出:某个节点后件最多的节点的后件的数量
- 查找和排序
顺序查找/顺序搜索:在长度为n的线性表中最坏的情况下需要查找n次
二分查找法:适用于有序线性表,需要查找log2(n)次(不要求计算)
交换类排序:
冒泡排序法:最简单的交换类排序方法,相邻之间两两交换;最坏情况下比较n(n-1)/2次
快速排序法/分区交换排序法:与自己选取的标准值进行比较;最坏情况下需要比较n(n-1)/2次,每次都会产生逆序
插入类排序
简单排序法,最坏情况下需要n(n-1)/2次
希尔排序法,分成小区间再进行排序,最坏情况下需要O(n1.5)次
选择类排序
简单选择排序:选出最小的放前边,最坏情况下需要n(n-1)/2次
堆排序法:与完全二叉树结合在一起判断是不是堆,下面的子节点的值必须同时大于根节点,最坏情况下要比较O(nlog2(n))次
程序设计基础
- 程序=算法+数据结构
- 语言分类:机器语言、汇编语言、高级语言
- 编码风格:可读性好,易测试,易维护,清晰第一,效率第二
- 注释分类:序言性注释,描述性注释
- 结构化程序设计方法的主要原则:自顶向下,逐步求精,模块化,限制使用goto语句
- 面向对象的程序设计主要考虑的是提高软件的可重用性
- 对象的基本特点:标志唯一性,分类性,多态性(同样的信息被不同的对象接受时可导致不同行动的现象),封装性(信息隐蔽是通过对象的封装性来实现的),模块独立性好(高内聚,低耦合),
- 类:指的是具有共同属性,共同方法的对象的集合。类是对象的抽象,对象的对应类的一个特例
- 消息:对象之间交流的机制,与类无关
- 继承:指能直接获得已有的性质和特征,分为单继承和多继承,是面向类而言的,提高了软件可重用性
- 方法:指对象的接口,对象的属性只能通过方法来进行修改
软件工程基础
- 软件:计算机软件是包括程序、数据以及相关文档的集合
- 软件特点:
软件是一种逻辑实体,而不是逻辑实体,具有抽象性
软件在开发、运行过程中对计算机系统具有依赖性,导致软件兼容和移植的问题
软件没有明显的制作过程
软件在运行,使用期间不存在磨损,老化问题
软件复杂度高,成本昂贵
软件开发涉及诸多的社会因素
软件危机主要表现:
软件需求的增长得不到满足
软件开发的成本和进度无法控制
软件质量难以控制
软件不可维护或维护程度非常低
软件成本不断提高
软件开发生产利用率的提高赶不上硬件的发展和应用需求的增长
即成本、质量、生产率等问题 - 软件工程3要素:方法、工具和过程
- 软件的5个生命周期:产品提出,实现,使用,维护,停止使用退役;分为定义,开发,维护三阶段
- 三阶段
软件定义阶段:制定计划、需求分析。ps:写到需求规格说明书,只和数据、文档有关系,与程序指令无关系
软件需求规格说明书是需求分析阶段的最后成果
软件开发阶段:1.软件设计:概要设计(宏观)、详细设计/局部设计/微观设计/过程设计(微观);2.软件实现;3.软件测试(测试依据是需求规格说明书,只和程序指令有关系)
1.软件概要设计的基本任务是:
1)设计软件系统结构
2)数据结构以及数据库设计
3)编写概要设计文档
4)概要设计文档评审
概要设计常用的软件结构设计工具是结构图,也称为系统结构图,结构图中带箭头的连线表示模块之间的调用关系
关于系统结构图
深度越深宽度越宽说明系统越复杂
原子模块:树中位于叶子节点的模块
概要设计里数据流的类型有变换型(数据会变化)和事务型(数据会分配传递)
2.详细设计的设计工具有
图形工具:程序流程图(PFD)、N-S图(方框图)、PAD、HIPO.
表格工具:判定表
语言工具:PDL(伪码)
程序流程图中的箭头代表的是控制流
3.软件测试是为了发现错误而执行程序的过程,只发现不改进错误,不能也不可能证明程序没有错误,也不可能发现全部错误
软件测试的对象包括:源程序,目标程序,数据,相关文档
按方法有
白盒测试:主要方法有逻辑覆盖,基本路径测试
黑盒测试:测试的是外部功能与特性,依据需求规格说明书,主要方法是等价类划分法,边界值分析法,错误推测法和因果图
软件测试过程按步骤分为4个步骤,即单元测试、集成测试、确认测试(验收测试)和系统测试
单元测试:主要是白盒测试
集成测试:看单元是否冲突,看得是环节,主要是发现与接口有关的错误,集成测试的依据是概要设计说明书
确认测试:验证软件的有效性,依据是软件需求规格说明书,主要是黑盒测试
系统测试:环境参与做的测试,测试用例是根据软件需求规格说明书,重点是环境
程序调试:诊断和改正程序中的错误
软件运行维护阶段:软件生命周期中花费最多的阶段。 - 软件工程研究:软件开发技术和软件工程管理
- 结构化分析:需求分析阶段(分析数据)
- 分析方法有结构化分析方法(重视过程),面向对象的分析方法(重视结果)
- 结构化分析的常用工具:
数据流图:用来描述数据流向的图形
数据字典:结构化分析方法的核心
判定表:以表格的形式将条件融合数据分析
判定树:按不同类别不断细分,得到数据分析 - 数据流图是描述数据处理过程的工具,是需求理解的逻辑模型的图形表示,直接支持系统的功能/需求建模
数据库设计基础
- 数据库(DB)具有统一的结构形式,存放于统一的储存介质中
- 数据库的根本目标是解决数据共享问题
- 数据库管理系统(DBMS)是一种系统软件,定义、操纵、控制,是数据库系统的核心
- 数据库管理系统提供1.数据定义语言(DDL)创建,存储(创始人一般的工作)2.数据操纵语言(DML)包括查询及增、删、改(员工一般的工作)3.数据控制语言(DCL)负责数据完整,安全,检查,并发控制,故障恢复(医生一般的工作)
- 数据库管理员(DBA)
- 数据库系统(DBS)5部分组成:数据库(数据)、数据库管理系统(软件)、数据库管理员(人员)、系统平台之一——硬性平台(硬件)、系统平台之二——软件平台(软件)。
- 数据库应用系统(DBAS)
- 数据库系统的基本特点:数据的集成性、数据的高分享型和低冗余性、数据独立性(物理独立性和逻辑独立性)
- 数据库系统的内部结构体系
三级模式:概念模式(纯粹对数据本身【条形码】),外模式(用户模式,由概念模式推导而出【牙膏】),内模式(物理模式,操作系统和文件级别,未涉及设备级【存储、写入和空间调整】)
二级映射:概念模式与外模式,概念模式与内模式
数据模型
- 数据模型是数据库设计的核心
- 实体:存在的并可相互区分的任何事物
- 属性:实体代表的特定事物所具有的某方面的特征
数据模型可分为
1.概念数据模型(概念模型),主要有E-R模型(实体联系模型entity-relationship model)、扩充的E-R模型、面向对象模型及谓语模型。面相对象
E-R模型:实体,关系,属性(由数据流图设计E-R图)
不依赖于具体的计算机系统,不是DBMS支持的数据模型
2.逻辑数据模型(数据模型),主要有,层次模型、网状模型、关系模型、面像对象模型等
物理数据模型(物理模型)
逻辑设计的主要工作是将E-R图转化为关系模型
关系模式
关系模型等价于二维表
码/主码/关键词/主键/主属性:没有重复,可以唯一区分
外键:在一个表中不是主键,但另一个表中是主键
函数依赖:一个元素能推出另一个元素
范式
第一范式1NF:关系模式R中无重复的列
第二范式2NF:非主属性依赖于主键,没有不依赖的
第三范式3NF:非主属性不传递依赖于键
BC范式BCNF:每个属性都不传递依赖于键
集合运算
1)并,前提列相同
2)差,前提列相同,在原表中每一行去除被减表的相同行,保留下原表的改动
3)交,前提列相同
4)笛卡尔积:行与行的重新组合,按照排列组合方式联接
5)除法:行与行的重新拆分
关系数据库管理系统能实现的专门关系运算有三种操作:
选择、投影与联接
1)选择:选行
2)投影:选列
3)联接:拼接成一个可能更宽的列表
连接运算,找到符合列条件的行加宽
自然连接运算,找到两个表中取值相等的列,组成一个新的表,当行重复保留一次
数据库设计与管理
- 数据库开发阶段:需求分析阶段,概念设计阶段,逻辑设计阶段,物理设计阶段,编码阶段,测试阶段,运行阶段,经一步修改阶段
- 数据库的设计阶段是前四个阶段,需求分析(形成需求说明书)概念设计(形成概念数据模型)逻辑设计(形成逻辑数据模型)物理设计(形成数据库模式)
- 过程:建立概念模型,建立逻辑模型
- 关系视图设计是外模式设计
- 数据库的物理设计:提高访问速度和有效利用存储空间,影响数据的访问效率