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