《C语言公共基础知识.ppt》由会员分享,可在线阅读,更多相关《C语言公共基础知识.ppt(92页珍藏版)》请在优知文库上搜索。
1、全国计算机等级考试全国计算机等级考试二级公共基础知识二级公共基础知识第一章 数据结构与算法n 考试大纲1. 算法的基本概念;算法复杂度的概念和意义(时间复杂度与空间复杂度)。2. 数据结构的定义;数据的逻辑结构与存储结构;数据结构的图形表示;线性结构与非线性结构的概念。3. 线性表的定义;线性表的顺序存储结构及其插入与删除运算。4. 栈和队列的定义;栈和队列的顺序存储结构及其基本运算。5. 线性单链表、双向链表与循环链表的结构及其基本运算。6. 树的基本概念;二叉树的定义及其存储结构;二叉树的前序、中序和后序遍历。7. 顺序查找与二分法查找算法;基本排序算法(交换类排序,选择类排序,插入类排序
2、)。知识点归纳n算法的基本概念n所谓算法是指解题方案的准确而完整的描述。严格来说,一个算法必须具有以下五个主要特征:算法算法的基本特征的基本特征一个算法应该具有以下五个重要的特征:一个算法应该具有以下五个重要的特征:n 有穷性有穷性n 确定性确定性n 输入输入n 输出输出n 可行性可行性一个算法必须保证执行有限步之后结束;算法的每一步骤必须有确切的定义;一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定义了初始条件;一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;算法原则上能够精确地运行算法的基本概念n算法的组成要素n算法中对数据
3、的运算和操作n算法的控制结构n算法设计基本方法n列举法n归纳法n递推n递归n减半递推n回溯法n 算术运算算术运算n 关系运算关系运算n 逻辑运算逻辑运算n 数据传输数据传输n 顺序顺序n 选择选择n 循环循环算法的复杂度n算法的复杂度可分为时间复杂度和空间复杂度,是衡量算法优劣的量度。1.算法的时间复杂度n算法的时间复杂度是指执行算法所需要的工作量。一般情况下,算法中的基本基本操作重复执行的次数操作重复执行的次数是问题规模n的某个函数f(nf(n) )。算法的复杂度n算法的空间复杂度n算法的空间复杂度是指执行这个算法所需要的内存空间。空间复杂度作为算法所需存储空间的量度数据结构n利用计算机进行
4、数据处理是计算机应用的一个重要领域。数据结构主要研究和讨论以下三个方面的问题:1.数据集合中各数据元素之间的逻辑关系,即数据的逻辑结构。2.在对数据进行处理时,各数据元素在计算机中的存储关系,即数据的存储结构。3.对各种数据结构进行的运算。数据的逻辑结构n数据逻辑结构是对数据元素之间存在的逻辑关系的描述,它可以用一个数据元素的集合和定义在此集合上的若干关系表示。n与数据在计算机中的存储位置无关,是独立于计算机的。 线性结构和非线性结构线性结构n在数据元素的非空有限集合中,线性结构的逻辑特征如下:n存在一个唯一的被称为“第一个”的数据元素n存在一个唯一的被称为“最后一个”的数据元素n除第一个之外
5、,集合中的每个数据元素均有且只有一个直接前驱n除最后一个之外,集合中的每个数据元素均有且只有一个直接后继非线性结构n非线性结构的逻辑特征是:一个结点可能有多个直接前驱和直接后继,树和图都属于非线性结构。数据的存储结构n数据的存储结构是数据元素及其关系在计算机存储器中的表示。存储结构的主要内容是指在存储空间中使用一个存储结点来存储一个数据元素,在存储空间中建立各存储结点之间的关联,来表示数据元素之间的逻辑关系。n常见的存储结构:n顺序存储结构n链式存储结构n索引存储结构n散列存储结构线性表n通常以下列 n 个数据元素的序列”表示线性表线性表 :(a1,a2 ,.,ai ,.,an) n序列中数据
6、元素的个数 n 定义为线性表的表长表长;n=0 时的线性表被称为空表空表。称 i 为ai在线性表中的位序位序。线性表的顺序存储n线性表的顺序存储结构用一组地址连续地址连续的存储单元依次存放依次存放线性表中的数据元素,即以“存储位置相邻存储位置相邻”表示“位序相继的两个数据元素之间的前驱和后继的关系,并以表中第一个元素的存储位置作为线性表的起始地址,称作线性表的基地址线性表的基地址。 所有数据元素的存储位置均可由第一个数据元素的存储位置得到 ADR(ai) = ADR(a1) + (i-1)C 基地址基地址 一个数据元素所占存储量一个数据元素所占存储量 线性表的插入和删除运算n插入运算是指在线性
7、表的某个指定位置增加一个新结点。n一般情况下,要在第i(1in)个元素之前插入一个新元素时,首先要从最后一个元素开始,直到第i个元素之间共n-i+1个元素依次向后移动一个位置,然后将新元素插入到第i项。n删除运算是指撤销结构中的某个结点。n一般情况,要删除第i(1in)个元素,要从第i+1个元素开始,直到第n个元素,共n-i个元素依次向前移动一个位置。栈n栈是限定仅在表的一端进行插入和删除操作的线性表。允许插入和删除的一端称为栈顶,另一端称为栈底。n栈顶元素总是最后被插入的元素,从而也是最先被删除的元素;栈底元素总是最先被插入,也是最后被删除的元素。因此,栈是一种后进先出后进先出(也称先进后出
8、)也称先进后出)的线性表。n通常用指针top指示栈顶位置,用指针bottom指示栈底位置。栈的顺序存储及运算n用一维数组S(1:m)作为栈的顺序存储空间,m为栈的最大容量。top=0表示栈为空,top=m表示栈满。n栈的操作n入栈:在栈顶位置插入一个新元素,栈顶指针top加1。n退栈:取出栈顶元素并赋值给一个指定的变量,栈顶指针top减1。n取栈顶元素:将栈顶元素的值赋给一个指定的变量,不删除栈顶元素,栈顶指针不变。队列n队列是一种先进先出的线性表,它只允许在表的一端插入元素(队尾),在另一端删除元素(队头)。通常定义头指针front指向队头元素的前一个位置,定义尾指针rear指向队尾元素的位
9、置。n队列是一种先进先出(也称后进后出)先进先出(也称后进后出)的线性表线性表。n向队尾插入一个元素的操作称为入队,从队头删除一个元素的操作称为退队。循环队列n将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间。n循环队列初始状态为空,即front=rear=m。n入队操作时,rear加1,若rear=m+1,则置rear=1;n退队操作时,front加1,若front=m+1,则置front=1。n在循环队列为空或为满时,均有front=rear,因此需要设置标志s进行区分,定义s=0表示队列为空,s=1表示队列非空。单链表n线性表的链式存储结构的特点是用一组任意的存储单元(可
10、以连续,也可以不连续)存储线性表的数据元素,为了表示每个数据元素ai与其直接后继元素ai+1之间的逻辑关系,对数据元素ai来说,除了存储其本身的信息(数据域)之外,还需要存储其后继元素的存储位置信息(指针域)。n指针域中存储的信息称为指针或链,N个结点链接成一个链表,即为线性表的链式存储结构。由于结点中只包含一个指针域,故称为单链表。单链表n通常以单链表中第一个数据元素的存储地址作为作为单链表的地址,称为头指针。整个链表的存储必须从头指针开始(顺序存取),头指针指示链表中第一个结点的存储位置。最后一个数据元素没有直接后继,其指针域为空。单链表的插入和删除双向链表和循环链表n在双向链表中的结点包
11、含两个指针域,其中一个指向直接后继,另一个指向直接前驱。n循环链表的特点是表中最后一个结点的指针域指向第一个结点,整个链表成为一个由链指针相链接的环。据此,从表中任一节点出发均可找到表中其它结点。在循环链表中增加了一个表头结点,其指针域指向第一个元素结点,头指针则指向头结点。HEADHEADHEADHEADHEADHEAD树及其基本概念n树是一种简单的非线性结构,在树中,所有的数据元素之间具有明显的层次性关系。n树是(n0)个结点的有限集合,在任意一棵非空树中: (1)有且仅有一个特定的结点称为根结点。 (2)当n1时,其余的结点可分为m个互不相交的子集T1,T2,Tm,其中每个有限子集本身又
12、是一棵树,并且称为根的子树。n集合为空的树简称为空树;树中的元素称为结点。ABDFECGHIJKMn 一个结点的子树的一个结点的子树的个数;个数; Q:结点结点A、G的度数?的度数?n 树中所有结点度的最树中所有结点度的最大值;大值;Q:右图中树的度?右图中树的度?n 度为度为0的结点;的结点; Q:图中叶子结点有几个?图中叶子结点有几个?7 度不为度不为0的结点;的结点; Q:图中非终端结点有几个?图中非终端结点有几个? 5ABDFECGHIJKMn 树中根结点的层树中根结点的层次为次为1,根结点子树的根为第,根结点子树的根为第2层,层,以此类推;以此类推;树中所有结点层次的树中所有结点层次
13、的最大值;最大值; Q:图中树的深度?图中树的深度?二叉树n二叉树是n(n0)个数据元素的有限集,它或为空集,或者含有唯一的称为根的元素,且其余元素分成两个互不相交的子集,每个子集自身也是一棵二叉树,分别称为根的左子树和右子树。n二叉树是另一种树型结构,其特点是每个结点至多有两棵子树,并且二叉树的子树有左右之分,其顺序不能任意颠倒。二叉树的基本性质n性质性质1 1 在二叉树的第i层上至多有2i-1个结点(i1)n性质性质2 2 深度为k的二叉树至多有2k -1个结点(k1)n性质性质3 3 对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2 ,则:n0 =n2+1n性质性质4 4
14、 具有n个结点的二叉树,其深度至少为log2n +1满二叉树和完全二叉树n满二叉树满二叉树除最后一层外,每一层上的所有结点都有两个子节点,也就是说每一层上的结点数都达到最大值,即在满二叉树的第k层上有2k-1个结点,且深度为m的满二叉树有2m-1个结点。n完全二叉树完全二叉树除最后一层外,每一层上的结点数均达到最大值,在最后一层上只缺少右边的若干结点(即在最后一层按从右向左依次删除若干节点)。具有n个结点的完全二叉树,其深度为log2n +1。n从以上定义可知,满二叉树也是完全二叉树,反之则不然。满二叉树满二叉树 最大层的结点最大层的结点均向左靠齐均向左靠齐 完全二叉树完全二叉树 ADCBEF
15、二叉树的基本性质性质性质5 5 如果对一棵有 n 个结点的完全二叉树(其深度为log2n +1)的结点按层序(从第1层到第log2n +1 层,每层从左到右)从1起开始编号,则对任一编号为 i 的结点(1in),则:(1) 如果 i=1,则编号为 i 的结点是二叉树的根,无双亲;如果 i1,则其双亲结点 parent(i)的编号是i/2。(2) 如果 2in,则编号为 i 的结点无左孩子(编号为 i 的结点为叶子结点);否则其左孩子结点 lChild(i) 的编号是 2i 。(3) 如果 2i+1n,则编号为 i 的结点无右孩子;否则其右孩子结点 rChild(i) 的编号是结点 2i+1。
16、二叉树的链式存储结构n在二叉树的链式存储结构中,每个结点设置三个域,即数据域,左指针域和右指针域,两个指针域分别存储左右子树根节点的存储位置,即指针。L(i)V(i)R(i)LchildvalueRchild二叉树的链式存储结构二叉树的遍历n二叉树的遍历指不重复地访问二叉树的所有结点。从二叉树的结构定义得知,二叉树是由根结点、左子树和右子树三部分构成,则遍历二叉树的操作可分解为访问根结点、遍历左子树和遍历右子树三个子操作,并且由二叉树的递归定义可知,遍历左子树和遍历右子树可如同遍历二叉树一样递归进行。 先序遍历二叉树先序遍历二叉树中序遍历二叉树中序遍历二叉树后序遍历二叉树后序遍历二叉树若二叉树为空,则空操作;否则(1) 访问根结点;(2) 先序遍历左子树;(3) 先序遍历右子树。 若二叉树为空,则空操作;否则(1) 中序遍历左子树;(2) 访问根结点;(3) 中序遍历右子树。 若二叉树为空,则空操作;否则(1) 后序遍历左子树;(2) 后序遍历右子树;(3) 访问根结点。二叉树的遍历先序遍历:ABDEGHCFIJ中序遍历:DBGEHACIJF后序遍历:DGHEBJIFCA查找n查找是指