计算机二级公共基础知识(全)

1.1 算法

考点1 算法的基本概念

计算机解题的过程实际上是在实施某种算法,这种算法称为计算机算法。

算法(algorithm)是一组严谨地定义运算顺序的规则,并且每一个规则都是有效的,同时是明确的;此顺序将在有限的次数后终止。算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作。

1算法的基本特征

(1)可行性(effectiveness):针对实际问题而设计的算法,执行后能够得到满意的结果。

(2)确定性(definiteness):算法中的每一个步骤都必须有明确的定义,不允许有模棱两可的解释和多义性。

(3)有穷性(finiteness):算法必需在有限时间内做完,即算法必需能在执行有限个步骤之后终止。

(4)拥有足够的情报:要使算法有效必需为算法提供足够的情报当算法拥有足够的情报时,此算法才最有效的;而当提供的情报不够时,算法可能无效。

2算法的基本要素

(1)算法中对数据的运算和操作:每个算法实际上是按解题要求从环境能进行的所有操作中选择合适的操作所组成的一组指令序列。

计算机可以执行的基本操作是以指令的形式描述的。一个计算机系统能执行的所有指令的集合,称为该计算机系统的指令系统。计算机程序就是按解题要求从计算机指令系统中选择合适的指令所组成的指令序列在一般的计算机系统中,基本的运算和操作有以下4类:

①算术运算:主要包括加、减、乘、除等运算;

②逻辑运算:主要包括“与”、“或”、“非”等运算;

③关系运算:主要包括“大于”、“小于”、“等于”、“不等于”等运算;

④数据传输:主要包括赋值、输入、输出等操作。

(2)算法的控制结构:一个算法的功能不仅仅取决于所选用的操作,而且还与各操作之间的执行顺序有关。算法中各操作之间的执行顺序称为算法的控制结构。

算法的控制结构给出了算法的基本框架,它不仅决定了算法中各操作的执行顺序,而且也直接反映了算法的设计是否符合结构化原则。描述算法的工具通常有传统流程图、N-S结构化流程图、算法描述语言等。一个算法一般都可以用顺序、选择、循环3种基本控制结构组合而成。

(3)算法设计的基本方法

计算机算法不同于人工处理的方法,下面是工程上常用的几种算法设计,在实际应用时,各种方法之间往往存在着一定的联系。

(1)列举法

列举法是计算机算法中的一个基础算法。列举法的基本思想是,根据提出的问题,列举所有可能的情况,并用问题中给定的条件检验哪些是需要的,哪些是不需要的。

列举法的特点是算法比较简单。但当列举的可能情况较多时,执行列举算法的工作量将会很大。因此,在用列举法设计算法时,使方案优化,尽量减少运算工作量,是应该重点注意的。

(2)归纳法

归纳法的基本思想是,通过列举少量的特殊情况,经过分析,最后找出一般的关系。从本质上讲,归纳就是通过观察一些简单而特殊的情况,最后总结出一般性的结论。

(3)递推

递推是指从已知的初始条件出发,逐次推出所要求的各中间结果和最后结果。其中初始条件或是问题本身已经给定,或是通过对问题的分析与化简而确定。递推本质上也属于归纳法,工程上许多递推关系式实际上是通过对实际问题的分析与归纳而得到的,因此,递推关系式往往是归纳的结果。对于数值型的递推算法必须要注意数值计算的稳定性问题。

(4)递归

人们在解决一些复杂问题时,为了降低问题的复杂程度(如问题的规模等),一般总是将问题逐层分解,最后归结为一些最简单的问题。这种将问题逐层分解的过程,实际上并没有对问题进行求解,而只是当解决了最后那些最简单的问题后,再沿着原来分解的逆过程逐步进行综合,这就是递归的基本思想。

递归分为直接递归与间接递归两种。

(5)减半递推技术

实际问题的复杂程度往往与问题的规模有着密切的联系。因此,利用分治法解决这类实际问题是有效的。工程上常用的分治法是减半递推技术。

所谓“减半”,是指将问题的规模减半,而问题的性质不变;所谓“递推”,是指重复“减半”的过程。

(6)回溯法

在工程上,有些实际问题很难归纳出一组简单的递推公式或直观的求解步骤,并且也不能进行无限的列举。对于这类问题,一种有效的方法是“试”。通过对问题的分析,找出一个解决问题的线索,然后沿着这个线索逐步试探,若试探成功,就得到问题的解,若试探失败,就逐步回退,换别的路线再逐步试探。

4算法设计的要求

通常一个好的算法应达到如下目标:

(l)正确性(correctness)

正确性大体可以分为以下4个层次:

①程序不含语法错误;

②程序对于几组输入数据能够得出满足规格说明要求的结果;

③程序对于精心选择的典型、苛刻而带有刁难性的几组输入数据能够得出满足规格说明要求的结果;

④程序对于一切合法的输入数据都能产生满足规格说明要求的结果。

(2)可读性(readability)

算法主要是为了方便入的阅读与交流,其次才是其执行。可读性好有助于用户对算法的理解;晦涩难懂的程序易于隐藏较多错误,难以调试和修改。

(3)健壮性(robustness)

当输入数据非法时,算法也能适当地做出反应或进行处理,而不会产生莫名其妙的输出结果。

(4)效率与低存储量需求

效率指的是程序执行时,对于同一个问题如果有多个算法可以解决,执行时间短的算法效率高;存储量需求指算法执行过程中所需要的最大存储空间

考点2 算法的复杂度

1算法的时间复杂度

算法的时间复杂度,是指执行算法所需要的计算工作量。同一个算法用不同的语言实现,或者用不同的编译程序进行编译,或者在不同的计算机上运行,效率均不同。这表明使用绝对的时间单位衡量算法的效率是不合适的。撇开这些与计算机硬件、软件有关的因素,

可以认为一个特定算法“运行工作量”的大小,只依赖于问题的规模(通常用整数n表示),它是问题的规模函数。即

算法的工作量=f(n)

例如,在N×N矩阵相乘的算法中,整个算法的执行时间与该基本操作(乘法)重复执行的次数n3成正比,也就是时间复杂度为n3,即

f(n)=O(n3)

在有的情况下,算法中的基本操作重复执行的次数还随问题的输入数据集不同而不同。例如在起泡排序的算法中,当要排序的数组a初始序列为自小至大有序时,基本操作的执行次数为氏当初始序列为自大至小有序时,基本操作的执行次数为n(n-1)/2。对这类算法的分析,可以采用以下两种方法来分析。

(1)平均性态(Average Behavior)

所谓平均性态是指各种特定输入下的基本运算次数的加权平均值来度量算法的工作量。

设x是所有可能输入中的某个特定输入,p(x)是x出现的概率(即输入为x的概率),t(x)是算法在输入为x时所执行的基本运算次数,则算法的平均性态定义为

其中Dn表示当规模为n时,算法执行的所有可能输入的集合。

(2)最坏情况复杂性(Worst-case Complexity)

所谓最坏情况分析,是指在规模为n时,算法所执行的基本运算的最大次数。

2算法的空间复杂度

算法的空间复杂度是指执行这个算法所需要的内存空间。

一个算法所占用的存储空间包括算法程序所占的空间、输入的初始数据所占的存储空间以及算法执行中所需要的额外空间。其中额外空间包括算法程序执行过程中的工作单元以及某种数据结构所需要的附加存储空间。如果额外空间量相对于问题规模来说是常数,则称该算法是原地(in place)工作的。在许多实际问题中,为了减少算法所占的存储空间,通常采用压缩存储技术,以便尽量减少不必要的额外空间。

考点3 数据结构的定义

数据结构(data structure)是指相互之间存在一种或多种特定关系的数据元素的集合,即数据的组织形式。

数据结构作为计算机的一门学科,主要研究和讨论以下三个方面:

(l)数据集合中个数据元素之间所固有的逻辑关系,即数据的逻辑结构;

(2)在对数据元素进行处理时,各数据元素在计算机中的存储关系,即数据的存储结构;

(3)对各种数据结构进行的运算。

讨论以上问题的日的是为了提高数据处理的效率,所谓提高数据处理的效率有两个方面:

(l)提高数据处理的速度;

(2)尽量节省在数据处理过程中所占用的计算机存储空间。

数据(data):是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。

数据元素(data element):是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。

数据对象(data object):是性质相同的数据元素的集合,是数据的一个子集。

在一般情况下,在具有相同特征的数据元素集合中,各个数据元素之间存在有某种关系(即连续),这种关系反映了该集合中的数据元素所固有的一种结构。在数据处理领域中,通

常把数据元素之间这种固有的关系简单地用前后件关系(或直接前驱与直接后继关系)来描述。

前后件关系是数据元素之间的一个基本关系,但前后件关系所表示的实际意义随具体对象的不同而不同。一般来说,数据元素之间的任何关系都可以用前后件关系来描述。

1数据的逻辑结构

数据结构是指反映数据元素之间的关系的数据元素集合的表示。更通俗地说,数据结构是指带有结构的数据元素的集合。所谓结构实际上就是指数据元素之间的前后件关系。

一个数据结构应包含以下两方面信息:

(1)表示数据元素的信息;

(2)表示各数据元素之间的前后件关系。

数据的逻辑结果是对数据元素之间的逻辑关系的描述。它可以用一嘎数据元素的集合和定义在此集合中的若干关系来表示。

数据的逻辑结构包括集合、线性结构、树型结构和图形结构四种。

线性结构:数据元素之间构成一种顺序的线性关系。

树型结构:数据元素之间形成一种树型的关系

数据的逻辑结构有两个要素:一是数据元素的集合,通常记为D; 二是D上的关系,它反映了数据元素之间的前后件关系,通常记为R。一个数据结构可以表示成B=(C,R)其中B表示数据结构。为了反映D中各元素之间的前后件关系,一般用二元组来表示。例如,复数是一种数据结构,在计算机科学中,复数可取如下定义:

B=(C,R)

其中,C是含有两个实数的集合{c1,c2};R是定义在集合C上的一种关系{},其中有序偶{}表示c1是复数的实部,c2是复数的虚部。

2数据的存储结构

数据的逻辑结构在计算机存储空间中的存放形式,称为数据的存储结构(也称为数据的物理结构)。

由于数据元素在计算机存储空间中的位置关系可能与逻辑关系不同,因此,为了表示存放在计算机存储空间中的各数据元素之间的逻辑关系(即前后件关系),在数据的存储结构中,不仅要存放各数据元素的信息,还需要存放各数据元素之间的前后件关系的信息。

一种数据的逻辑结构根据需要可以表示成多种存储结构,常用的结构有顺序、链接、索引等存储结构而采用不同的存储结构,其数据处理的效率是不同的。因此,在进行数据处理是,选择合适的存储结构是很重要的。

考点4 数据结构的图形表示

数据结构除了用二元关系表示外,还可以直观地用图形表示。

在数据结构的图形表示中,对于数据集合D中的每一个数据元素用中间标有元素值的方框表示,一般称之为数据结点,并简称为结点;为了进一步表示各数据元素之间的前后件关系,对于关系R中的每一个二元组,用一条有向线段从前件结点指向后件结点。

在数据结构中,没有前件的结点称为根结点;没有后件的结点称为终端结点(也称为叶子结点)。

一个数据结构中的结点可能是在动态变化的。根据需要或在处理过程中,可以在一个数据结构中增加一个新结点(称为插入运算),也可以删除数据结构中的某个结点(称为删除运算)。插入与删除是对数据结构的两种基本运算。除此之外,对数据结构的运算还有查找、分类、合并、分解、复制和修改等。

考点5 线性结构与非线性结构

如果在一个数据结构中一个数据元素都没有,则称该数据结构为空的数据结构。

根据数据结构中各数据元素之间前后件关系的复杂程度,一般将数据结构分为两大类型:线性结构与非线性结构。

非空数据结构满足:

(l)有且只有一个根结点;

(2)每一个结点最多有一个前件,也最多有一个后件。

则称该数据结构为线性结构。线性结构又称为线性表。一个线性表是n个数据元素的有限序列。至于每个元素的具体含义,在不同的情况下各不相同,它可以是一个数或一个符号,也可以是一页书,甚至其他更复杂的信息。如果一个数据结构不是线性结构,称之为非线性结构。线性结构与非线性结构都可以是空的数据结构。对于空的数据结构,如果对该数据结构的运算是按线性结构的规则来处理的,则属于线性结构;否则属于非线性结构。1.3 线性表及顺序存储结构

考点6 线性表的定义

线性表是n(n≥0)个元素构成的有限序列(a1,a2,…,an)。表中的每一个数据元素,除了第一个外,有且只有一个前件,除了最后一个外,有且只有一个后件。即线性表是一个空表,或可以表示为

(a1,a2,…,an)

其中ai(i=1,2,…,n)是属于数据对象的元素,通常也称其为线性表中的一个结点。

其中,每个元素可以简单到是一个字母或是一个数据,也可能是比较复杂的由多个数据项组成的。在复杂的线性表中,由若干数据项组成的数据元素称为记录(record),而由多个记录构成的线性表又称为文件(file)。在非空表中的每个数据元素都有一个确定的位置,如a1是第一个元素,an是最后一个数据元素,ai是第i个数据元素,称i为数据元素ai在线性表中的位序。非空线性表有如下一些结构特征:

(1)有且只有一个根结点a1,它无前件;

(2)有且只有一个终端结点an,它无后件;

(3)除根结点与终端结点外,其他所有结点有且只有一个前件,也有且只有一个后件。线性表中结点的个数n称为线性表的长度。当n=0时称为空表。

考点7 线性表的顺序存储结构

线性表的顺序表指的是用一组地址连续的存储单元依次存储线性表的数据元素。

线性表的顺序存储结构具备如下两个基本特征:

(l)线性表中的所有元素所占的存储空间是连续的;

(2)线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。

假设线性表的每个元素需要占用k个存储单元,并以所占的存储位置ADR(ai+1)和第i 个数据元素的存储位置ADR(ai)之间满足下列关系:

ADR(ai+1)=ADR(ai)+k

线性表第i个元素ai的存储位置为

ADR(ai)=ADR(a1)+(i-1)×k

式中ADR(ai)是线性表的第一个数据元素a,的存储位置,通常称做线性表的起始位置或基址。

线性表的这种表示称做线性表的顺序存储结构或顺序映像,这种存储结构的线性表为顺序表。表中每一个元素的存储位置都和线性表的起始位置相差一个和数据元素在线性表中的位序成正比例的常数。如图1-4所示。由此只要确定了存储线性表的起始位置,线性表中任一数据元素都可以随机存取,所以线性表的顺序存储结构是一种随机存取的存储结构。

在程序设计语言中,通常定义一个一维数组来表示线性表的顺序存储空间。在用一维数组存放线性表时,该一维数组的长度通常要定义得比线性表的实际长度大一些,以便对线性表进

行各种运算,特别是插入运算。在线性表的顺序存储结构下,可以对线性表做以下运算:(l)在线性表的指定位置处加入一个新的元素(即线性表的插入);

(2)在线性表中删除指定的元素(即线性表的删除);

(3)在线性表中查找某个(或某些)特定的元素(即线性表的查找);

(4)对线性表中的元素进行整序(即线性表的排序);

(5)按要求将一个线性表分解成多个线性表(即线性表的分解);

(6)按要求将多个线性表合并成一个线性表(即线性表的合并);

(7)复制一个线性表(即线性表的复制);

(8)逆转一个线性表(即线性表的逆转)等。

考点8 顺序表的插入运算

线性表的插入运算是指在表的第i(1≤i≤n+l)个位置上,插入一个新结点x,使长度为n 的线性表

(a1,…,ai-1,ai,…,an)

变成长度为n+1的线性表

(a1,…,ai-1,x,ai,…,an)

现在分析算法的复杂度。这里的问题规模是表的长度,设它的值为n。该算法的时间主要花费在循环结点后移语句上,该语句的执行次数(即移动结点的次数)是n-i+1。由此可看出,所需移动结点的次数不仅依赖于表的长度,而且还与插入位置有关。

当i=n+1时,由于循环变量的终值大于初值,结点后移语句将不进行;这是最好情况,其时间复杂度O(1);

当i=1时,结点后移语句,将循环执行n次,需移动表中所有结点,这是最坏情况,其时间复杂度为O(n)。

由于插入可能在表中任何位置上进行,因此需分析算法的平均复杂度。

在长度为n的线性表中第i个位置上插入一个结点,令Eis ( n )表示移动结点的期望值(即移动的平均次数),则在第i个位置上插入一个结点的移动次数为n-i+1。故

不失一般性,假设在表中任何位置(1≤i≤n+1)上插入结点的机会是均等的,则

p1=p2=p3=…=pn+1=1/(n+1)

因此,在等概率插入的情况下,

也就是说,在顺序表上做插入运算,平均要移动表上一半的结点。当表长n较大时,算法的效率相当低。虽然Eis ( n )中n的的系数较小,但就数量级而言,它仍然是线性级的。因此算法的平均时间复杂度为O(n)。

考点9 顺序表的删除运算

线性表的删除运算是指将表的第i(1≤i≤n)个结点删除,使长度为n的线性表:

(a1,…,ai-1,ai,ai+1,…,an)

变成长度为n-l的线性表

(a1,…,ai-1,ai+1,…,an)

该算法的时间分析与插入算法相似,结点的移动次数也是由表长n和位置i决定。若i=n,则由于循环变量的初值大于终值,前移语句将不执行,无需移动结点;若i=1,则前移语句将循环执行n一1次,需移动表中除开始结点外的所有结点。这两种情况下算法的时间复杂度分别为O(1)和O(n)。

删除算法的平均性能分析与插入算法相似。在长度为n的线性表中删除一个结点,令Ede(n)表示所需移动结点的平均次数,删除表中第i个结点的移动次数为n-i,故

式子中,pi表示删除表中第i个结点的概率。在等概率的假设下,

p1=p2=p3=…=pn=1/n

由此可得:

即在顺序表上做删除运算,平均要移动表中约一半的结点,平均时间复杂度也是O(n)。

1.4 栈和队列

考点10 栈及其基本运算

1什么是栈

栈实际也是线性表,只不过是一种特殊的线性表。栈(Stack)是只能在表的一端进行插入和删除运算配线性表,通常称插入、删除的这一端为栈顶(Top),另一端为栈底(Bottom)。当表中没有元素时称为空栈(栈顶元素总是后被插入的元素,从而也是最先被删除的元素;栈底元素总是最先被插入的元素,从而也是最后才能被删除的元素。

假设栈S=(al,a2,a3,…,an),则a1,称为栈底元素,an为栈顶元素。栈中元素按a1,a2,a3,…,an的次序进栈,退栈的第一个元素应为栈顶元素。换句话说,栈的修改是按后进先出的原则进行的。因此,栈称为先进后出表(FILO,First In Last Out),或“后进先出”表(LIFO,Last In First Out),如图1-7所示。

2栈的顺序存储及其运算

(l)入栈运算:入栈运算是指在栈顶位置插入一个新元素。首先将栈顶指针加一(即top加1),然后将元素插入到栈顶指针指向的位置。当栈顶指针已经指向存储空间的最后一个位置时,说明栈空间已满,不可能再进行入栈操作。这种情况称为栈“上溢”错误。如图1-8所示。

(2)退栈运算:退栈是指取出栈顶元素并赋给一个指定的变量。首先将栈顶元素(栈顶指针指向的元素)赋给一个指定的变量,然后将栈顶指针减一(即t叩减1)。当栈顶指针为。时,说明栈空,不可进行退栈操作。这种情况称为栈的“下溢”错误。(3)读栈顶元素:读栈顶元素是指将栈顶元素赋给一个指定的变量。这个运算不删除栈顶元素,只是将它赋给一个变量,因此栈顶指针不会改变。当栈顶指针为0时,说明栈空,读不到栈顶元素。考点11 队列及其基本运算

1什么是队列

队列(queue)是只允许在一端删除,在另一端插入的顺序表,允许删除的一端叫做队头(front),允许插入的一端叫做队尾(rear),

当队列中没有元素时称为空队列。在空队列中依次加入元素a1,a2,…,an之后,a1是队头元素,an是队尾元素。显然退出队列的次序也只能是a1,a2,…,an也就是说队列的修改是依先进先出的原则进行的。因此队列亦称作先进先出(FIFO,First In First Out)的线性表,或后进后出(LILO,Last In Last Out)的线性表。往队列队尾插入一个元素称为入队运算,从队列的排头删除一个元素称为退队运算,如图1-10所示。

一个队列币。删除个儿素后的队列间插入元素E后的队列

2循环队列及其运算

在实际应用中,队列的顺序存储结构一般采用循环队列的形式。所谓循环队列,就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间

在循环队列中,用队尾指针rear指向队列中的队尾元素,用排头指针front指向排头元素的前一个位置。因此,从排头指针front指向的后一个位置直到队尾指针rear指向的位置之间所有的元素均为队列中的元素。

可以将向量空间想象为一个首尾相接的圆环,如图1-12所示,并称这种向量为循环向量,存储在其中的队列称为循环队列( Cireular Queue)。在循环队列中进行出队、入队操作时,头尾指针仍要加1,朝前移动。只不过当头尾指针指向向量上界(Queuesize-l)时,其加1操作的结果是指向向量的下界0。

由于入队时尾指针向前追赶头指针,出队时头指针向前追赶尾指针,故队空和队满时头尾指针均相等。因此,我们无法通过front=rear来判断队列“空”还是“满”。

在实际使用循环队列时,为了能区分队列满还是队列空,通常还需增加一个标志、,、值的定义如下:当s=0时表示队列空;当s=1时表示队列非空。

(l)入队运算

入队运算是指在循环队列的队尾加入一个新元素。首先将队尾指针进一(即rear=rear+1),并当rear=m+l时置rear=1;然后将新元素插入到队尾指针指向的位置。当循环队列非空(s=l)且队尾指针等于队头指针时,说明循环队列已满,不能进行入队运算,这种情况称为“上溢”。

(2)退队运算

退队运算是指在循环队列的队头位置退出一个元素并赋给指定的变量。首先将队头指针一进一(即from=front +1),并当front = m+1时,置front=1然后将排头指针指向的元素赋给指定的变量。当循环队列为空(s =0)时,不能进行退队运算,这种情况称为“下溢”。转贴于:计算机二级考试_考试大【责编:daiy 纠错】

1.5 线性链表

考点12 线性单链表的结构及其基本运算

1什么是线性链表

(l)线性表顺序存储的缺点

①在一般情况下,要在顺序存储的线性表中插入一个新元素或删除一个元素时,为了保证插入或删除后的线性表仍然为顺序存储,则在插入或删除过程中需要移动大量的数据元素。因此采用顺序存储结构进行插入或删除的运算效率很低;

②当为一个线性表分配顺序存储空间后,如果出现线性表的存储空间已满,但还需要插入新的元素时栈会发生“上溢”错误;

③计算机空间得不到充分利用,并且不便于对存储空间的动态分配。

(2)线性表链式的基本概念

在定义的链表中,若只含有一个指针域来存放下一个元素地址,称这样的链表为单链表或线性链表。

在链式存储方式中,要求每个结点由两部分组成:一部分用于存放数据元素值,称为数据域;另一部分用于存放指针,称为指针域。其中指针用于指向该结点的前一个或后一个结点(即前件或后件)。如图1-13所示。

2线性单链表的存储结构

用一组任意的存储单元来依次存放线性表的结点,这组存储单元既可以是连续的,也可以是不连续的,甚至是零散分布在内存中的任意位置上的。因此,链表中结点的逻辑次序和物理次序不一定相同。为了能正确表示结点间的逻辑关系,在存储每个结点值的同时,还必须存储指示其后件结点的地址(或位置)信息,这个信息称为指针(pointer)或链(link)。这两部分组成了链表中的结点结构,

链表正是通过每个结点的链域将线性表的n个结点按其逻辑次序链接在一起。由于上述链表的每一个结点只有一个链域,故将这种链表称为单链表(Single Linked)。

显然,单链表中每个结点的存储地址是存放在其前驱结点Next域中,而开始结点无前驱,故应设头指针HEAD指向开始结点。同时,由于终端结点无后件,故终端结点的指针域为空,即NULL。

3带链的栈与队列

(1)栈也是线性表,也可以采用链式存储结构。在实际应用中,带链的栈可以用来收集计算机存储空间中所有空闲的存储结点,这种带链的栈称为可利用栈

(2)队列也是线性表,也可以采用链式存储结构,

考点13 线性链表的基本运算

线性链表的运算主要有以下几个:

(l)在线性链表中包含指定元素的结点之前插入一个新元素;

(2)在线性链表中删除包含指定元素的结点;

(3)将两个线性链表按要求合并成一个线性表;

(4)将一个线性链表按要求进行分解;

(5)逆转线性链表;

(6)复制线性链表;

(7)线性链表的排序;

(8)线性链表的查找。

1在线性镬表中查找指定元素

在对线性链表进行插入或删除的运算中,总是首先需要找到插入或删除的位置,这就需要对线性链表进行扫描查找,在线性链表中寻找包含指定元素的前一个结点。

在线性链表中,即使知道被访问结点的序号a,也不能像顺序表中那样直接按序号i访问结点,而只能从链表的头指针出发,顺链域Next逐个结点往下搜索,直到搜索到第i个结点为止。因此,链表不是随机存取结构。

在链表中,查找是否有结点值等于给定值x的结点,若有的话,则返回首次找到的其值为x的结点的存储位置;否则返回NULL。查找过程从开始结点出发,顺着链表逐个将结点的值和给定值x作比较。

2线性链表的插入

线性链表的插入是指在链式存储结构下的线性链表中插入一个新元素。

插入运算是将值为X的新结点插入到表的第i个结点的位置上,即插入到ai-1,与ai 之间。因此,我们必须首先找到ai-1的存储位置p,然后生成一个数据域为x的新结点*p,并令结点,p的指针域指向新结点,新结点的指针域指向结点ai

由线性链表的插入过程可以看出,由于插入的新结点取自于可利用栈,因此,只要可利用栈不空,在线性链表插入时总能取到存储插入元素的新结点,不会发生“上溢”的情况。而且,由于可利用栈是公用的,多个线性链表可以共享它,从而很方便地实现了存储空间的动态分配。另外,线性链表在插入过程中不发生数据元素移动的现象,只要改变有关结点的指针即可,从而提高了插入的效率。

3多线性链表的删除

线性链表的删除是指在链式存储结构下的线性链表中删除包含指定元素的结点。

删除运算是将表的第i个结点删去。因为在单链表中结点a的存储地址是在其直接前趋结点ai-1,的指针域Next中,所以我们必须首先找到ai-1的存储位置p。然后令p->Next 指向ai的直接后件结点,即把ai从链上摘下。最后释放结点a的空间。

从线性链表的删除过程可以看出,从线性链表中删除一个元素后,不需要移动表中的数据元素,只要改变被删除元素所在结点的前一个结点的指针域即可。另外,由于可利用栈是用于收集计算机中所有的空闲结点,因此,当从线性链表中删除一个元素后,该元素的存储结点就变为空闲,应将空闲结点送回到可利用栈。

考点14 线性双向链表的结构及其基本运算

1什么是双向链表

在单链表中,从某个结点出发可以直接找到它的直接后件,时间复杂度为O(1),但无法直接找到它的互接前件;在单循环链表中,从某个结点出发可以直接找到它的直接后件,时间复杂度仍为O(1),直接找到它的直接前件,时间复杂度为O(n)。有时,希望能快速找到一个结点的直接前件,这时,可以在单链表中的结点中增加一个指针域指向它的直接前件,这样的链表,就称为双向链表(一个结点中含有两个指针)。如果每条链构成一个循环链表,则会得到双向循环链表

2双向链表的基本运算

(l)插入:在HEAD为头指针的双向链表中,在值为Y的结点之后插入值为X的结点,插入结点的指针变化。如图1-20所示(若改为在值为Y的结点之前插入值为X的结点,可以做类似分析)。

(2)删除:在以HEAD为头指针的双向链表中删除值为X的结点,删除算法的指针变化,如图1-21所示。

考点15 循环链表的结构及其基本运算

单链表上的访问是一种顺序访问,从其中的某一个结点出发,可以找到它的直接后件,但无法找到它的直接前件。

在前面所讨论的线性链表中,其插入与删除的运算虽然比较方便,但还存在一个问题,在运算过程中对于空表和对第一个结点的处理必须单独考虑,使空表与非空表的运算不统一。

因此,我们可以考虑建立这样的链表,具有单链表的特征,但又不需要增加额外的存贮空间,仅对表的链接方式稍做改变,使得对表的处理更加方便灵活。从单链表可知,最后一个结点的指针域为NULL,表示单链表已经结束。如果将单链表最后一个结点的指针域改为存放链表中头结点(或第一个结点)的地址,就使得整个链表构成一个环,又没有增加额外的存储空间

循环链表具有以下两个特点:

(1)在循环链表中增加了一个表头结点,其数据域为任意或者根据需要来设置,指针域指向线性表的第一个元素的结点。循环链表的头指针指向表头结点;

(2)循环链表中最后一个结点的指针域不是空,而是指向表头结点。即在循环链表中,所有结点的指针构成了一个环状链。

在循环链表中,只要指出表中任何一个结点的位置,就可以从它出发访问到表中其他所有的结点,而线性单链表做不到这一点。

由于在循环链表中设置了一个表头结点,因此,在任何情况下,循环链表中至少有一个结点存在,从而使空表的运算统一。

1.6 树与二叉树

考点16 树的定义

树是由n( n≥0)个结点组成的有限集合。若n =0,称为空树;若n>0,则:

(1)有一个特定的称为根(root)的结点。它只有直接后件,但没有直接前件;

(2)除根结点以外的其他结点可以划分为m(m≥0)个互不相交的有限集合T0,T1,…,Tm-1,每个集合Ti(i=0,1,…,m-l)又是一棵树,称为根的子树,每棵子树的根结点有且仅有一个直接前件,但可以有0个或多个直接后件。

树型结构具有如下特点:

(1)助每个结点只有一个前件,称为父结点,没有前件的结点只有一个,称为树的根结点,简称为树的根;

(2)每一个结点可以有多个后件,它们都称为该结点的子结点。没有后件的结点称为叶子结点;

(3)一个结点所拥有的后件个数称为树的结点度;

(4)树的最大层次称为树的深度。

在计算机中,可以用树结构来表示算术表达式,用树来表示算术表达式的原则是:

(1)表达式中的每一个运算符在树中对应一个结点,称为运算符结点;

(2)运算符的每一个运算对象在树中为该运算符结点的子树(在树中的顺序为从左到右);

(3)运算对象中的单变量均为叶子结点。

树在计算机中通常用多重链表表示。

考点17 二叉树的定义及其基本性质

1什么是二叉树

二叉树(binary tree)是由n(≥0)个结点的有限集合构成,此集合或者为空集,或者由一个根结点及两棵互不相交的左右子树组成,并且左右子树都是二叉树。二叉树可以是空集合,根可以有空的左子树或空的右子树。二叉树不是树的特殊情况,它们是两个概念。

二叉树具有如下两个特点:

(1)非空二叉树只有一个根结点;

(2)每一个结点最多有两棵子树,且分别称为该结点的左子树与右子树。

二叉树的每个结点最多有两个孩子,或者说,在二叉树中,不存在度大于2的结点,并且二叉树是有序树(树为无序树),其子树的顺序不能颠倒,因此,二叉树有5种不同的形态在二叉树中,一个结点可以只有左子树而没有右子树,也可以只有右子树而没有左子树。当一个结点既没有左子树也没有右子树时,该结点即是叶子结点)

2二叉树的基本性质

性质1:在二叉树的第入层上至多有2k-1个结点(k≥1)。

性质2:深度为m的二叉树至多有2m-1个结点。

深度为m的二叉树的最大的结点数是为二叉树中每层上的最大结点数之和,由性质1得到最大结点数。

性质3:对任何一棵二叉树,度为0的结点(即叶子结点)总是比度为2的结点多一个。

如果叶子结点n0,度为2的结点数为n2,则n0=n2+l。

设二叉树中度为1的结点数为n1,二叉树中总结点数为N,因为二叉树中所有结点均小于或等于2,所以有

N=n0+n1+n (1)

再看二叉树中的分支数,除根结点外,其余结点都有一个进入分支,设m为二叉树中的分支总数,则有

N=m+1 (2)

又由于二叉树中这m个分支是分别由非叶子结点射出的。其中度为1的每个结点射出1个分支,度为2的每个结点射出2个分支。因此,二叉树中所有度为1与度为2的结点射出的分支总数为n1+2n2 ,而在二叉树中,总的射出分支数应与总的进入分支数相等,即

m=n1+2n2 (3)

将(3)代入(2)式有

N=n1+2n2+1

比较(1)和(4)并化简得

n0=n2+1

性质4:具有n个结点的完全二叉树的深度至少为[log2n]+ 1,其中[log2n]表示log2n的整数部分。

3满二叉树与完全二叉树

(l)满二叉树

满二叉树是指这样的一种二叉树:除最后一层外,每一层上的所有结点都有两个子结点。深度为k的二叉树具有2k-1个结点。即在满二叉树的第k层上有2k-1个结点。

从上面满二叉树定义可知,必须是二叉树的每一层上的结点数都达到最大,否则就不是满二叉树。深度为m的满二叉树有2m-1个结点。

(2)完全二叉树

完全二叉树是指这样的二叉树:除最后一层外,每一层上的结点数均达到最大值;在最后一层上只缺少右边的若干结点。转贴于:计算机二级考试_考试大【责编:daiy 纠错】如果一棵具有n个结点的深度为k的二叉树,它的每一个结点都与深度为k的满二叉树中编号为1~n的结点一一对应。

为满二叉树和完全二叉树的结构比较。

从完全二叉树定义可知,结点的排列顺序遵循从上到下、从左到右的规律。所谓从上到下,表示本层结点数达到最大后,才能放入下一层。从左到右,表示同一层结点必须按从左到右排列,若左边空一个位置时不能将结点放入右边。完全二叉树除最后一层外每一层的结点数都达到最大值,最后一层只缺少右边的若干结点。

满二叉树也是完全二叉树,反之完全二叉树不一定是满二叉树。

性质5:具有n个结点的完全二叉树深度为[log2n]+ 1或[log2(n+1)]。

性质6:如果对一棵有n个结点的完全二叉树的结点按层序编号(从第1层到第[log2n]+1层,每层从左到右),则对任一结点i(1≤i≤n),有:

(1)如果i=1,则结点i无双亲,是二叉树的根;如果i>1,则其双亲是结点[i/2];

(2)如果2i≤n,则结点i为叶子结点,无左孩子;否则,其左孩子是结点2i;

(3)如果2i+1≤n,则结点i无右孩子;否则,其右孩子是结点2i+1。

4二叉树的存储结构

在计算机中,二叉树通常采用链式存储结构。用于存储二叉树中各元素的存储结点由两部分组成:数据域与指针域。但在二叉树中,由于每一个元素可以有两个后件(两个子结点),因此,用于存储二叉树的存储结点的指针域有两个:一个用于指向该结点的左子结点的存储地址,称为左指针域;另一个用于指向该结点的右子结点的存储地址,称为右指针域。

考点18 二叉树的遍历

所谓遍历二叉树,就是遵从某种次序,访问二叉树中的所有结点,使得每个结点仅被访问一次。

1前序遍历

前序遍历是指在访问根结点、遍历左子树与遍历右子树这三者中,首先访问根结点,然后遍历左子树,最后遍历右子树;并且,在遍历左右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树。前序遍历描述为:

若二叉树为空,则执行空操作。否则:①访问根结点;②前序遍历左子树;③前序遍历右子树。

2中序遍历

中序遍历是指在访问根结点、遍历左子树与遍历右子树这三者中,首先遍历左子树,然后访间根结点,最后遍历右子树;并且,在遍历左、右子树时,仍然先遍历左子树,然后访问根结点,最后遍历右子树。中序遍历描述为:

若二叉树为空,则执行空操作。否则:①中序遍历左子树;②访问根结点;③中序遍历右子树。

3后序遍历

后序遍历是指在访问根结点、遍历左子树与遍历右子树这三者中,首先遍历左子树,然后遍历右子树,最后访问根结点,并且,在遍历左、右子树时,仍然先遍历左子树,然后遍历右子树,最后访问根结点。后序遍历描述为:

若二叉树为空,则执行空操作。否则:①后序遍历左子树;②后序遍历右子树;③访问根结点

第2章程序设计基础

2.1 程序设计方法与风格

就程序设计方法和技术的发展而言,主要经过了结构化程序设计和面向对象的程序设计阶段。

一般来讲。程序设计风格是指编写程序时所表现出的特点、习惯和逻辑思路。程序是由人来编写的,为了测试和维护程序,往往还要新闻记者和跟踪程序,因此程序设计的风格总体而言应该强调得意和清晰,程序必须是可以理解的。

要形成良好的程序设计风格,主要应注重和考虑下述一些因素。

1、源程序文档化

2、源程序文档化应考虑如下几点:

(1)符号名的命名:符号名的命名应具有一定的实际含义,以便于对程序功能的理解。

(2)程序注释:下克的注释能够帮助读者理解程序。

(3)礼堂组织:为使程序的结构一目了然,可以在程序中利用空格、空行、缩进待技巧使程序层次清晰。

2、数据说明的方法

在编写程序时,需要注意数据说明的风格,以便使程序中的数据说明更易于理解和维护。一般应注意如下几点:

(1)数据说明的次序规范化鉴于程序理解、新闻记者和维护的需要,使数据说明次序固定,可以使数据的发生容易查找,也有利于测试、排错和维护。

(2)说明语句中变量安排有序化。当一个说明语句说明多个变量时,变量按照字母顺序为好。

(3)使用注释来说明复杂数据的结构。

3、语句的结构

程序应该简单易懂,语句构造应该简单直接,不应该为提高效率而把语句复杂化。一般应注意如下:

(1)在一行内只写一条语句;

(2)程序编写应优先考虑清晰性;

(3)除非对效率有特殊要求,程序编写要做清晰第一,效率第二;

(4)首先要保证程序正确,然后才要求提高速度;

(5)避免使用临时变量而使程序的可读性下降;

(6)避免不必要的转移;

(7)尽可能使用库函数;

(8)避免采用复杂的条件语句;

(9)尽量减少使用“否定”条件的条件语句;

(10)数据结构要有利于程序的简化;

(11)要模块化,使模块功能尽可能单一化;

(12)利用住处隐蔽,确保每一个模块的独立性;

(13)从数据出发去构造程序;

(14)不要修补不好的程序,要重新编写;

4、输入和输出

无论是批处理的输入和输出方式,还是交互式的输入和输出方式,在设计和编程时都应该考虑如下原则:

(1)对所有的输入数据都要检验数据的合法性;

(2)检查输入项的各种重要组合的合理性;

(3)输入格式要简单,以使得输入的步骤和操作尽可能简单;

(4)输入数据时,应允许使用自由格式;

(5)应允许缺省值;

(6)输入一批数据时,最好使用输入结束标志;

(7)在以交互式输入/输出方式进行输入时,要在屏幕上使用提示符明确提示输入的请求,同时在数据输入过程中的输入结束时,应在屏幕上给出状态信息。

(8)当程序设计语言对输入格式有严格要求时,应保持输入格式与输入语句的一致性;给所有的输入出加注释,并设计输出报表格式。

2.2结构化程序设计

一、结构化程序设计的原则

结构化程序设计方法的主要原则可以概括为自顶向下,逐步求精,模块化,限制使用goto语句。

1、自顶向下:程序设计时,应先考虑总体,后考虑细节;先考虑全局目标,后考虑局部目标。不要一开始就过多追求众多的细节,先从最上层总目标开始设计,逐步使问题具体化。

2、逐步求精:对复杂问题,应设计一些子目标作过渡,逐步细化。

3、模块化:一个复杂问题,肯定是由若干稍简单的问题构成。模块化是把程序要解决的总目标分解为分目标,再进一步分解为具体的小目标,把每个小目标称为一个模块。

4、限制使用goto语句

使用goto语句经实验证实:

(1)滥用GOTO语句确实有害,应昼避免;

(2)完全避免使用GOTO语句也并非是个明智的方法,有些地方使用GOTO语句,会使程序流程更清楚、效率更高;

(3)争论的焦点不应该放在是否取消GOTO语句,而应该放在用什么样的程序结构上。

其中最关键的是,肯定以提高程序清晰性为目标的结构化方法。

二、结构化程序的基本结构与特点

1、顺序结构:顺序结构是简单的程序设计,它是最基本、最常用的结构,所谓顺序执行,就是按照程序语句行的自然顺序,一条语句一条语句地执行程序程序。

2、选择结构:选择结构又称为分支结构,它包括简单选择和多分支选择结构,这种结构可以根据设定的条件,判断应该选择哪一条分支来执行相应的语句序列。

3、重复结构:重复结构又称为循环结构,它根据给定的条件,判断是否需要重复执行某一相同的或类似的程序段,利用重复结构可简化大量的程序行。分为两类:一是先判断后执行,一是先执行后判断。

优点:一是程序易于理解、使用和维护。二是编程工作的效率,降低软件开发成本。

三、结构化程序设计原则和方法的应用

要注意把握如下要素:

1、使用程序设计语言中的顺序、选择、循环等有限的控制结构表示程序的控制逻辑。

2、选用的控制结构只准许有一个入口和一个出口;

3、程序语句组成容易识别的块,每块只有一个入口和一个出口;

4、复杂结构应该嵌套的基本控制结构进行组合嵌套来实现;

5、语言中所没有的控制结构,应该采用前后一致的方法来模拟;

6、严格控制GOTO语句的使用。其意思是指:

(1)用一个非结构化的程序设计语言去实现一个结构化的构造;

(2)若不使用GOTO语句会使功能模糊;

(3)在某种可以改善而不损害程序可读性的情况下。

2.3面向对象的程序设计

一、关于面向对象方法

面向对象方法的本质,就是主张从客观世界固有的事物出发来构造系统,提倡用人类在现实生活中常用的思维方法来认识、理解和描述客观事物,强调最终建立的系统能够映射问题域,也就是说,系统中的对象以及对象之间的关系能够如实地反映问题域中固有事物及其关系。

优点:1、与人类习惯的思维方法一致

面向对象方法和技术以对象为核心。对象是由数据和容许的操作组成的封装体,与客观实体有直接的关系。对象之间通过传递消息互相联系,以模拟现实世界中不同事物彼此之间的联系。

面向对象的设计方法与传统的面向过程的方法有本质不同,这种方法的基本原理是:使用现实世界的概念抽象地思考问题从而自然地解决问题。它强调模拟现实世界中的概念而不强调算法,它鼓励开发者在软件开发的绝大部分过程中都用应用领域的要领去思考。

2、稳定性好

3、可重用性好

软件重用是指在不同的软件开发过程中重复作用相同或相似软件元素的过程。重用是提高软件生产率的最主要的方法。

4、易于开发大型软件产品

5、可维护性好

(1)用面向对象的方法开发的软件稳定性比较好

(2)用面向对象的方法开发的软件比较容易修改;

(3)用面向对象的方法开发的软件比较容易理解。

(4)易于测试和调试。

二、面向对象方法的基本概念

1、对象(object)

对象是面向对象方法中最基本的概念。对象可以用来表示客观世界中的任何实体,也就是说,应用领域中有意义的、与所要解决的问题有关系的任何事物都可以作为对象,它既可以是具体的物理实体的抽象,也可以是人为的概念,或者是任何有明确边界的意义的东西。总之,对象是对问题域中某个实体的抽象,设立某个对象就反映软件系统保存有关它的信息并具有与它进行交互的能力。

面向对象的程序设计方法中涉及的对象是系统中用来描述客观事物的一个实体,是构成系统的一个基本单位,它由一组表示其静态特征的属性和它可执行的一组操作组成。

对象可以做的操作表示它的动态行为,在面向对象分析和面向对象设计中,通常把对象的操作也称为方法或服务。

属性即对象所包含的信息,它在设计对象时确定,一般只能通过挂靠对象的操作来改变。

操作描述了对象执行的功能,若通过消息传递,还可以为其他对象使用。操作的过程对外是封闭的,即用户只能看到这一操作实施后的结果。这相当于事先已经设计好的各种过程,只需要调用就可以了,用户不必去关心这一过程是如何编写的。事实上,这个过程已经封装在对象中,用户也看不到。对的这一特性即是对象的封装性。

对象有如下一些基本特点:

(1)标识惟一性。指对象是可区分的,并且由对象有的内在本质来区分,而不是通过描述来区分。

(2)分类性。指可以将具有相同属性的操作的对象抽象成类。

(3)多太性。指同一个操作可以是不同对象的行为。

(4)封装性。从外面看只能看到对象的外部特性,即只需知道数据的取值范围和可以对该数据施加的操作,根本无需知道数据的具体结构以及实现操作的算法。对象的内部,即处理能力的实行和内部状态,对外是不可见的。从外面不能直接使用对象的处理能力,也不能直接修改其内部状态,对象的内部状态只能由其自身改变。

(5)模块独立性好。对象是面向对象的软件的基本模块,它是由数据及可以对这些数据施加的操作所组成的统一体,而且对象是以数据为中心的,操作围绕对其数据所需做的处理来设置,没有无关的操作从模块的独立性考虑,对象内部各种元素彼此结合得很紧密,内聚性强。

2、类(Class)和实例(Instance)

将属性、操作相似的对象归为类,也就是说,类是具有共同属性、共同方法的对象的集合。所以,类是对象的抽象,它描述了属于该对象类型的所有对象的性质,而一个对象则是其对应类的一个实例。

要注意的是,当使用“对象”这个术语时,既可以指一个具体的对象,也可以泛指一般的对象,但是,当使用“实例”这个术语时,必然是指一个具体的对象。

例如:Integer是一个整数类,它描述了所有整数的性质。因此任何整数都是整数类的对象,而一个具体的整数“123”是类Integer的实例。

由类的定义可知,类是关于对象性质的描述,它同对象一样,包括一组数据属性和在数据上的一组合法操作。

3、消息(Message)

面向对象的世界是通过对象与对象间彼此的相互合作来推动的,对象间的这种相互合作需要一个机制协助进行,这样的机制称为“消息”。消息是一个实例与另一个实例之间传递信息,它请示对象执行某一处理或回答某一要求的信息,它统一了数据流的控制流。消息的使用类似于函数调用,消息中指定了某一个实例,一个操作名和一个参数表(可空)。接收消息的实例执行消息中指定的操作,并将形式参数数与参数表中相应的值结合起来。消息传递过程中,由发送消息的对象(发送对象)的触发操作产生输出结果,作为消息传送至接受消息的对象(接受对象),引发接受消息的对象一系列的操作。所传送的消息实质上是接受对象所具有的操作/方法名称,有时还包括相应参数。

消息中只包含传递者的要求,它告诉接受者需要做哪些处理,但并不指示接受者应该怎样完成这些处理。消息完全由接受者解释,接受者独立决定采用什么方式完成所需的处理,发送者对接受者不起任何控制作用。一个对象能够接受不同形式、不同内容的多个消息;相同形式的消息可以送往不同的对象,不同的对象对于形式相同的消息可以有不同的解释,能够做出不同的反映。一个对象可以同时往多个对象传递信息,两个对象也可以同时向某个对象传递消息。

例如,一个汽车对象具有“行驶”这项操作,那么要让汽车以时速50公里行驶的话,

需传递给汽车对象“行驶”及“时速50公里”的消息。

通常,一个消息由下述三部分组成:

(1)接收消息的对象的名称;

(2)消息标识符(也称为消息名);

(3)零个或多个参数。

4、继承(Inheritance)

继承是面向对象的方法的一个主要特征。继承是使用己有的类定义作为基础建立新类的定义技术。已有的类可当作基类来引用,则新类相应地可当作派生类来引用。

广义地说,继承是指能够直接获得已有的性质和特征,而不必重复定义它们。

面向对象软件技术的许多强有力的功能和突出的优点,都来源于把类组成一个层次结构的系统:一个类的上层可以有父类,下层可以有子类。这种层次结构系统的一个重要性质是继承性,一个类直接继承其父类的描述(数据和操作)或特性,子类自动地共享基类中定义的数据和方法。

继承具有传递性,如果类C继承类B,类B继承类A,则类C继承类A。因此一个类实际上继承了它上层的全部基类的特性,也就是说,属于某类的对象除了具有该类所定义的特性外,还具有该类上层全部基类定义的特性。

继承分为单继承与多重继承。单继承是指,一个类只允许有一个父类,即类等级为树形结构。多重继承是指,一个类允许有多个父类。多重继承的类可以组合多个父类的性质构成所需要的性质。因此,功能更强,使用更方便;便是,使用多重继承时要注意避免二义性。继承性的优点是,相似的对象可以共享程序代码和数据结构,从而大大减少了程序中的冗余信息,提高软件的可重用性,便于软件个性维护。此外,继承性便利用户在开发新的应用系统时不必完全从零开始,可以继承原有的相似系统的功能或者从类库中选取需要的类,再派生出新的类以实现所需要的功能。

5、多太性(Polymorphism)

对象根据所接受的消息而做出动作,同样的消息被不同的对象接受时可导致完全不同的行动,该现象称为多态性。在面向对象的软件技术中,多态性是指类对象可以像父类对象那样使用,同样的消息既可以发送给父类对象也可以发送给子类对象。

多态性机制不仅增加了面向对象软件系统的灵活性,进一步减少了信息冗余,而且显著地提高了软件的可重用性和可扩充性。当扩充系统功能增加新的实体类型时,只需派生出与新实体类相应的新的子类,完全无需修改原有的程序代码,甚至不需要重新编译原有的程序。利用多态性,用户能够发送一般形式的消息,而将所有的实现细节都留给接受消息的对象。

软件工程(Software Engineering,简称为SE)是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它涉及到程序设计语言,数据库,软件开发工具,系统平台,标准,设计模式等方面。

在现代社会中,软件应用于多个方面。典型的软件比如有电子邮件,嵌入式系统,人机界面,办公套件,操作系统,编译器,数据库,游戏等。同时,各个行业几乎都有计算机软件的应用,比如工业,农业,银行,航空,政府部门等。这些应用促进了经济和社会的发展,使得人们的工作更加高效,同时提高了生活质量。

软件工程师是对应用软件创造软件的人们的统称,软件工程师按照所处的领域不同可以分为系统分析员,软件设计师,系统架构师,程序员,测试员等等。人们也常常用程序员来泛指各种软件工程师。

软件工程(SoftWare Engineering)的框架可概括为:目标、过程和原则。

(1)软件工程目标:生产具有正确性、可用性以及开销合宜的产品。正确性指软件产品达到预期功能的程度。可用性指软件基本结构、实现及文档为用户可用的程度。开销合宜是指软件开发、运行的整个开销满足用户要求的程度。这些目标的实现不论在理论上还是在实践中均存在很多待解决的问题,它们形成了对过程、过程模型及工程方法选取的约束。

(2)软件工程过程:生产一个最终能满足需求且达到工程目标的软件产品所需要的步骤。软件工程过程主要包括开发过程、运作过程、维护过程。它们覆盖了需求、设计、实现、确认以及维护等活动。需求活动包括问题分析和需求分析。问题分析获取需求定义,又称软件需求规约。需求分析生成功能规约。设计活动一般包括概要设计和详细设计。概要设计建立整个软件系统结构,包括子系统、模块以及相关层次的说明、每一模块的接口定义。详细设计产生程序员可用的模块说明,包括每一模块中数据结构说明及加工描述。实现活动把设计结果转换为可执行的程序代码。确认活动贯穿于整个开发过程,实现完成后的确认,保证最终产品满足用户的要求。维护活动包括使用过程中的扩充、修改与完善。伴随以上过程,还有管理过程、支持过程、培训过程等。

(3)软件工程的原则是指围绕工程设计、工程支持以及工程管理在软件开发过程中必须遵循的原则。

一、软件工程概述

概念:应需而生

软件工程是一类工程。工程是将理论和知识应用于实践的科学。就软件工程而言,它借鉴了传统工程的原则和方法,以求高效地开发高质量软件。其中应用了计算机科学、数学和管理科学。计算机科学和数学用于构造模型与算法,工程科学用于制定规范、设计范型、评估成本及确定权衡,管理科学用于计划、资源、质量和成本的管理。

软件工程这一概念,主要是针对20世纪60年代“软件危机”而提出的。它首次出现在1968年NATO(北大西洋公约组织)会议上。自这一概念提出以来,围绕软件项目,开展了有关开发模型、方法以及支持工具的研究。其主要成果有:提出了瀑布模型,开发了一些结构化程序设计语言(例如PASCAL语言,Ada语言)、结构化方法等。并且围绕项目管理提出了费用估算、文档复审等方法和工具。综观60年代末至80年代初,其主要特征是,前期着重研究系统实现技术,后期开始强调开发管理和软件质量。

70年代初,自“软件工厂”这一概念提出以来,主要围绕软件过程以及软件复用,开展了有关软件生产技术和软件生产管理的研究与实践。其主要成果有:提出了应用广泛的面向对象语言以及相关的面向对象方法,大力开展了计算机辅助软件工程的研究与实践。尤其是近几年来,针对软件复用及软件生产,软件构件技术以及软件质量控制技术、质量保证技术得到了广泛的应用。目前各个软件企业都十分重视资质认证,并想通过这些工作进行企业管理和技术的提升。软件工程所涉及的要素可概括如下:

根据这一框架,可以看出:软件工程涉及了软件工程的目标、软件工程原则和软件工程活动。

目标:我的眼里只有“产品”

软件工程的主要目标是:生产具有正确性、可用性以及开销合宜的产品。正确性意指软件产品达到预期功能的程度。可用性指软件基本结构、实现及文档为用户可用的程度。开销合宜性是指软件开发、运行的整个开销满足用户要求的程度。这些目标的实现不论在理论上还是在实践中均存在很多问题有待解决,它们形成了对过程、过程模型及工程方法选取的约束。

软件工程活动是“生产一个最终满足需求且达到工程目标的软件产品所需要的步骤”。主要包括需求、设计、实现、确认以及支持等活动。需求活动包括问题分析和需求分析。问题分析获取需求定义,又称软件需求规约。需求分析生成功能规约。设计活动一般包括概要设计和详细设计。概要设计建立整个软件体系结构,包括子系统、模块以及相关层次的说明、每一模块接口定义。详细设计产生程序员可用的模块说明,包括每一模块中数据结构说明及加工描述。实现活动把设计结果转换为可执行的程序代码。确认活动贯穿于整个开发过程,实现完成后的确认,保证最终产品满足用户的要求。支持活动包括修改和完善。伴随以上活动,还有管理过程、支持过程、培训过程等。

框架:四项基本原则是基石

软件工程围绕工程设计、工程支持以及工程管理,提出了以下四项基本原则:

第一,选取适宜开发范型。该原则与系统设计有关。在系统设计中,软件需求、硬件需求以及其他因素之间是相互制约、相互影响的,经常需要权衡。因此,必须认识需求定义的易变性,采用适宜的开发范型予以控制,以保证软件产品满足用户的要求。

第二,采用合适的设计方法。在软件设计中,通常要考虑软件的模块化、抽象与信息隐蔽、局部化、一致性以及适应性等特征。合适的设计方法有助于这些特征的实现,以达到软件工程的目标。

第三,提供高质量的工程支持。“工欲善其事,必先利其器”。在软件工程中,软件工具与环境对软件过程的支持颇为重要。软件工程项目的质量与开销直接取决于对软件工程所提供的支撑质量和效用。

第四,重视开发过程的管理。软件工程的管理,直接影响可用资源的有效利用,生产满足目标的软件产品,提高软件组织的生产能力等问题。因此,仅当软件过程得以有效管理时,才能实现有效的软件工程。

这一软件工程框架告诉我们,软件工程的目标是可用性、正确性和合算性;实施一个软件工程要选取适宜的开发范型,要采用合适的设计方法,要提供高质量的工程支撑,要实行开发过程的有效管理;软件工程活动主要包括需求、设计、实现、确认和支持等活动,每一活动可根据特定的软件工程,采用合适的开发范型、设计方法、支持过程以及过程管理。

根据软件工程这一框架,软件工程学科的研究内容主要包括:软件开发范型、软件开发方法、软件过程、软件工具、软件开发环境、计算机辅助软件工程(CASE) 及软件经济学等。

作用:高效开发高质量软件

自从软件工程概念提出以来,经过30多年的研究与实践,虽然“软件危机”没得到彻底解决,但在软件开发方法和技术方面已经有了很大的进步。尤其应该指出的是,自80年代中期,美国工业界和政府部门开始认识到,在软件开发中,最关键的问题是软件开发组织不能很好地定义和管理其软件过程,从而使一些好的开发方法和技术都起不到所期望的作用。也就是说,在没有很好定义和管理软件过程的软件开发中,开发组织不可能在好的软件方法和工具中获益。

根据调查,中国的现状几乎和美国10多年前的情况一样,软件开发过程没有明确规定,文档不完整,也不规范,软件项目的成功往往归功于软件开发组的一些杰出个人或小组的努力。这种依赖于个别人员上的成功并不能为全组织的软件生产率和质量的提高奠定有效的基础,只有通过建立全组织的过程改善,采用严格的软件工程方法和管理,并且坚持不懈地付诸实践,才能取得全组织的软件过程能力的不断提高。

这一事实告诉我们,只有坚持软件工程的四条基本原则,既重视软件技术的应用,又重视软件工程的支持和管理,并在实践中贯彻实施,才能高效地开发出高质量的软件。

二、软件工程的七条基本原理

自从1968年提出“软件工程”这一术语以来,研究软件工程的专家学者们陆续提出了100多条关于软件工程的准则或信条。美国著名的软件工程专家Boehm 综合这些专家的意见,并总结了TRW公司多年的开发软件的经验,于1983年提出了软件工程的七条基本原理。

Boehm 认为,着七条原理是确保软件产品质量和开发效率的原理的最小集合。

它们是相互独立的,是缺一不可的最小集合;同时,它们又是相当完备的。

人们当然不能用数学方法严格证明它们是一个完备的集合,但是可以证明,在此之前已经提出的100多条软件工程准则都可以有这七条原理的任意组合蕴含或派生。

下面简要介绍软件工程的七条原理:

1 用分阶段的生命周期计划严格管理

这一条是吸取前人的教训而提出来的。统计表明,50%以上的失败项目是由于计划不周而造成的。在软件开发与维护的漫长生命周期中,需要完成许多性质各异的工作。这条原理意味着,应该把软件生命周期分成若干阶段,并相应制定出切实可行的计划,然后严格按照计划对软件的开发和维护进行管理。Boehm 认为,在整个软件生命周期中应指定并严格执行6类计划:项目概要计划、里程碑计划、项目控制计划、产品控制计划、验证计划、运行维护计划。

计算机二级公共基础知识(全)

1.1 算法 考点1 算法的基本概念 计算机解题的过程实际上是在实施某种算法,这种算法称为计算机算法。 算法(algorithm)是一组严谨地定义运算顺序的规则,并且每一个规则都是有效的,同时是明确的;此顺序将在有限的次数后终止。算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作。 1算法的基本特征 (1)可行性(effectiveness):针对实际问题而设计的算法,执行后能够得到满意的结果。 (2)确定性(definiteness):算法中的每一个步骤都必须有明确的定义,不允许有模棱两可的解释和多义性。 (3)有穷性(finiteness):算法必需在有限时间内做完,即算法必需能在执行有限个步骤之后终止。 (4)拥有足够的情报:要使算法有效必需为算法提供足够的情报当算法拥有足够的情报时,此算法才最有效的;而当提供的情报不够时,算法可能无效。 2算法的基本要素 (1)算法中对数据的运算和操作:每个算法实际上是按解题要求从环境能进行的所有操作中选择合适的操作所组成的一组指令序列。 计算机可以执行的基本操作是以指令的形式描述的。一个计算机系统能执行的所有指令的集合,称为该计算机系统的指令系统。计算机程序就是按解题要求从计算机指令系统中选择合适的指令所组成的指令序列在一般的计算机系统中,基本的运算和操作有以下4类: ①算术运算:主要包括加、减、乘、除等运算; ②逻辑运算:主要包括“与”、“或”、“非”等运算; ③关系运算:主要包括“大于”、“小于”、“等于”、“不等于”等运算; ④数据传输:主要包括赋值、输入、输出等操作。 (2)算法的控制结构:一个算法的功能不仅仅取决于所选用的操作,而且还与各操作之间的执行顺序有关。算法中各操作之间的执行顺序称为算法的控制结构。 算法的控制结构给出了算法的基本框架,它不仅决定了算法中各操作的执行顺序,而且也直接反映了算法的设计是否符合结构化原则。描述算法的工具通常有传统流程图、N-S结构化流程图、算法描述语言等。一个算法一般都可以用顺序、选择、循环3种基本控制结构组合而成。 (3)算法设计的基本方法 计算机算法不同于人工处理的方法,下面是工程上常用的几种算法设计,在实际应用时,各种方法之间往往存在着一定的联系。 (1)列举法 列举法是计算机算法中的一个基础算法。列举法的基本思想是,根据提出的问题,列举所有可能的情况,并用问题中给定的条件检验哪些是需要的,哪些是不需要的。 列举法的特点是算法比较简单。但当列举的可能情况较多时,执行列举算法的工作量将会很大。因此,在用列举法设计算法时,使方案优化,尽量减少运算工作量,是应该重点注意的。 (2)归纳法 归纳法的基本思想是,通过列举少量的特殊情况,经过分析,最后找出一般的关系。从本质上讲,归纳就是通过观察一些简单而特殊的情况,最后总结出一般性的结论。

全国计算机等级考试二级教程——公共基础知识

全国计算机等级考试二级教程——公共基础知识 一、计算机的基本组成部分。 计算机由硬件和软件两部分组成,硬件包括中央处理器(CPU)、存储器、输入输出设备等;软件包括操作系统、应用软件等。 1.中央处理器(CPU):计算机的核心部件,执行所有指令。 2.存储器:存储数据和程序。 3.输入设备:把数据从外部输入到计算机中,如键盘、鼠标、扫描仪等。 4.输出设备:把计算机处理的数据输出到外部,如打印机、显示器、音响等。 二、计算机的工作原理。 计算机的工作原理可以分为5个部分:输入、存储、处理、输出和控制。 1.输入:把数据或指令输入到计算机中,通过输入设备进行输入。 2.存储:将输入的数据或指令存储在内存中。 3.处理:根据指令执行相应的操作,如计算、比较、排序等。 4.输出:将处理后的结果输出到外部,通过输出设备进行输出。 5.控制:计算机通过控制器控制各个部件的运行,以完成整个计算过程。 三、计算机的分类。

计算机按其用途和规模可以分为大型机、中型机、小型机和微型计算机。 1.大型机:主要用于大型企业和政府机关,可以同时处理多个用户的请求,性能强劲。 2.中型机:主要用于中小型企业,相对于大型机规模和性能较小。 3.小型机:主要针对个体户、小企业和办公室等,处理能力比微型计算机强。 4.微型计算机:用于一般個人用戶和小型企业,具有价格低廉、体积小及易操作的特点,性能相对其他计算机较弱。 四、操作系统。 操作系统是管理计算机硬件和软件资源的程序,它在计算机的各个层次上进行控制和管理,包括处理器的管理、内存的管理、文件系统的管理等等。 常见的操作系统有:Windows、Linux、Unix、Android等。 五、计算机网络。 计算机网络是指把分布在不同地点的计算机集成在一起,实现资源共享和信息传输的系统。 计算机网络的分层体系结构一般被分为7层,分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。其中物理层和数据链路层主要负责数据传输的物理和链路层面的工作;网络层和传输层负责数据传输的网络和传输方面的工作;会话层、表示层和应用层则负责数据传输的高层次工作。。

全国计算机二级公共基础知识知识点

公共基础知识 第一章数据结构与算法 1.1 算法 1.1.1 算法的基本概念 1、算法的基本特征 可行性、确定性、有穷性、拥有足够的情报 所谓算法,是一组严谨地定义运算顺序的规则,并且每一个规则都是有效的,且是明确的,此顺序将在有限的次数下终止。 2、算法的基本要素 (1)算法中对数据的运算和操作 在一般的计算机系统中,基本的运算和操作:算术运算、逻辑运算、关系运算、数据传输(2)算法的控制结构 描述算法的工具:传统流程图、N-S结构化流程图、算法描述语言等 一个算法一般都可以用顺序、选择、循环三种基本控制结构组合而成 3、算法设计基本方法 列举法、归纳法、递推(本质上也属于归纳法,递推关系式往往是归纳的结果)、递归(基础也是归纳,分为直接递归和间接递归两种)、减半递推技术、回溯法(“试”) 1.1.2 算法复杂度 1、算法的时间复杂度(执行算法所需要的计算工作量) 算法的工作量用算法所执行的基本运算次数来度量,而算法所执行的基本运算次数是问题规模的函数 算法的工作量=f(n),n是问题的规模 两个n阶矩阵相乘所需要的基本运算(即两个实数的乘法)次数为n3,即计算工作量为n3,也就是时间复杂度为n3 对于一个固定的规模,算法所执行的基本运算次数还可能与特定的输入有关——可以用两种方法来分析算法的工作量:平均性态、最坏情况复杂性 2、算法的空间复杂度(执行这个算法所需要的内存空间) 如果额外空间量相对于问题规模来说是常数,则称该算法是原地工作的 1.2 数据结构的基本概念 数据结构主要有三个方面的问题: ●数据集合中各数据元素之间所固有的逻辑关系,即数据的逻辑结构 ●在对数据进行处理时,各数据元素在计算机中的存储关系,即数据的存储结构 ●对各种数据结构进行的运算 提高数据处理的效率,主要包括两个方面: ●提高数据处理的速度 ●尽量节省在数据处理过程中所占用的计算机存储空间 1.2.1 什么是数据结构 无序表,只能用顺序查找 对分查找只适用于有序表(在词典中查单词的方法类似于对分查找) 数据结构是指相互有关联的数据元素的集合(向量、矩阵、图书馆中的图书卡片目录……)在数据处理领域中,通常把数据元素之间这种固有的关系简单地用前后件关系(直接前驱与直接后继关系)来描述,前后件关系所表示的实际意义随具体对象的不同而不同 1、数据的逻辑结构 一个数据结构应包含以下两方面的信息:

计算机二级公共基础知识整理(完整版)

第一章数据结构与算法 经过对部分考生的调查以及对近年真题的总结分析,笔试部分经常考查的是算法复杂度、数据结构的概念、栈、二叉树的遍历、二分法查找,读者应对此部分进行重点学习。 详细重点学习知识点: 1.算法的概念、算法时间复杂度及空间复杂度的概念 2.数据结构的定义、数据逻辑结构及物理结构的定义 3.栈的定义及其运算、线性链表的存储方式 4.树与二叉树的概念、二叉树的基本性质、完全二叉树的概念、二叉树的遍历 5.二分查找法 6.冒泡排序法 1.1算法 考点1 算法的基本概念 考试链接: 考点1在笔试考试中考核的几率为30%,主要是以填空题的形式出现,分值为2分,此考点为识记内容,读者还应该了解算法中对数据的基本运算。 计算机解题的过程实际上是在实施某种算法,这种算法称为计算机算法。 1.算法的基本特征:可行性、确定性、有穷性、拥有足够的情报。 2.算法的基本要素: (1)算法中对数据的运算和操作 一个算法由两种基本要素组成:一是对数据对象的运算和操作;二是算法的控制结构。 在一般的计算机系统中,基本的运算和操作有以下4类:算术运算、逻辑运算、关系运算和数据传输。 (2)算法的控制结构:算法中各操作之间的执行顺序称为算法的控制结构。 描述算法的工具通常有传统流程图、N-S结构化流程图、算法描述语言等。一个算法一般都可以用顺序、选择、循环3种基本控制结构组合而成。 考点2 算法复杂度 考试链接: 考点2在笔试考试中,是一个经常考查的内容,在笔试考试中出现的几率为70%,主要是以选择的形式出现,分值为2分,此考点为重点识记内容,读者还应该识记算法时间复杂度及空间复杂度的概念。 1.算法的时间复杂度 算法的时间复杂度是指执行算法所需要的计算工作量。 同一个算法用不同的语言实现,或者用不同的编译程序进行编译,或者在不同的计算机上运行,效率均不同。这表明使用绝对的时间单位衡量算法的效率是不合适的。撇开这些与计算机硬件、软件有关的因素,可以认为一个特定算法"运行工作量"的大小,只依赖于问题的规模(通常用整数n表示),它是问题规模的函数。即 算法的工作量=f(n) 2.算法的空间复杂度 算法的空间复杂度是指执行这个算法所需要的内存空间。 一个算法所占用的存储空间包括算法程序所占的空间、输入的初始数据所占的存储空间以及算法执行过程中所需要的额外空间。其中额外空间包括算法程序执行过程中的工作单元以及某种数据结构所需要的附加存储空间。如果额外空间量相对于问题规模来说是常数,则称该算

全国计算机等级考试二级-计算机二级公共基础知识点汇总

计算机二级公共基础知识重点讲解汇总 章节名称内容简介 第一章数据结构与算法本章主要介绍算法的基本概念、数据结构的 定义、线性表、树等重点知识的讲解。 第二章程序设计基础本章主要介绍程序设计风格、结构化程序设 计、面向对象程序设计等重点知识的讲解。 第三章软件工程基础本章主要介绍软件工程的基本概念、结构化 分析方法、软件设计等重点知识的讲解。 第四章数据库设计基础本章主要介绍数据库、数据库管理系统 (DBMS)、数据库系统、数据模型、关系运算、 专门关系运算、数据库设计步骤等重点知识的讲 解。 第一章数据机构与算法 数据结构与算法 ◆算法的基本概念 1. 算法:是对问题处理方案的正确而完整的描述,是求解问题的方法,是指令的有效序列。 2. 具有5个特性: (1)有穷性(在有穷步后完成)算法程序的运行时间是有限的 (2)确定性(每一步都有确定的含义) (3)可行性 (4)输入(一个算法有零个或多个输入) (5)输出(一个算法有一个或多个输出) 3. 算法的复杂度 包括:时间复杂度和空间复杂度。二者没有必然的联系。 时间复杂度:执行算法所需要的计算工作量或基本运算次数。 空间复杂度:算法所需要的空间的度量。 ◆数据结构的定义 1. 数据结构包括数据的逻辑结构、数据的存储结构、数据的操作 数据的逻辑结构:数据的外部结构,指各数据元素之间的逻辑关系,反映人们对数据含义的解释。包括:线性结构(线性表、栈、队列)和非线性结构(树和图)

数据的存储结构:数据的物理结构,指数据的逻辑结构在计算机中的表示。 一个逻辑结构可以有多种存储结构。 ◆线性表:线性表中元素的个数n(n>=0)定义为线性表的长度。 顺序存储是线性表的一种最常用的存储方式。 线性表的顺序存储结构和线性表的链式存储结构分别是随机存取的存储结构和顺序存取的存储结构。 1.栈:是限定在表尾进行插入和删除操作的线性表。具有记忆功能只能顺序存储(错) 允许插入和删除的一端叫栈顶。另一端叫栈底。 后进先出的线性表 2队列:是限定在一端插入而在另一端删除,插入端叫队尾,删除端叫对头。 先进先出的线性表 3栈和队列的顺序存储结构 循环队列属于线性表存储结构中顺序存储结构和链式存储结构的前者。 ◆树 1.定义:树的结点、度(结点的度)、叶子(终端结点)、数的度、深度、有序树和无序数 2.二叉树:结点至多有两棵子树,并且二叉树的子树有之分,次序不能颠倒。 性质:★在二叉树的第i层上至多有2i-1个结点 ★深度为k的二叉树至多有2k-1个结点。 ★对任一个二叉树T,如果其叶子(终端结点数)为n,度为二的结点数为m,则n=m +1. ★具有n个结点的完全二叉树的深度为k+1,其中k是㏒2n的整数部分。 2. 二叉树的遍历 ▼先序遍历(根—左—右) ▼中序遍历(左—根—右) ▼后序遍历(左—右—根) ◆查找算法 (1)顺序查找 顺序查找的平均查找长度为(n+1)/2,最坏的情况下比较的次数为n (2) 二分查找 限定于顺序存储的有序线性表 ◆排序算法 (1)插入类排序 ▲直接插入排序 ▲折半插入排序 ▲希尔排序 (2)交换类排序

计算机二级公共基础知识(复习必备)

计算机二级公共基础知识(复习必备) 1算法的基本概念 1、算法一般应具有以下几个基本特征:可行性、确定性、有穷性、拥有足够的情报。 算法是对解题方案的准确而完整的描述,是一组严谨地定义运算顺序的规则,并且每一个规则都是有效和明确的,此顺序将在有限的次数下终止。 2、算法的基本要素 (1)算法中对数据的运算和操作。通常有4类:算术运算,逻辑运算,关系运算和数据传输。 (2)算法的控制结构。算法的功能不仅仅取决于所选择的操作,还与操作之间的执行顺序及算法的控制结构有关。 3、算法设计基本方法 算法设计的基本方法有列举法、归纳法和递推法、递归法和减半递推技术。 4、算法的复杂度(在算法正确的前提下,评价算法的标准) (1)算法的时间复杂度 算法的时间复杂度是指执行算法所需要的计算工作量。算法的工作量用算法所执行的基本运算次数来度量,而算法所执行的基本运算次数是问题规模的函数。 (2)算法的空间复杂度 算法的空间复杂度,一般是指执行这个算法所需要的内存空间。一个算法所占的存储空间包括算法程序所占的空间、输入的初始数据所占的存储空间以及算法执行过程中所需要的额外空间。 数据结构,直接影响算法的选择和效率。而数据结构包括两方面,即数据的逻辑结构和数据的存储结构。 数据之间的相互关系称为逻辑结构。通常分为4类基本逻辑结构,即集合、线性结构、树形结构和图状结构或网状结构。存储结构图是逻辑结构在存储器中的映象,它包含数据元素的映象和关系的映象。存储结构在计算机有两种,即顺序存储结构和链式存储结构。 时间复杂度与空间复杂度之间没有必然的联系。 2数据结构基本概念 1、数据结构是指反映数据元素之间的数年据元素集合的表示。 2、所谓数据的逻辑结构,是指所映数据元素之间逻辑关系的数据结构。数据的逻辑结构有两个要素:一是数据元素的集合;二是数据元素之间的关系。 3、各数据元素在计算机存储空间中的位置关系与它们的逻辑关系不一定是相同的。数据的逻辑结构在计算机存储空间中的存放形式称为数据的存储结构(也称数据的物理结构)。 3线性表和线性链表 1、线性结构与非线性结构 根据数据结构中各数据元素之间前后件关系复杂程度,一般将数据结构分为两大类型:线性结构与非线性结构。如果一个非空的数据结构满足下列两个条件: (1)有且只有一个根结点。(2)每一个结点最多有一个前件,也最多有一个后件。 则称该数据结构不是线性结构,则称之为非线性结构。 如果一个关系中的属性或属性组并非该关系的关键字,但它是另一个关系的关键字,则称其为本关系的外关键字 2、线性表的基本概念 线性表是由n(n>=0)个数据元素 组成的一个有限序列,表中的每一个数据元素,除了第一个外,有且只有一个前件,除了最后一个外,有且只有一个后件。 3、线性表的顺序存储结构 线性表的顺序存储结构具有以下两个基本特点:线性表中所有元素所占的存储空间是连续的。线性表中各数据元素在存储结构中,其前后件两个元素在存储空间中是紧邻的,且前

计算机二级公共基础常见知识

计算机二级公共基础常见知识 计算机二级公共基础常见知识_公共知识 C语言有丰富的数据结构和运算符。包含了各种数据结构,如整型、数组类型、指针类型和联合类型等,用来实现各种数据结构的运算。这里小编给大家分享一些关于计算机二级公共基础常见知识,方便大家学习了解。 计算机二级公共基础常见知识 二分法查找 二分查找只适用于顺序存储的有序表。此处所述的有序表是指线性中的元素按值非递减排列(即由小到大,但允许相邻元素值相等)。 二分查找的方法如下: 将要查找的元素与有序序列的中间元素进行比较: 如果该元素比中间元素大,则继续在线性表的后半部分(中间项以后的部分)进行查找 如果要查找的元素的值比中间元素的值小,则继续在线性表的前半部分(中间项以前的部分)进行查找 这个查找过程一直按相同的顺序进行下去,一直到查找成功或子表长度为0(说明线性表中没有要查找的元素) 有序线性表的二分法查找,条件是必须这个有序线性表的存储方式是顺序存储的。它的查找效率比顺序查找要高得多,它的最坏情况的查找次数是log2n次,而顺序查找的最坏情况的查找次数是n次。 当然,二分查找的方法也支持顺序存储的递减序列的线性表。 有非递减有序线性表:1、2、4、5、7、9,要查找元素6。查找的方法是: 序列长度为n=6,中间元素的序号m=[(n+1)/2]=3 查找计次k=1,将元素6与中间元素即元素4进行比较,不等,64 查找计次k=2,查找继续在后半部分进行,后半部分子表的长度为3,计算中间元素的序号:m=3+[(3+1)/2]=5,将元素与后半部分的中间项进行比较,即第5个元素中的7进行比较,不等,67

查找计次k=3,继续查找在后半部分序列的前半部分子序列中查找,子表长度为1,则中间项序号即为m=3+[(1+1)/2]=4,即与第4个元素5进行比较,不相等,继续查 找的子表长度为0,则查找结束 程序设计方法与风格 程序设计方法:主要经过了面向过程的结构化程序设计和面向对象的程序设计方法。程序设计风格,是指编写程序时所表现出来的特点、习惯和逻辑思路。 要形成良好的程序设计的风格,应考虑如下因素: 1.源程序文档化:符号名的命名、程序注释、视觉组织 2.数据说明方法:数据说明的次序规范化;说明语句中变量安排有序化;使用注释来 说明复杂的数据结构。 3.语句的结构:在一行内只写一条语句;程序的编写应该优先考虑清晰性;除非对效 率有特殊的要求,否则,应做到清晰第一,效率第二;首先保证程序的正确,然后再要求速度;避免使用临时变量使程序的可读性下降;尽量使用库函数,即尽量使用系统提 供的'资源;避免采用复杂的条件语句;尽量减少使用“否定”条件的条件语句;数据结 构要有利于程序的简化;要模块化,使模块功能尽可能单一化;利用信息隐蔽,确保每 一个模块的独立性;从数据出发去构造程序;不要修补不好的程序,要重新编写。 4.输入和输出 (1)对所有的输入输出数据都要检验数据的合法性; (2)检查输入项的各种重要组合的合理性; (3)输入格式要简单,以使得输入的步骤和操作尽可能简单; (4)输入数据时,应允许自由格式; (5)应允许缺省值; (6)输入一批数据时,最好使用输入结束标志; (7)以交互式输入输出方式进行输入时,要在屏幕上使用提示符明确输入的请求,同时在数据输入过程中和输入结束时,应在屏幕上给出状态信息; (8)当程序设计语言对输入格式有严格要求时,应保持输入格式与输入语句的一致性;给所有的输出加注释,并设计输出报表格式。 计算机二级考试题型 所谓国二,就是全国计算机二级考试,它考核参试者的两大能力,其内容包括:

全国计算机等级考试二级教程公共基础知识

全国计算机二级公共基础知识 第一章数据结构与算法 经过对部分考生的调查以及对近年真题的总结分析,笔试部分经常考查的是算法复杂度、数据结构的概念、栈、二叉树的遍历、二分法查找,读者应对此部分进行重点学习。 详细重点学习知识点: 1.算法的概念、算法时间复杂度及空间复杂度的概念 2.数据结构的定义、数据逻辑结构及物理结构的定义 3.栈的定义及其运算、线性链表的存储方式 4.树与二叉树的概念、二叉树的基本性质、完全二叉树的概念、二叉树的遍历 5.二分查找法 6.冒泡排序法 1.1算法 考点1算法的基本概念 考点1在笔试考试中考核的几率为30%,主要是以填空题的形式出现,分值为2分,此考点为识记内容,读者还应该了解算法中对数据的基本运算。

计算机解题的过程实际上是在实施某种算法,这种算法称为计算机算法。 1.算法的基本特征:可行性、确定性、有穷性、拥有足够的情报。2.算法的基本要素: (1)算法中对数据的运算和操作 一个算法由两种基本要素组成:一是对数据对象的运算和操作;二是算法的控制结构。 在一般的计算机系统中,基本的运算和操作有以下4类:算术运算、逻辑运算、关系运算和数据传输。 (2)算法的控制结构:算法中各操作之间的执行顺序称为算法的控制结构。 描述算法的工具通常有传统流程图、N-S结构化流程图、算法描述语言等。一个算法一般都可以用顺序、选择、循环3种基本控制结构组合而成。 考点2算法复杂度 考点2在笔试考试中,是一个经常考查的内容,在笔试考试中出现的几率为70%,主要是以选择的形式出现,分值为2分,此考点为重点识记内容,读者还应该识记算法时间复杂度及空间复杂度的概念。 1.算法的时间复杂度

2021计算机二级公共基础知识pdf

2021计算机二级公共基础知识pdf 标题:2021计算机二级公共基础知识PDF:全面解读与学习指南 引言概述: 计算机二级公共基础知识考试是计算机专业人士的重要考试之一。为了帮助广大考生更好地备考和应对这一考试,本文将全面解读2021计算机二级公共基础知识PDF,从五个大点进行详细阐述,为考生提供全面的学习指南。 正文内容: 1. 软件基础知识 1.1 软件的定义和分类 详细阐述软件的定义以及常见的软件分类,如系统软件、应用软件、开发工具等。通过了解不同类型的软件,考生可以对软件的功能和应用有更清晰的认识。 1.2 软件的安装与卸载 介绍软件的安装与卸载方法,包括常见的安装程序和卸载程序的使用,以及注意事项和常见问题的解决方法。这些知识对于考生在实际操作中的灵活运用至关重要。 1.3 软件的更新与升级 详细阐述软件的更新与升级的概念和方法,包括手动更新和自动更新的区别,以及如何选择适合自己的更新方式。同时,还应该提及软件升级的重要性和注意事项。 2. 硬件基础知识 2.1 计算机硬件的组成

介绍计算机硬件的基本组成,包括主板、CPU、内存、硬盘、显卡等各个部件的作用和相互关系。通过对硬件的了解,考生可以更好地理解计算机的工作原理。 2.2 输入输出设备 详细介绍常见的输入输出设备,如键盘、鼠标、显示器、打印机等,包括设备的功能、连接方式和使用注意事项。对于考生来说,熟悉输入输出设备的使用是必不可少的。 2.3 存储设备 阐述计算机的存储设备,包括硬盘、光盘、U盘等,介绍它们的特点、使用方法以及数据的存储与传输。对于备份和存储重要数据,考生需要了解不同存储设备的特点和适用场景。 3. 网络基础知识 3.1 网络的定义和分类 介绍网络的基本概念和分类,如局域网、广域网、互联网等,以及它们的特点和应用场景。了解网络的基本知识,有助于考生理解计算机网络的工作原理。 3.2 网络协议与通信 详细阐述常见的网络协议和通信方式,如TCP/IP协议、HTTP协议、FTP协议等,以及它们的作用和使用方法。考生需要掌握网络协议和通信的基本知识,以便在网络环境下进行数据传输和通信。 3.3 网络安全与防护 介绍网络安全的基本概念和常见的安全威胁,如病毒、黑客攻击等,以及防护措施和安全管理的方法。考生需要了解网络安全的重要性,并学会使用安全防护工具保护自己的计算机和数据安全。

全国计算机二级公共基础知识

全国计算机二级公共基础知识计算机技术的飞速发展已经渗透到我们生活的方方面面。无论是工作、学习还是娱乐,计算机都发挥着重要的作用。全国计算机二级公共基础知识考试是计算机技术水平的一项基本评估指标,下面将为大家介绍该考试的相关内容。 一、考试简介 全国计算机二级公共基础知识考试是由计算机技术与软件专业技术资格(NITTP)中心组织的一项国家级考试。考试内容主要包括计算机基础知识、计算机操作系统、网络基础知识、办公自动化应用、信息安全与管理、计算机维护与管理等六个方面的知识。 二、考试内容 1. 计算机基础知识 计算机基础知识作为计算机技术的基石,是考试的重点内容。它包括计算机的发展历程、计算机的组成、计算机的工作原理、计算机的应用领域等方面的内容。 2. 计算机操作系统 操作系统作为计算机的核心软件之一,在考试中占据重要地位。考试将涉及到操作系统的概念、操作系统的功能与特点、操作系统的分类与应用等方面的内容。 3. 网络基础知识

网络已经成为人们生活中不可或缺的一部分,因此,对网络基础的 了解也成为考试的重要内容之一。考试将涉及到网络的基本概念、网 络的分类与拓扑结构、网络传输媒介与设备等方面的内容。 4. 办公自动化应用 办公自动化是计算机在办公领域的应用,也是考试的一项重要内容。考试将涉及到办公自动化软件的概念与特点、常见办公软件的使用技巧、办公自动化与办公效率提升等方面的内容。 5. 信息安全与管理 信息安全是当前社会中的一个重要问题,也是考试中需要重点关注 的内容。考试将涉及到信息安全的基本概念、信息安全的威胁与防护、个人信息保护等方面的内容。 6. 计算机维护与管理 计算机的维护与管理能够保证其正常运行,也是考试的一项重点内容。考试将涉及到计算机硬件的维护、计算机软件的安装与卸载、计 算机故障排除等方面的内容。 三、备考建议 1. 学习基础知识 全国计算机二级公共基础知识考试的内容庞杂,但基础知识是考试 的重点。建议考生多阅读相关教材、资料,理解计算机的基本原理与 应用。

国家计算机二级公共基础知识点部分

程序设计基础 1.程序设计风格 好的程序设计风格有利于提高程序的正确性、可读性、可维护性和可用性。要是程序有良好的风格概括起来可以分为4部分:源程序文档化、数据说明、语句结构、输入输出方法。 用户所定义的标示符必须以字母或下划线开头。大、小写字母代表不同标识。 2.结构化程序设计 (1)结构化程序设计的基本特征: ▼程序有3种基本结构组成:顺序结构、选择结构、循环结构 ▼整个程序采用模块化结构。模块划分的原则:模块内具有高内聚度、模块间具有低耦合度。 ▼有限的使用goto语句,只限定在一个结构的内部跳转,不允许从一个结构跳到另一结构。 ▼程序设计时采用“自顶向下、逐步求精”的实施方法。 3种基本结构组成的算法只能完成符合结构化的任务 (3)结构化程序设计的方法:逐步求精和模块化程序设计方法。 结构化设计的总体思想是采用模块化结构,自上而下,逐步求精。 3. 面向对象程序设计

● 基本概念 对象:系统中运行的实体,是有特殊属性(数据)和方法的实体 类:由属性和方法构成。 一组具有相同的数据结构和相同的行为特征的对象的集合称为类 在面对对象的方法中,类的实例称为对象 面向对象程序设计特征的是:继承性、多态性、封装性 在面向对象的方法中,实现信息隐蔽是依靠对象的封装 任何对象都必须有继承性(错) 例题精选: 1. 在面对对象的方法中,一个对象请求另一个对象为其服务的方式是通过发送:信息 2. 面对对象的设计方法与传统的面向过程的方法有本质的区别,它的基本原理是:使用现实世界的概念抽象的思考问题从而自然地解决问题. 3. 结构化方法中,软件功能分解属于软件开发阶段中的总体设计 4. 结构化程序设计主要强调的是:程序的易读性 5. 面向对象的设计程序主要考虑的是:提高软件的可重用性 6. 类通过接口与外界发生关系. 数据结构与算法

全国计算机二级公共基础知识汇总

全国计算机二级公共基础知识汇总 计算机二级公共基础知识是计算机专业人员必备的基本知识,包括计算机基本原理、操作系统、网络原理、数据库原理和计算机应用等方面的知识。下面是全国计算机二级公共基础知识的完整汇总。 一、计算机基本原理:计算机硬件的组成和工作原理,包括中央处理器、存储器、输入输出设备等。 1.中央处理器:控制计算机的运算和控制活动,包括运算单元和控制单元。 2.存储器:计算机的主要组成部分,包括内存和外存。 3.输入输出设备:与计算机进行交互的设备,包括键盘、鼠标、显示器、打印机等。 二、操作系统:计算机的核心软件,负责管理和控制计算机的资源。 1.操作系统的功能:包括进程管理、内存管理、文件管理、设备管理和用户界面等。 2. 常见的操作系统:Windows、Linux、Unix等。 三、网络原理:计算机网络的基本原理和常用协议,包括网络拓扑、网络协议和安全性等。 1.网络拓扑:指网络中计算机的物理连接方式,包括星型、总线型、环型等。 2.网络协议:指计算机网络中不同计算机之间通信的规则和约定,常见的协议有TCP/IP、HTTP、FTP等。

3.网络安全性:指保护计算机网络不受到非法侵入和攻击的能力,包括防火墙、加密技术等。 四、数据库原理:数据库的基本原理和常用操作,包括数据模型、关系数据库和SQL语言等。 1.数据模型:指描述数据结构、数据操作和数据约束的概念工具,常见的数据模型有层次模型、网状模型和关系模型等。 2. 关系数据库:采用关系模型进行数据组织和管理的数据库,常见的关系数据库有Oracle、MySQL、SQL Server等。 3.SQL语言:结构化查询语言,用于对关系数据库进行查询、更新和管理。 五、计算机应用:计算机在不同领域应用的基本知识,包括办公软件、图像处理、网页设计等。 1.办公软件:包括文字处理、电子表格和演示文稿等。 3. 网页设计:指网页的布局、设计和开发,需要掌握HTML、CSS和JavaScript等技术。 以上就是全国计算机二级公共基础知识的完整汇总。这些知识包括计算机基本原理、操作系统、网络原理、数据库原理和计算机应用等方面的内容,对于计算机专业人员来说,掌握这些知识是非常重要的。

2024计算机二级公共基础知识完整

2024计算机二级公共基础知识完整 计算机二级公共基础知识包括计算机硬件、操作系统、网络和网络安全、办公应用和多媒体等方面的基本知识。下面将对这些基础知识依次进 行详细介绍。 首先是计算机硬件方面的知识。计算机硬件包括中央处理器(CPU)、内存、硬盘、主板等等。对于CPU,需要了解它是计算机的核心组件,负 责执行计算机的指令和控制计算机的运行。内存则用于存储计算机当前正 在运行的程序和数据,比较重要的是了解RAM和ROM的区别,RAM用于临 时存储数据和程序,而ROM则用于存储一些固定的程序和数据。硬盘则是 计算机的存储设备,用于长期存储数据和程序。主板是计算机中最重要的 零部件之一,它将CPU、内存、硬盘等组件连接起来,同时还提供了各种 扩展接口,如USB接口、显卡插槽等。 其次是操作系统方面的知识。操作系统是计算机的核心软件,它负责 管理计算机的硬件资源,同时提供了与硬件交互的界面。常见的操作系统 包括Windows、Linux、Mac OS等。需要了解操作系统的安装和配置,如 磁盘分区、文件系统等。同时还要了解操作系统的基本功能,如进程管理、文件管理、内存管理等。此外,还需要了解操作系统的常见问题和故障排 除方法。 接下来是网络和网络安全方面的知识。网络是计算机之间进行数据传 输的基础设施,需要了解局域网和广域网的区别,以及常见的网络设备, 如交换机、路由器等。此外,还需要了解网络协议,如TCP/IP协议、HTTP协议等。网络安全是保护计算机网络和数据的重要工作,需要了解 常见的网络攻击方式,如病毒、木马、网络钓鱼等,以及常见的网络安全 防护措施,如防火墙、网络加密等。

计算机二级公共基础知识总结

计算机二级公共基础知识总结

计算机二级公共基础知识总结 第一章数据结构与算法 1.1 算法 算法:是指解题方案的准确而完整的描述。 算法不等于程序,也不等计算机方法,程序的编制不可能优于算法的设计。 算法的基本特征:是一组严谨地定义运算顺序的规则,每一个规则都是有效的,是明确的,此顺序将在有限的次数下终止。特征包括:(1)可行性; (2)确定性,算法中每一步骤都必须有明确定义,不充许有模棱两可的解释,不允许有多义性; (3)有穷性,算法必须能在有限的时间内做完,即能在执行有限个步骤后终止,包括合理的执行时间的含义; (4)拥有足够的情报。 算法的基本要素:一是对数据对象的运算和操作;二是算法的控制结构。 指令系统:一个计算机系统能执行的所有指令的集合。

表。 线性表的顺序存储结构具有以下两个基本特点: (1)线性表中所有元素的所占的存储空间是连续的; (2)线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。 ai的存储地址为:ADR(ai)=ADR(a1)+(i-1)k,,ADR(a1)为第一个元素的地址,k代表每个元素占的字节数。 顺序表的运算:插入、删除。(详见14--16页) 1.4 栈和队列 栈是限定在一端进行插入与删除的线性表,允许插入与删除的一端称为栈顶,不允许插入与删除的另一端称为栈底。 栈按照“先进后出”(FILO)或“后进先出”(LIFO)组织数据,栈具有记忆作用。用top 表示栈顶位置,用bottom表示栈底。 栈的基本运算:(1)插入元素称为入栈运算;(2)删除元素称为退栈运算;(3)读栈顶元素是将栈顶元素赋给一个指定的变量,此时指针无

全国计算机二级公共基础知识(打印版)

全国计算机二级公共基础知识(重点部分) 第一章 数据结构基础 1.1算法 1.1.1 算法的基本概念 算法是解题方案的准确而完整的描述,它不等于程序,也不等计算方法。 算法的基本特征 可行性(effectiveness) 确定性(definiteness) 有穷性(finiteness) 拥有足够的情报 算法的时间复杂度 执行算法所需要的计算工作量 与下列因素有关: 书写算法的程序设计语言 ,编译产生的机器语言,代码质量 机器执行指令的速度 ,问题的规模 问题的规模函数 算法的工作量=f(n) 算法中基本操作重复执行的频率T(n),是问题规模n 的某个函数f(n),记作:T(n)=O(f(n)) 记号“O ”读作“大O ”。表示随问题规模n 的增加,算法执行时间的增长率和f(n)相应增加。 常见算法复杂度: O(1):常数阶 O(n):作线性阶 O(n2):平方阶 O(n3):立方阶 O(logn):对数阶 O(2n):指数阶 算法的空间复杂度 算法执行过程中所需的最大存储空间 存储量包括以下三部分 算法程序所占的空间 ,输入的初始数据所占的存储空间 ,算法执行过程中所要的额外空间 1.2 数据结构的基本概念 数据的逻辑结构 对数据元素之间的逻辑关系的描述 只抽象地反映数据元素之间的逻辑关系,与计算机中的存储无关 数据的存储结构 数据的逻辑结构在计算机存储空间中的存放形式 常用的存储结构:顺序, 链式, 索引 一种数据结构可根据需要采用不同的存储结构。采用不同的存储结构,其数据处理的效率是不同 线性结构 如果一个非空数据结构满足下列两个条件: 有且只有一个根结点; 每一个结点最多有一个前件,也最多有一个后件。 常见的线性结构有:线性表、栈与队列、线性链表 非线性结构 1.数据的逻辑结构 2、数据的存储结构 3、数据的运算:检索、排序、插入、删除、修改等。 A .线性结构 B .非线性结构 A 顺序存储 B 链式存储 线性表 栈 队 树形结构 图形结构 数据结构的三个方面

(2021年整理)计算机二级公共基础知识

计算机二级公共基础知识 编辑整理: 尊敬的读者朋友们: 这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望(计算机二级公共基础知识)的内容能够给您的工作和学习带来便利。同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。 本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为计算机二级公共基础知识的全部内容。

第一章数据结构与算法 1。算法 算法:是指解题方案的准确而完整的描述。 算法不等于程序,也不等于计算方法,程序的编制不可能优于算法的设计。 算法的基本特征:是一组严谨地定义运算顺序的规则,每一个规则都是有效的,是明确的,此顺序将在有限的次数下终止。特征包括: (1)可行性; (2)确定性,算法中每一步骤都必须有明确定义,不充许有模棱两可的解释,不允许有多义性; (3)有穷性,算法必须能在有限的时间内做完,即能在执行有限个步骤后终止,包括合理的执行时间的含义; (4)拥有足够的情报。 算法的基本要素:一是对数据对象的运算和操作;二是算法的控制结构。 算法的三种基本控制结构:顺序结构、选择结构、循环结构。算法复杂度包括:算法时间复杂度和算法空间复杂度。 算法时间复杂度是指执行算法所需要的计算工作量. 算法空间复杂度是指执行这个算法所需要的内存空间. 案例0。算法的有穷性是指(D) A.算法只能被有限的用户使用 B.算法程序的长度是有限的 C。算法程序所处理的数据量是有限的 D.算法程序的运行时间是有限的 案例1。下列叙述中正确的是(BG) A.一个算法的时间复杂度大,则其空间复杂度必定小 B.算法的时间复杂度与空间复杂度没有直接关系 C。一个算法的空间复杂度大,则其时间复杂度也必定大 D。算法的时间复杂度与空间复杂度一定相关 E.算法的效率只与问题的规模有关,而与数据的存储结构无关F。数据的逻辑结构与存储结构是一一对应的 G。算法的时间复杂度是指执行算法所需要的计算工作量 2。栈及其基本运算

相关主题
相关文档
最新文档