VB公共基础知识.docx
《VB公共基础知识.docx》由会员分享,可在线阅读,更多相关《VB公共基础知识.docx(74页珍藏版)》请在冰豆网上搜索。
![VB公共基础知识.docx](https://file1.bdocx.com/fileroot1/2023-1/6/5144b000-aac9-4380-a0bc-d3e2cf45a7db/5144b000-aac9-4380-a0bc-d3e2cf45a7db1.gif)
VB公共基础知识
算法是指解题方案的准确而完整的描述
算法不等于程序,也不等于计算方法,程序不能优于算法。
算法的基本特征:
(1)可行性
(2)确定性
(3)有穷性
(4)拥有足够的情报
算法是一组严谨地定义运算顺序的规则,每一个规则都是有效的,并且是明确的,此运算顺序将在有限的次数下终止。
算法的基本要素:
数据对象的运算和操作
算法的控制结构:
●顺序
●选择
●循环
算法设计的基本方法:
●列举法
●归纳法
●递推
●递归
●减半递推
算法复杂度主要包括:
●时间复杂度计算工作量
●空间复杂度内存空间
数据结构是指相互有关联的数据元素的集合
相互有关联含有某种结构
在数据结构中应包含以下二方面的信息:
●数据元素本身的值
●各数据元素之间的互相关系
数据结构主要研究和讨论以下三个方面的问题:
●逻辑结构
●存储结构
●对各种数据结构的运算
(1)逻辑结构
具有逻辑关系的数据结构称为数据的逻辑结构
数据的逻辑关系中最简单的描述是前后件关系
前面的元素称为“前件”
位于后面的元素称为“后件”
(2)存储结构
数据的存储结构有三种:
●顺序结构
●链接结构
●索引结构
数据的逻辑结构反映数据元素之间的内在关系和固有的联系
数据的存储结构是数据的逻辑结构是表示数据元素在计算机中的存储形式。
(3)对各种数据结构的运算
主要是指对数据的查找、插入、删除、修改等运算
数据结构的二种表示方法:
(1)二元关系(前后件关系)
数据集合用记号D表示,数据元素之间的前后件关系用记号R表示,数据结构用记号B表示。
三者的关系式为:
B=(D,R)
D和R又可以用包含不同元素的向量来表示
比如:
一年四季的数据结构,可以这样表示:
B=(D,R)
D={春,夏,秋,冬}
R={(春,夏),(夏,秋),(秋,冬)}
(2)图形表示法
对于数据集合中的每一个数据元素,用中间标有元素值的方框表示,数据元素之间的联系用带有箭头的有向线段连接
方框一般称为结点,各数据元素之间的还含有前后件关系,就用有向线段从前件结点指向后件结点。
春→夏→秋→冬
数据结构分为两大类型:
●线性结构
●非线性结构
线性结构条件:
1.有并且只有一个根结点
2.每一个结点最多有一个前件,也最多有一个后件
常见的线性结构有:
●线性表
●栈
●队列
●线性链表
常见的非线性结构有:
●树
●二叉树
●图
空的数据结构不确定
线性表由一组线性结构的数据元素构成,元素之间的相对位置是线性的
线性表的长度——数据元素的个数
矩阵也是一个线性表
在更复杂的线性表中,每一个数据元素不是简单的一项,而是由多个数据项组成一个数据元素
由多个数据项组成的一个数据元素称为一条“记录”
由多条记录构成的线性表又称为“文件”
线性表的二种存储方式
●顺序
●链式
线性表的顺序存储结构具有两个基本特点:
(1)线性表中所有元素所占的存储空间是连续的;
(2)线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。
ADR(ai)=ADR(a1)+(i-1)k
...
a1
a2
...
ai
...
an
...
存储地址
ARD(a1)
ARD(a1)+k
ARD(a1)+(i-1)k
ARD(a1)+(n-1)k
顺序表的插入运算是通过移动元素来实现的
平均需要移动n/2个元素
进行顺序表的删除运算时也需要移动元素
平均需要移动(n-1)/2个元素
栈是一种特殊的线性表。
它限定,只能在一端进行插入和删除数据,另一端是封闭的
它的特点是:
先进后出,后进先出。
具有记忆功能
栈的运算为:
●入栈运算
●退栈运算
●读栈顶元素
当栈顶指针为0时,说明是栈空,此时是读取不到数据元素的
栈的存储有两种:
●顺序栈
●链式栈
队列也是一种线性表
是“先进先出”或“后进后出”的线性表
队列是在队尾插入新的数据,在队头取出数据,并在队列中删除该数据。
尾指针(rear)
头指针(front)
栈的空间是事先被开辟好的,假如存放的数据大于存储空间,将会产生“溢出”。
队列运算包括:
●入队运算
●退队运算
入队运算只涉及队尾指针rear的变化
退队运算只涉及队头指针front的变化
循环队列
将队列存储空间的最后一个位置设置到队头的前一个位置,在逻辑上形成环状的空间。
队列空的条件:
s=0;
队列满的条件:
s=1且front=rear
初始状态:
s=0,且front=rear=m
s=1不能进行入队运算
s=0不能进行退队运算
线性链表在物理存储单元上非连续、非顺序
数据元素的逻辑顺序是通过线性表中的指针链接来实现
每个结点由两部分组成:
数据域和指针域
线性链表的实例:
双向链表:
带链的栈:
an-1
0
a1
an
HEAD
带链的栈可以称为可利用栈。
当计算机需要新的结点时就从可利用栈中取出存储结点,假如从线性表中删除一个结点时,可将该结点放到可利用栈中去。
带链的队列
an
a2
a1
0
frontrear
线性链表的基本运算:
(1)在线性链表中包含指定元素的结点之前插入一个新元素。
(2)在线性链表中删除包含指定元素的结点。
(3)将两个线性链表按要求合并成一个线性链表,完成线性链表扩充任务。
(4)将一个线性链表按要求进行分解。
(5)逆转线性链表。
(6)复制线性链表。
(7)线性链表的排序。
(8)线性链表的查找。
线性链表的查找、插入和删除运算
(1)在线性链表中查找指定的元素
基本方法是从头指针开始沿着指针域路径往后扫描
(2)线性链表的插入
首先需要为该元素分配一个新结点,以便于存储该元素的值,然后将存放新元素值的结点链接到线性链表中指定的位置。
0
TOP
0
X
HEAD
(a)原来的可利用栈与线性链表
p
0
b
TOP
q
0
X
HEAD
(b)从可利用栈取得结点p,在线性链表中找到包含元素x的前一个结点q
p
0
b
TOP
q
0
X
HEAD
(c)p插入到q之后
3)线性链表的删除
线性链表的删除,首先要在链表中找到要删除的结点,然后将该结点放到可利用栈中去。
0
TOP
0
X
HEAD
(a)原来的可利用栈与线性链表
p
0
X
HEAD
(b)从线性链表中删除包含元素x的结点p后
0
TOP
qp
0
X
HEAD
(c)将被删除的结点p送回可利用栈后
线性链表的插入和删除结点都不需要移动数据,只是修改链接的指针而已。
*但是线性链表不能随机存取
循环链表
下图a是一个非空的循环链表,图b是一个空的循环链表:
循环链表的两个主要优点:
一是在循环链表中,只要指出表中任何一个结点的位置,就可以从它出发访问到表中其他所有的结点;
二是由于在循环链表中设置了一个表头结点,在任何情况下,循环链表中至少有一个结点存在,从而使空表与非空表的运算统一。
*循环链表是在单向链表的基础上增加了一个表头结点,其插入和删除运算与单链表相同。
而且它可以从任一结点出发来访问表中其他所有结点,并实现空表与非空表的运算的统一。
树的基本概念
树是一种简单的非线性结构。
在树这种数据结构中,所有数据元素之间的关系具有明显的层次特性。
在树结构中,每一个结点的前件,称为父结点。
没有前件的结点只有一个,称为树的根结点。
每一个结点的后件,称为子结点。
没有后件的结点称为叶子结点。
在树结构中,一个结点所拥有的后件的个数称为该结点的度,所有结点中最大的度称为树的度。
树的最大层次称为树的深度。
在计算机中可以用树结构来表示算术表达式。
用树来表示算术表达式的原则如下:
①表达式中的每一个运算符在树中对应一个结点,称为运算符结点
②运算符的每一个运算对象在树中,为该运算符结点的子树(在树中的顺序为从左到右)
③运算对象中的单变量均为叶子结点
根据以上原则,可以将表达式
a*(b+c/d)+e*h–g*f(s,t,x+y)
用下图的树来表示,先可将这个表达式进行分解成如下式子:
a*(b+c/d)和e*h–g*f(s,t,x+y),这时它们的父运算符结点为“+”
或者分解成:
a*(b+c/d)+e*h和g*f(s,t,x+y),这时它们的父运算符结点为“-”
2、二叉树及其基本性质
(1)什么是二叉树
二叉树是一种很有用的非线性结构,它具有以下两个特点:
1)非空二叉树只有一个根结点;
2)每一个结点最多有两棵子树,且分别称为该结点的左子树与右子树。
*根据二叉树的概念可知,二叉树的度可以为0(叶子结点)、1(只有一棵子树)或2(有2棵子树)这三种情况。
(2)二叉树的基本性质
性质1在二叉树的第k层上,最多有2k-1(k≥1)个结点。
性质2深度为m的二叉树最多有个2m-1个结点。
第1层的最大结点数加到m层的最大结点数:
21-1+22-1+
+2m-1=n2×(21-1+22-1+
+2m-1)=2×n
2m-1=n
性质3在任意一棵二叉树中,度数为0的结点(即叶子结点)总比度为2的结点多一个。
n0=n2+1
总的结点数n等于叶子结点n0、度数为1的结点n1、度数为2结点n2之和:
n=n0+n1+n2
除了根结点,每个结点都有一个前件(进入的分支),假设进入的分支数为m,所以总的结点数n等于进入的分支数m+1
n=m+1
又由于这m个进入分支又分别是由非叶子结点射出的。
其中度数为1的结点射出1个分支,度数为2的结点射出2个分支,因此:
m=n1+2n2
n0=n2+1
性质4具有n个结点的二叉树,其深度至少为log2n+1,其中log2n表示取log2n的整数部分。
3、满二叉树与完全二叉树
满二叉树:
除最后一层外,每一层上的所有结点都有两个子结点。
完全二叉树:
除最后一层外,每一层上的结点数均达到最大值;在最后一层上只缺少右边的若干结点。
*根据完全二叉树的定义可得出:
度为1的结点的个数为0或1。
下图a表示的是满二叉树,下图b表示的是完全二叉树:
完全二叉树还具有如下两个特性:
性质5具有n个结点的完全二叉树深度为log2n+1。
性质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;否则该结点无右子结点。
二叉树通常采用链式存储结构
用于存储二叉树的存储结点的指针域有两个:
左指针域和右指针域
二叉树的链式存储结构又称为二叉链表
*一般二叉树通常采用链式存储结构,对于满二叉树与完全二叉树来说,可以按层序进行顺序存储。
二叉树的遍历
前序遍历(DLR):
根→左子树→右子树
中序遍历(LDR):
左子树→根→右子树
后序遍历(LRD):
左子树→右子树→根
J
H
G
I
F
E
D
C
B
A
查找技术:
1、顺序查找
在下列两种情况下只能采用顺序查找:
1)如果线性表是无序表,则存储结构不管是顺序还是链式
2)即使是有序线性表,如果采用链式存储结构,也只能用顺序查找。
2、二分法查找
只适用于有序的顺序存储结构
1)若中间项(中间项mid=(n-1)/2,mid的值四舍五入取整)的值等于x,则说明已查到;
2)若x小于中间项的值,则在线性表的前半部分查找;
3)若x大于中间项的值,则在线性表的后半部分查找。
排序技术:
1、交换类排序法(方法:
冒泡排序,快速排序)。
(1)冒泡排序法。
一种最简单的交换类排序方法,它是通过相邻数据元素的交换逐步将线性表变成有序。
(2)快速排序法
也是一种交换类的排序方法,但作了改进,可以通过一次交换消除多个逆序,所以它比冒泡排序法的排序速度要快,故称为快速排序法。
2、插入类排序法(简单插入排序,希尔排序)。
(1)简单插入排序法
7
5
8
2
4
9
6
6
1
1
3
1
5
4
9
6
6
1
3
7
8
2
9
6
6
1
3
8
2
4
5
1
7
8
2
4
9
6
6
1
3
7
5
1
6
8
2
4
1
1
7
5
3
9
6
6
7
2
4
9
6
1
1
3
5
8
7
5
8
2
4
9
6
6
1
1
3
5
4
9
6
7
1
3
8
2
6
1
7
5
9
6
4
3
6
1
1
8
2
8
9
2
6
6
1
1
3
7
5
4
6
7
9
8
2
6
1
1
3
5
4
(2)希尔排序法
h的取法一般为:
hi=n/2k(k=1,2,
,[㏒2n]),其中n为待排序序列的长度。
h=6
7
19
24
13
31
8
82
18
44
63
5
29
h=3
7
18
24
5
13
82
8
19
44
29
63
31
h=1
7
5
8
18
13
63
24
19
29
44
82
31
29
44
31
63
82
最后结果
7
5
8
13
18
24
19
3、选择类排序法(简单选择排序,堆排序)。
(1)简单选择排序法
89
原序列
21
47
19
16
85
48
56
16
85
48
56
21
89
47
19
第1遍选择
19
89
85
48
56
21
47
16
第2遍选择
21
89
85
48
56
47
19
16
第3遍选择
47
85
48
56
89
21
19
16
第4遍选择
48
56
89
85
21
47
19
16
第5遍选择
56
89
48
21
47
19
16
85
第6遍选择
48
56
21
47
19
16
85
89
第7遍选择
(2)堆排序法
具有n个元素的序列(h1,h2,
,hn),当且仅当满足
h1≥h2或h1≤h2
hi≥h2i+1hi≤h2i+1
(i=1,2,
,n/2)时称之为堆。
91
24
12
30
53
36
91
47
24
12
30
53
85
36
85
47
53
91
36
47
24
12
30
85
总结:
各种排序法比较:
本章应考点拨:
本章内容在笔试中会出现5-6个题目,是公共基础知识部分出题量比较多的一章,所占分值也比较大,约10分。
第二章程序设计基础
程序设计风格:
强调:
“清晰第一,效率第二”
应注重和考虑下述一些因素:
(1)源程序文档化
(2)数据说明
(3)语句的结构
信息隐蔽是指:
●采用封装技术,将程序模块的实施细节隐藏起来,模块的接口要尽量简单。
●一个模块所包含的信息(过程或数据),对于不需要这些信息的其它模块来说,是不能访问的。
模块的独立性是指模块之间的耦合程度要小。
(4)输入和输出。
面向过程的程序设计,主要考虑的是模块化、结构化设计
结构化程序设计方法的主要原则:
●自顶向下
●逐步求精
●模块化
●限制使用goto语句。
结构化程序的基本结构有三种:
●顺序结构
●选择结构
●重复结构
程序的单入口和单出口是程序模块化设计中的一条重要的原则
面向对象的程序设计:
●对象
对对象的访问,可以通过对象的属性、方法进行
面向对象的程序设计方法的主要优点:
(1)与人类习惯的思维方法所一致;
(2)稳定性好;
(3)可重用性好;
(4)易于开发大型软件产品;
(5)可维护性好。
●属性
●方法/操作/服务
操作是对象的动态属性;对象的外部特征是对象的静态属性
对象的基本特点:
◆标识惟一性
◆分类性
◆多态性
◆封装性
◆模块独立性好。
●实例
●继承
●类
●多态性
●消息
对象之间不能发生直接联系,但可以通过“消息”来进行沟通、来传递信息。
消息的组成包括:
(1)接收消息的对象的名称;
(2)消息标识符,也称消息名称;
(3)零个或多个参数。
本章应考点拨:
本章在考试中会出现约1个题目,所占分值大约占2分,是出题量较小的一章。
本章内容比较少,也很简单,掌握住基本的概念就可以轻松应对考试了,所以在这部分丢分,比较可惜。
第三章软件工程基础
3.1软件工程基本概念
1、软件的相关概念
计算机软件包括:
●程序
●数据
●相关文档。
软件的分类:
●应用软件
●系统软件
●支撑软件(或工具软件)
软件的特点包括:
1)软件是一种逻辑实体,不是物理实体;
2)软件的生产与硬件不同,它没有明显的制作过程;
3)软件在运行、使用期间不存在磨损和老化的问题;
4)软件的开发和运行对计算机系统具有依赖性,受计算机的硬件所制约,这就导致了软件的移植问题;
5)软件的复杂性高,成本昂贵。
是因为人力成本高、开发困难所导致;
6)软件开发涉及诸多的社会因素,比如版权、健康向上、有利于社会稳定等等。
2、软件危机与软件工程
软件工程的提出源自于软件危机。
将软件危机可以归结为成本、质量、生产率等问题。
为了解决软件危机,所以就提出了软件工程这一概念。
软件工程的核心思想就是把软件产品看成是一个工程产品。
工程化的概念:
●需求计划
●可行性研究
●工程审批
●质量监督等
工程化目标:
●追求进度
●经费
●质量
软件工程也有自身的特点,比如:
●结构化
●层次化
●面向对象
●模型
●过程
软件工程的目的就是要构造出一个优良的软件系统,软件工程的理论和技术性研究的内容主要包括以下两点:
1)软件开发技术
2)软件工程管理
软件工程的主要思想是将工程化原则运用到软件开发过程,它包括3个要素:
●方法
●工具
●过程
3、软件生命周期
生命周期是从软件的提出开始、软件的实现、软件的使用和维护到软件的停止使用退役为止,更为具体地说,生命周期一般可分为三个阶段:
●软件定义
●软件开发
●软件维护
1)在软件定义阶段主要是进行可行性研究,并完成如下任务:
●制定计划
●需求分析
在制定计划中需要:
●确定总目标
●可行性研究
●探讨解决方案
●制定开发计划
2)软件开发阶段可分为:
●软件设计
●软件实现
●软件测试
软件设计主要包括:
●概要设计
●详细设计
3)软件运行维护阶段:
软件已交付使用和投入运行,并在运行使用过程中不断地维护,同时根据提出的新的要求进行可能的扩充和删改。
4、软件工程的目标和与原则
(1)软件工程目标:
在给定成本、进度的前提下,开发出具有如下特性的产品:
●有效性
●可靠性
●可理解性
●可维护性
●可重用性
●可适应性
●可移植性
●可追踪性
●可互操作性
●能充分满足用户的需求。
(2)软件工程需要达到的基本目标应该是:
●付出较低的开发成本;
●达到要求的软件功能;
●取得较好的软件性能;
●开发易于移植的软件;
●需要较低的维护费用;
●能按时完成开发,并及时交付使用。
(3)软件工程原则:
●抽象
●信息隐蔽
●模块化
●局部化
●确定性
●一致性
●完备性
●可验证性
5、软件开发工具与软件开发环境
(1)软件开发工具
●单项开发工具
●集成开发工具
(2)软件开发环境
是指全面支持软件开发全过程的软件工具的集合。
各种软件工具+开发手段+一个存放开发过程的信息的中心数据库
3.2结构化分析方法
结构化分析方法包括以下三个组成部分:
●结构化分析方法
●结构化设计方法
●结构化编程方法。
其中核心和基础的是结构化程序设计理论。
这些理论包括:
●需求分析与需求分析方法
●结构化分析方法
●软件需求规格说明书(SRS)
1、需求分析与需求分析方法
需求分析的任务是:
●发现需求
●求精和提炼
●建立模型
●定义需求
需求分析的任务就是建立目标系统的逻辑模型,其中包括:
●数据模型
●功能模型
●控制模型
需求分析主要解决“做什么”的问题。
需求分析阶段的工作可以概括为下述的四个方面:
1需求获取;
2需求分析;
3编写需求说明书;
4需求评审。
需求获取涉及的关键问题有:
●对问题空间的理解
●人与人之间的沟通
●不断变化的需求
常见的需求分析方法主要有:
1)结构化需求分析方法,主要包括:
●面向数据流的结构化分析方法
●面向数据结构的结构化分析方法
2)面向对象的分析方法
从需求分析建立的模型特性来分,面向对象方法还可以为:
●静态分析方法
●动态分析方法
2、结构化分析方法
结构化分析方法是结构化程序设计理论在软件需求分析阶段的具体应用。
它主要包括:
●面向数据流的结构化分析方法
●面向数据结构的结构化分析方法
结构化分析方法常用的工具是:
●数据流程图(DFD)
●数据字典(DD)
●结构化英语
●判定表和判定树
(1)数据流图(DFD)
数据流图的主要图形元素与说明如下:
画数据流图的基本步骤是:
1.由外向里
2.自顶向下
3.逐层分解
下图是一个数据流图的示