计算机二级考试C语言公共基础知识之数据结构与算法篇2007年二级C考试大纲-公共基础知识(一)基本要求1.掌握算法的基本概念。2.掌握基本数据结构及其操作。3.掌握基本排序和查找算法。4.掌握逐步求精的结构化程序设计方法。5.掌握软件工程的基本方法,具有初步应用相关技术进行软件开发的能力。6.掌握数据库的基本知识,了解关系数据库的设计。1.数据结构与算法(1).算法的基本概念;算法复杂度的概念和意义(时间复杂度与空间复杂度)。(2).数据结构的定义;数据的逻辑结构与存储结构;数据结构的图形表示(3).线性结构与非线性结构的概念(4).线性表的定义;线性表的顺序存储结构及其插入与删除运算。(5).栈和队列的定义;栈和队列的顺序存储结构及其基本运算。(6).线性单链表、双向链表与循环链表的结构及其基本运算。(7).树的基本概念;二叉树的定义及其存储结构;二叉树的前序、中序和后序遍历。(8).顺序查找与二分法查找算法;基本排序算法(交换类排序,选择类排序,插入类排序)。(二)考试内容2.程序设计基础(1).程序设计方法与风格。(2).结构化程序设计。(3).面向对象的程序设计方法,对象,方法,属性及继承与多态性。3.软件工程基础(1).软件工程基本概念,软件生命周戎概念,软件工具与软件开发环境。(2).结构化分析方法,数据流图,数据字典,软件需求规格说明书。(3).结构化设计方法,总体设计与详细设计。(4).软件测试的方法,白盒测试与黑盒测试,测试用例设计,软件测试的实施,单元测试、集成测试和系统测试。(5).程序的调试,静态调试与动态调试。4.数据库设计基础(1).数据库的基本概念:数据库,数据库管理系统,数据库系统。(2).数据模型,实体联系模型及E-R图,从E-R图导出关系数据模型。(3).关系代数运算,包括集合运算及选择、投影、连接运算,数据库规范化理论。(4).数据库设计方法和步骤:需求分析、概念设计、逻辑设计和物理设计的相关策略。5.考试方式(1)公共基础的考试方式为笔试,与C语言(VB、VF、Java、Access、VC++)的笔试部分合为一张试卷。公共基础部分全卷的30分。(2)公共基础知识有10道选择题和5道填空题。一.数据结构与算法本章节主要考查算法的基本概念、基本的数据结构及其基本操作、查找和排序算法。本章的内容在历次试题中所占的比例约为11.2%,都是以选择题和填空题的形式出现的。算法的基本概念、数据结构的定义、栈和树几乎是每次必考的知识点;查找和排序基本上每次有一道试题;线性表、队列和线性链表很少单独出题,但经常与其它知识点结合出题。算法是对一个问题求解步骤的一种描述,是求解问题的方法,它是指令的有限序列,其中每条指令表示一个或者多个操作。一般来说,一个算法具有以下5个主要的特征。(1)有穷性:一个算法(对任何合法的输入)在执行有穷步后能够结束,并且在有限的时间内完成。(2)确定性:算法中的每一步都有确切的含义。(3)可行性:算法中的操作能够用已经实现的基本运算执行有限次来实现。(4)输入:一个算法有零个或者多个输入,零个输入就是算法本身缺定了初始条件。(5)输出:一个算法有一个或者多个输出,以反映出数据加工的结果。1算法算法的基本要素:(1)是对数据对象的运算和操作;基本运算和操作包括:算术运算、逻辑运算、关系运算、数据传输。(2)是算法的控制结构。算法的控制结构:顺序结构、选择结构、循环结构。算法基本设计方法:列举法、归纳法、递推、递归、减半递推技术、回溯法。算法复杂度:算法时间复杂度和算法空间复杂度。(1)算法时间复杂度是指执行算法所需要的计算工作量。(2)算法空间复杂度是指执行这个算法所需要的内存空间。2数据结构的基本概念数据结构研究的三个方面:①数据集合中各数据元素之间所固有的逻辑关系,即数据的逻辑结构;②在对数据进行处理时,各数据元素在计算机中的存储关系,即数据的存储结构;③对各种数据结构进行的运算。数据结构是指相互有关联的数据元素的集合。数据的逻辑结构包含:(1)表示数据元素的信息D;(2)表示各数据元素之间的前后件关系R。B=(D,R)其中B为数据结构数据的存储结构有顺序、链接、索引等。线性结构条件:(1)有且只有一个根结点;(2)每一个结点最多有一个前件,也最多有一个后件。(3)在一个线性结构中插入或删除任何一个节点后还是线性结构非线性结构:不满足线性结构条件的数据结构。3线性表及其顺序存储结构线性表的基本概念线性表是n个元素构成的有限序列(A1,A2,A3……)。表中的每一个数据元素,除了第一个以外,有且只有一个前件。除了最后一个以外有且只有一个后件。即线性表是一个空表,或可以表示为(a1,a2,……an),其中ai(I=1,2,……n)是属于数据对象的元素,通常也称其为线性表中的一个结点。非空线性表有如下一些特征:(1)有且只有一个根结点a1,它无前件;(2)有且只有一个终端结点an,它无后件;(3)除根结点与终端结点外,其他所有结点有且只有一个前件,也有且只有一个后件。线性表中结点的个数n称为线性表的长度。当n=0时称为空表。线性表的顺序存储结构具有以下两个基本特点:(1)线性表中所有元素的所占的存储空间是连续的;(2)线性表中各数据元素在存储空间中是按逻辑顺序依次存放。其中ai的存储地址为:adr(ai)=adr(a1)+(i-1)k,说明:adr(a1)为第一个元素的地址,k代表每个元素占的字节数。在线性表的顺序存储结构下,可以对线性表做以下运算:插入、删除、查找、排序、分解、合并、复制、逆转。1)插入元素对应关系线性表的插入运算是指在表的第i(1≦i≦n+1)个位置上,插入一个新结点x,使长度为n的线性表(a1,…ai-1,ai,…,an),变成长度为n+1的线性表(a1,…ai-1,x,ai,…,an)实现方法一般地,要在第i各元素之前插入一个新元素时,首先要从最后一个元素开始,直到第i个元素之间的n-i+1个元素依次向后移动一个位置,移动结束后,第i个位置就被空出,然后插入元素x。2)删除元素对应关系线性表的插入运算是指在表的第i(1≦i≦n+1)个位置上,删除一个结点ai,使长度为n的线性表(a1,…ai-1,ai,…,an),变成长度为n-1的线性表(a1,…ai-1,ai+1,…,an)实现方法一般地,要在第i各元素之前插入一个新元素时,首先要从第i+1个元素开始,直到第n个元素之间的n-i个元素依次向前移动一个位置,移动结束后,线性表的长度减少1。注意:线性表的顺序存储结构对于元素不常变动的线性表来说是合适的,但是如果进行元素的变动来说,不太合适,插入和删除操作效率较低。4栈和队列栈是限定在一端进行插入与删除的线性表,允许插入与删除的一端称为栈顶,不允许插入与删除的另一端称为栈底。栈按照“先进后出”(filo)或“后进先出”(lifo)组织数据,栈具有记忆作用。用top表示栈顶位置,用bottom表示栈底。栈的基本运算:(1)插入元素称为入栈运算;(2)删除元素称为退栈运算;(3)读栈顶元素是将栈顶元素赋给一个指定的变量,此时指针无变化。4栈和队列队列是指允许在一端(队尾)进入插入,而在另一端(队头)进行删除的线性表。rear指针指向队尾,front指针指向队头。队列是“先进行出”(fifo)或“后进后出”(lilo)的线性表。队列运算包括:(1)入队运算:从队尾插入一个元素;(2)退队运算:从队头删除一个元素。循环队列:s=0表示队列空,s=1且front=rear表示队列满数据结构中的每一个结点对应于一个存储单元,这种存储单元称为存储结点,简称结点。结点由两部分组成:(1)用于存储数据元素值,称为数据域;(2)用于存放指针,称为指针域,用于指向前一个或后一个结点。在链式存储结构中,存储数据结构的存储空间可以不连续,各数据结点的存储顺序与数据元素之间的逻辑关系可以不一致,而数据元素之间的逻辑关系是由指针域来确定的。链式存储方式即可用于表示线性结构,也可用于表示非线性结构。线性链表,head称为头指针,head=null(或0)称为空表,线性链表的基本运算:查找、插入、删除。batcateatmat^…5线性链表head5线性链表bateatmat^cat…head查找操作必须从头指针指向的结点开始往后沿指针进行扫描,知道后面已经没有节点或下一个节点的数据为搜索值x为止。插入操作必须首先找到ai-1的存储位置p,然后生成一个数据域为x的新结点*p,并令结点*p的指针域指向新结点,新结点的指针域指向结点ai。从而实现三个结点ai-1,x和ai之间的逻辑关系的变化。删除操作首先找到ai-1的存储位置p。然后令p–next指向ai的直接后继结点,即把ai从链上摘下。最后释放结点ai的空间树(tree)是一个或多个结点的有限集合,它使得:有一个指定为根(root)的结点,剩余结点被划分成m≥0个不相交的集合:T1,…,Tm这些集合的每一个又都是一棵树,并称T1,…,Tm为根的子树。关于树的重要概念结点的度(degree):一个结点的子树数树的度:树中结点度的最大值结点的级(level)(又叫层):设根是1级,若某结点在p级,则它的儿子在p+1级树的高度(或深度):树中结点的最大级数叶子(终端结点):度为0的结点内结点(非终端结点):度不为0的结点森林:m≥0个不相交树的集合。6树与二叉树二叉树的特点:(1)非空二叉树只有一个根结点;(2)每一个结点最多有两棵子树,且分别称为该结点的左子树与右子树。二叉树的基本性质:(1)在二叉树的第k层上,最多有2k-1(k≥1)个结点;(2)深度为m的二叉树最多有2m-1个结点;(3)度为0的结点(即叶子结点)总是比度为2的结点多一个;(4)具有n个结点的二叉树,其深度至少为[log2n]+1,其中[log2n]表示取log2n的整数部分;6树与二叉树(5)具有n个结点的完全二叉树的深度为[log2n]+1;(6)设完全二叉树共有n个结点。如果从根结点开始,按层序(每一层从左到右)用自然数1,2,….n给结点进行编号(k=1,2….n),有以下结论:①若k=1,则该结点为根结点,它没有父结点;若k1,则该结点的父结点编号为int(k/2);②若2k≤n,则编号为k的结点的左子结点编号为2k;否则该结点无左子结点(也无右子结点);③若2k+1≤n,则编号为k的结点的右子结点编号为2k+1;否则该结点无右子结点。满二叉树是指除最后一层外,每一层上的所有结点有两个子结点,则k层上有2k-1个结点深度为m的满二叉树有2m-1个结点。ABDEGCFH特殊形态的二元树满二元树:深度为k且有2k-1个结点的二元树二叉树的遍历:(1)前序遍历(dlr),首先访问根结点,然后遍历左子树,最后遍历右子树;(2)中序遍历(ldr),首先遍历左子树,然后访问根结点,最后遍历右子树;(3)后序遍历(lrd)首先遍历左子树,然后访问遍历右子树,最后访问根结点。顺序查找的使用情况:(1)线性表为无序表;(2)表采用链式存储结构。二分法查找只适用于顺序存储的有序表,对于长度为n的有序线性表,最坏情况只需比较log2n次。7查找技术排序是指将一个无序序列整理成按值非递减顺序排列的有序序列。交换类排序法:(1)冒泡排序法,需要比较的次数为n(n-1)/2;(2)快速排序法。插入类排序法:(1)简单插入排序法,最坏情况需要n(n-1)/2次比较;(2)希尔排序法,最坏情况需要o(n1.5)次比较。选择类排序法:(1)简单选择排序法,最坏情况需要n(n-1)/2次比较;(2)堆排序法,最坏情况需要o(nlog2n)次比较。8排序技术练习:1.栈和队列的共同特点是。(只允许在端点处插入和删除元素)2.栈通常采用的两种存储结构是。(线性存储结构和链表存储结构)3.下列关于栈的叙述正确的是()。A.栈是非线性结构B.栈是一种树状结构C.栈具有先进先出的特征D.栈有后进先出的特征D6.链表不具有的特点是()