全国计算机等级考试二级公共基础知识基本数据结构与算法公共基础知识基本要求1.掌握算法的基本概念。2.掌握基本数据结构及其操作。3.掌握基本排序和查找算法。4.掌握逐步求精的结构化程序设计方法。5.掌握软件工程的基本方法,具有初步应用相关技术进行软件开发的能力。6.掌握数据的基本知识,了解关系数据库的设计一、数据结构与算法二、程序设计基础三、软件工程基础四、数据库设计基础数据结构与算法1.算法的基本概念;算法复杂度的概念和意义(时间复杂度与空间复杂度)。2.数据结构的定义;数据的逻辑结构与存储结构;数据结构的图形表示;线性结构与非线性结构的概念。3.线性表的定义;线性表的顺序存储结构及其插入与删除运算。4.栈和队列的定义;栈和队列的顺序存储结构及其基本运算。5.线性单链表、双向链表与循环链表的结构及其基本运算。6.树的基本概念;二叉树的定义及其存储结构;二叉树的前序、中序和后序遍历。7.顺序查找与二分法查找算法;基本排序算法(交换类排序,选择类排序,插入类排序)。一.算法的基本概念计算机解题的过程实际上是在实施某种算法,这种算法称为计算机算法。就是指解题方案的准确而完备的描述。一个算法通常由两种基本要素组成:一是对数据对象的运算和操作,二是算法的控制结构。1.算法的基本特征:可行性,确定性,有穷性,拥有足够的情报。2.算法的基本要素:算法中对数据的运算和操作、算法的控制结构。3.算法设计的基本方法:列举法、归纳法、递推、递归、减半递推技术、回溯法。4.算法设计的要求:正确性、可读性、健壮性、效率与低存储量需求在计算机中,算法是指______。A.查询方法B.加工方法C.解题方案的准确而完整的描述D.排序方法C二.算法的复杂度1.算法的时间复杂度:指执行算法所需要的计算工作量2.算法的空间复杂度:执行这个算法所需要的内存空间算法的复杂度的表示时间复杂度:算法中基本操作重复执行的次数是问题规模n的某个函数f(n),算法的时间量度记作T(n)=O(f(n))表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称时间复杂度。空间复杂度:算法所需存储空间的量度。记作:S(n)=O(f(n))算法的时间复杂度是指______。A.执行算法程序所需要的时间B.算法程序的长度C.算法执行过程中所需要的基本运算次数D.算法程序中的指令条数下面叙述正确的是______。A.算法的执行效率与数据的存储结构无关B.算法的空间复杂度是指算法程序中指令(或语句)的条数C.算法的有穷性是指算法必须能在执行有限个步骤之后终止D.以上三种描述都不对(C)(C)算法的空间复杂度是指______。A.算法程序的长度B.算法程序中的指令条数C.算法程序所占的存储空间D.算法执行过程中所需要的存储空间算法一般都可以用哪几种控制结构组合而成______。A.循环、分支、递归B.顺序、循环、嵌套C.循环、递归、选择D.顺序、选择、循环算法的复杂度主要包括______复杂度和空间复杂度。(D)(D)答:时间三.数据结构的定义数据结构:相互之间存在一种或多种特定关系的数据元素的集合1.数据的逻辑结构:反映数据元素之间的关系的数据元素集合的表示。数据的逻辑结构包括集合、线形结构、树形结构和图形结构四种。2.数据的存储结构:数据的逻辑结构在计算机存储空间中的存放形式称为数据的物理结构,又称存储结构。常用的存储结构有顺序、链接、索引等存储结构。数据的逻辑结构在计算机存储空间中的存放形式称为数据的______。答:存储结构数据的存储结构是指______。A.数据所占的存储空间量B.数据的逻辑结构在计算机中的表示C.数据在计算机中的顺序存储方式D.存储在外存中的数据(B)四.数据结构的图形表示:在数据结构中,没有前件的结点称为根结点;没有后件的结点成为终端结点。插入和删除是对数据结构的两种基本运算。还有查找、分类、合并、分解、复制和修改等。(1)集合:松散的关系。(2)线性结构:一对一(3)树形结构:一对多(4)图状结构:多对多五.线性结构和非线性结构根据数据结构中各数据元素之间前后件关系的复杂程度,一般将数据结构分为两大类型:线性结构和非线性结构。线性结构:非空数据结构满足:有且只有一个根结点;每个结点最多有一个前件,最多只有一个后件。非线性结构:如果一个数据结构不是线性结构,称之为非线性结构。常见的线性结构:线性表、栈、队列常见的非线性结构:树、图注意:链表也属于线性表,所以也是线性结构六.线性表的定义线性表是n个元素构成的有限序列(A1,A2,A3……)。表中的每一个数据元素,除了第一个以外,有且只有一个前件。除了最后一个以外有且只有一个后件。即线性表是一个空表,或可以表示为(a1,a2,……an),其中ai(I=1,2,……n)是属于数据对象的元素,通常也称其为线性表中的一个结点。非空线性表有如下一些特征:(1)有且只有一个根结点a1,它无前件;(2)有且只有一个终端结点an,它无后件;(3)除根结点与终端结点外,其他所有结点有且只有一个前件,也有且只有一个后件。线性表中结点的个数n称为线性表的长度。当n=0时称为空表。七.线性表的顺序存储结构线性表的顺序表指的是用一组地址连续的存储单元依次存储线性表的数据元素。线性表的顺序存储结构具备如下两个基本特征:1.线性表中的所有元素所占的存储空间是连续的;2.线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。即线性表逻辑上相邻、物理也相邻,则已知第一个元素首地址和每个元素所占字节数,则可求出任一个元素首地址。顺序存储方法是把逻辑上相邻的结点存储在物理位置______的存储单元中。答:相邻假设线性表的每个元素需占用K个存储单元,并以所占的第一个单元的存储地址作为数据元素的存储位置。则线性表中第i+1个数据元素的存储位置LOC(ai+1)和第i个数据元素的存储位置LOC(ai)之间满足下列关系:LOC(ai+1)=LOC(ai)+KLOC(ai)=LOC(a1)+(i-1)*K①其中,LOC(a1)是线性表的第一个数据元素a1的存储位置,通常称做线性表的起始位置或基地址。因为在顺序存储结构中,每个数据元素地址可以通过公式①计算得到,所以线性表的顺序存储结构是随机存取的存储结构。在线性表的顺序存储结构下,可以对线性表做以下运算:插入、删除、查找、排序、分解、合并、复制、逆转八.顺序表的插入运算线性表的插入运算是指在表的第I个位置上,插入一个新结点x,使长度为n的线性表(a1,a2…ai…an)变成长度为n+1的线性表(a1,a2…x,ai…an).该算法的时间主要花费在循环的结点后移语句上,执行次数是n-I+1。当I=n+1,最好情况,时间复杂度o(1)当I=1,最坏情况,时间复杂度o(n)算法的平均时间复杂度为o(n)九.顺序表的删除运算线性表的删除运算是指在表的第I个位置上,删除一个新结点x,使长度为n的线性表(a1,a2…ai…an)变成长度为n-1的线性表(a1,a2…ai-1,ai+1…an).当I=n,时间复杂度o(1),当I=1,时间复杂度o(n),平均时间复杂度为o(n)顺序表的插入运算过程十.栈的存储结构及其基本运算1.什么是栈?栈实际上也是一个线性表,只不过是一种特殊的线性表。栈是只能在表的一端进行插入和删除运算的线性表,通常称插入、删除这一端为栈顶(TOP),另一端为栈底(BOTTOM)。当表中没有元素时称为空栈。栈顶元素总是后被插入的元素,从而也是最先被删除的元素;栈底元素总是最先被插入的元素,从而也是最后才能被删除的元素。假设栈S=(a1,a2,a3,……an),则a1称为栈底元素,an称为栈顶元素。栈中元素按a1,a2,a3……an的次序进栈,退栈的第一个元素应该是栈顶元素。即后进先出。注意:栈是限定仅在表尾进行插入或删除操作的线性表。栈的表尾称为栈顶,表头称为栈底,不含元素的空表称为空栈。栈又称后进先出(LIFO,lastinfirstout)的线性表。2.栈的顺序存储及其运算用S(1:M)作为栈的顺序存储空间。M为栈的最大容量。栈的基本运算有三种:入栈、退栈与读栈顶元素。入栈运算:在栈顶位置插入一个新元素。首先将栈顶指针进一(TOP+1),然后将新元素插入到栈顶指针指向的位置。退栈运算:指取出栈顶元素并赋给一个指定的变量。首先将栈顶元素赋给一个指定的变量,然后将栈顶指针退一(TOP-1)读栈顶元素:将栈顶元素赋给一个指定的变量。栈顶指针不会改变。例、一叠书或一叠盘子。栈的抽象数据类型的定义如下:anan-1a2a1……栈顶top栈底bottom下列关于栈的叙述中正确的是______。A.在栈中只能插入数据B.在栈中只能删除数据C.栈是先进先出的线性表D.栈是先进后出的线性表栈底至栈顶依次存放元素A、B、C、D,在第五个元素E入栈前,栈中元素可以出栈,则出栈序列可能是______。A.ABCEDB.DBCEAC.CDABED.DCBEA解题分析:A、B、C、D的出栈顺序一定是DCBA,E在其中任何位置都可以(D)(D)十一.队列的存储结构及其基本运算1.什么是队列队列是只允许在一端删除,在另一端插入的顺序表,允许删除的一端叫做队头,允许插入的一端叫做队尾。队列的修改是先进先出。往队尾插入一个元素成为入队运算。从对头删除一个元素称为退队运算。注意:队列:限定仅在表的一端进行插入,在另一端进行删除操作的线性表。是一种先进先出(FIFO,firstinfirstout)的线性表。允许插入的的一端叫队尾,允许删除的一端则称为队头。下图是队列的示意图:a1a2…an出队入队队头队尾由于队列的队头和队尾的位置是变化的,因而要设两个指针和分别指示队头和队尾元素在队列中的位置,它们的初始值队列初始化时均应置为0。入队时将新元素插入所指的位置,然后将加1。出队时,删去所指的元素,然后将加1并返回被删元素。由此可见,当头尾指针相等时队列为空。在非空队列里,头指针始终指向队头元素,而尾指针始终指向队尾元素的下一位置。01230123FrontrearabcFrontrear(a)队列初始为空(b)A,B,C入队01230123bcfrontrearfrontrear(c)a出队(d)b,c出队,队为空和栈类似,队列中亦有上溢和下溢现象。此外,顺序队列中还存在“假上溢”现象。因为在入队和出队的操作中,头尾指针只增加不减小,致使被删除元素的空间永远无法重新利用。因此,尽管队列中实际的元素个数远远小于向量空间的规模,但也可能由于尾指针巳超出向量空间的上界而不能做入队操作。该现象称为假上溢。下列关于队列的叙述中正确的是______。A.在队列中只能插入数据B.在队列中只能删除数据C.队列是先进先出的线性表D.队列是先进后出的线性表(C)2.循环队列及其运算在实际应用中,队列的顺序存储结构一般采用循环队列的形式。所谓循环队列,就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间。在循环队列中,用队尾指针rear指向队列中的队尾元素,用队头指针front指向队头元素的前一个位置,因此,从队头指针front指向的后一个位置直到队尾指针rear指向的位置之间所有的元素均为队列中的元素。克服上述假上溢现象的方法是将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量,存储在其中的队列称为循环队列(CircularQueue)。在循环队列中进行出队、入队操作时,头尾指针仍要加1,朝前移动。只不过当头尾指针指向向量上界(QueueSize-1)时,其加1操作的结果是指向向量的下界0在实际使用循环队列时,为了能区分队满还是队列空,通常需要增加一个标志S:队列空,则S=0,rear=front=m队列满,则S=1,rear=front=m循环队列主要有两种基本运算:入队运算和退队运算入队运算指在循环队列的队尾加入一个新元素,首先rear=rear+1,当rear=m+1时,置rear=1,然后将新元素插