《第一章数据结构与算法》由会员分享,可在线阅读,更多相关《第一章数据结构与算法(11页珍藏版)》请在金锄头文库上搜索。
1、1.1算法1.1.1算法的基本概念算法:是指解题方案的准确而完整的描述1、算法的基本特性(1)可行性:针对实际问题设计的算法,人们总希望能够得到满意的结果。在设计算法时,必须要考虑它的可行性,否则是不会得到满意结果的。(2)确定性:是指算法中的每一个步骤都必须是有明确定义的, 不允许有模棱两可的解释,也不允许有多义性。(3)有穷性:是指算法必须能在有限的时间内做完,即算法必须能在执行有限个步骤之后终止。(4)拥有足够的情报:一个算法是否有效,还取决于为算法所提供的 情报是否足够。2、算法的基本要素(1)算法中对数据的运算和操作(2)算法的控制结构3、算法设计的基本方法(1)列举法思想是:根据提
2、出的问题,列举所有可能的情况。(2)归纳法思想是:通过列举少量的特殊情况,经过分析,最后找出一般的关系。(3)递推是指从已知的初始条件出发,逐次推出所要求的各中间结果和最后结果。(4)递归为了降低问题的复杂程度,将问题逐层分解,最后归结为一些最简单 的问题。(5)减半递推技术1.1.2 算法复杂度1、算法的时间复杂度是指执行算法所需要的计算工作量2、算法的空间复杂度是指执行这个算法所需要的内存空间*算法分析的目的:分析算法的效率以求改进1.2数据结构的基本概念1.2.1什么是数据结构杂乱无章的数据是不便于处理的数据的逻辑结构:数据集和中各数据元素之间所固有的逻辑关系。是指反映 数据元素之间逻辑
3、关系的数据结构数据的存储结构:在对数据进行处理时,各数据元素在计算机中的存储关系。 是指数据的逻辑结构在计算机中的表示数据结构:是指反映数据元素之间关系的数据元素集合的表示 1.2.2数据结构的图形表示(11页) 1.2.3线性结构与非线性结构如果一个非空的数据结构满足下列两个条件:(1)有且只有一个根结点(2)每一个结点最多有一个前件,也最多有一个后件 则称该数据结构为线性结构。又称线性表如果一个数据结构不是线性结构,则称之为非线性结构1.3线性表及其顺序存储结构1.3.1线性表的基本概念线性表是一种线性结构。非空线性表有如下结构特性:(1)有且只有一个根结点、,它无前件(2)有且只有一个终
4、端结点an,它无后件(3)除根结点与终端结点外,其他所有结点有且只有一个前件,也有且 只有一个后件。线性表中结点个数n称为线性表的长度。当n=0时,称为空表 1.3.2线性表的顺序存储结构有以下两个基本特点:(1)线性表中所有元素所占的存储空间是连续的(2)线性表中各数据元素在存储空间中是按逻辑顺序依次存放的 由此可以看出,在线性表的顺序存储结构中,其前后件两个元素在存储空间中 是紧邻的,且前件元素一定存储在后件元素的前面。1.3.3顺序表的插入和删除运算(14页)1.4栈和队列(1)(2)(3)(3)1.4.1栈及其基本运算1、什么是栈实际也是线性表,只不过是一种特殊的线性表。一端是封闭的,
5、不允 许进行插入与删除元素,另一端是开口的,允许插入与删除元素。在顺序存储 结构下,对这种类型线性表的插入与删除运算是不需要移动表中其他数据元素 的。这种线性表称为栈在栈中,允许插入与删除的一端称为栈顶,不允许插入和删除的另一端称为 栈底。栈是按照“先进后出“或“后进先出“的原则组织数据的。2、栈的顺序存储及其运算三种运算:入栈、退栈与读栈入栈:首先将栈顶指针进一(即top加1),然后将新 元素插入到栈顶指针指向的位置。退栈:首先将栈顶元素(栈顶指针指向的元素)赋给 一个指定的变量,然后将栈顶指针退一(即top减1)读栈:这个运算不删除栈顶元素,只是将它的值赋给 一个变量,因此,在这个运算中,
6、栈顶指针不会改变。1.4.2队列及其基本运算1、什么是队列:需要加入的元素总是插入到线性表的末尾,并且又总是从线 性表的头部取出(删除)元素。这种线性表称为队列。队列是“先进先出”或“后进后出“的线性表。它体现了 “先来先服务”的 原则。在队列的末尾插入一个元素(入队运算)只涉及队尾指针rear的变化,而要删 除队列中的排头元素(退队运算)只涉及排头指针front的变化。2、循环队列及其运算是指将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空 间,供队列循环使用。两种基本运算:入队与退队(1)入队运算是指在循环队列的队尾加入一个新元素。首先将队尾指针进一(即rear=rear+1
7、),并当rear=m+1时置rear=1;然后将新元 素插入到队尾指针指向的位置退队运算是指在循环队列的排头位置退出一个元素并赋给指定的变量。首先将排头指针进一(即front=front+1),并当front=m+1时置front=1;然后将排头指针指向的元素赋给指定的变量。1.5 .线性链表线性表的顺序存储存在的缺点:3)插入和删除会弓|起大量结点的移动,运算 效率低。b)线性表的存储空间不便于扩充C)不便于对存储空间的动态分配(1) .线性链表的基本概念:线性表的链式存储结构称为线性链表。1. 线性链表线性链表的链式存储结构:线性链表的每个结点中数据域存放数据元素的值, 指针域存放后件结点
8、的存储地址。双向链表的链式存储结构:双向链表的链式存储结构比线性链表的链式存储 结构多出一个指针域,它用来存放前件结点的存储地址。注:线性链表的存储空间不一定是连续的。且各元素的存储顺序是任意的。2. 带链的栈栈的链式结构:栈的链式结构基本上和线性链表的链式存储结构相同。只 是线性链表的链式存储结构的头指针变成了栈的链式结构的栈顶指针。3. 带链的队列队列的链式结构:队列的链式结构和线性链表的链式存储结构也基本相同。 只不过队列的链式结构保持有两个指针:一个指向队列头的头指针和一个指向 队列尾的尾指针。(2) .线性链表的基本运算线性链表的主要运算:线性链表的主要运算有线性链表的插入、线性链表
9、的删 除、线性链表的合并、线性链表的分解、线性链表的逆转、线性链表的复制、 线性链表的排序、线性链表的查找。线性链表的查找:线性链表的查找过程是从头指针指向的结点开始往后沿指针 进行扫描,直到后面已没有结点或下一个结点的数据域为搜索值x为止。线性链表的插入:线性链表的插入是先从栈中为新元素分配一个新的结点p,并 赋值。然后利用线性链表的查找算法找到待插入位置的前一个结点的指针q,先 将p指向q的后件,然后将p挂接在q结点后面。线性链表的删除:利用线性链表的查找算法找到待删除元素的前一个结点p,用 另一个指针q暂时保存p的后续结点(即待删除结点),然后把q结点的后续链 直接挂接在p的后面。最后归
10、还q结点所分配的栈空间。循环链表及其基本运算循环链表有如下几个特点:在循环链表中增加一个表头结点,使得循环链表对空表和非空表的操作实现统O循环链表中最后一个结点的指针域不是空,而是指向表头结点。判断循环链表是否为空的办法不是看表头指针为空,而是看表头结点的后续结 点是否还是表头结点。在循环链表中,从任何一个结点出发可以访问到表中其他所有的结点。1.6树与二叉树(1)树的基本概念基本术语:父结点:在树结构中,每一个结点只有一个前件称为父结点。根结点:没有前件的结点只有一个,称为树的根结点。子结点:在树结构中,每一个结点可以有多个后件,它们都称为该结点的子结 点。叶子结点:没有后件的结点称为叶子结
11、点。结点的度:一个结点所拥有的后件个数称为该结点的度。树的度:所有结点中的最大的度称为树的度树的深度:树的最大层次称为树的深度。根结点在第一层。子树:以某结点的一个子结点为根构成的树称为该结点的一棵子树。叶子结点 没有子树。要求考生掌握用树表示算术表达式的方法(具体见试题分析部分的解答过程)。(2)二叉树及其基本性质二叉树的特点:二叉树具有以下两个特点,一是非空二叉树只有一个根结点,二是每一个结点最多有两棵子树。二叉树的基本性质:性质1在二叉树的第k层上,最多有2k-1(k=1)个结点。性质2深度为m的二叉树是指二叉树最多有2m 1个结点。性质3在任意一棵二叉树中,度为0的结点(即叶子结点)总
12、是比度为2的结 点多一个。性质4具有n个结点的二叉树,其深度至少为0g2n+1,其中0g2n表示log2n 的整数部分。(3)满二叉树和完全二叉树性质5满二叉树的第k层上有2k-i个结点,且其深度为m的满二叉树有加1 个结点。性质6具有n个结点的完全二叉树的深度为log2n+1o(4)二叉树的存储结构L(i)V(i)R(i)L(i):左指针域,指向该结点的左子结点。(存放左子结点的存储地址)R(i):右指针域,指向该结点的右子结点。(存放右子结点的存储地址)V(i):数据域,存放结点的值。(5)二叉树的遍历二叉树的遍历集中用到了递归的思想,它主要有以下三种遍历方式:前序遍历(DLR):先访问根
13、结点,后访问遍历左子树,再访问遍历右子树。 中序遍历(LDR):先访问遍历左子树,后访问根结点,再访问遍历右子树。 后序遍历(LRD):先访问遍历左子树,后访问遍历右子树,再访问根结点。1.7查找技术(1)顺序查找查找方法:从表头到表尾逐个比较,若相同则结束查找,否则一直继续比较下 一个表中元素直到整个表都遍历完。适用场合:无序表或链式存储的有序表。(2)二分查找查找方法:每次把待查找值与表中间元素比较,以减半的方式缩小搜索范围。适用场合:顺序存储的有序表。排序技术(1)交换类排序常用的交换类排序有:冒泡排序法;快速排序法。(2)插入类排序常用的插入类排序有:简单插入排序法;希尔排序法。(3)
14、选择类排序法常用的选择类排序有:简单选择排序法;堆排序法算法类型排序算法最好时间复杂 度最坏时间复杂 度平均时间复 杂度交换类排序冒泡排序法NN(N-1)/2N(N+1)/4快速排序法Nlog2NN(N-1)/2O(Nlog2N)插入类排序简单插入排序 法NN(N-1)/2N(N+1)/4希尔排序法0印5)O(n1.5)O(n1-5)选择类排序法单选择排序法N(N-1)/2N(N-1)/2N(N-1)/2堆排序法nO(Nlog2N)O(Nlog2N)试题分析(1)下面叙述正确的是。(C)A. 算法的执行效率与数据的存储结构无关B. 算法的空间复杂度是指算法程序中指令(或语句)的条数C. 算法的
15、有穷性是指算法必须能在执行有限个步骤之后终止D. 以上三种描述都不对(2)以下数据结构中不属于线性数据结构的是。(C)A. 队列B. 线性表C. 二叉树D. 栈 在一棵二叉树上第5层的结点数最多是。(B)A. 8B. 16C. 32D. 15(4)算法的时间复杂度是指。(C)A. 执行算法程序所需要的时间B. 算法程序的长度C. 算法执行过程中所需要的基本运算次数D. 算法程序中的指令条数(5) 下列叙述中正确的是。(A)A. 线性表是线性结构B. 栈与队列是非线性结构C. 线性链表是非线性结构D. 二叉树是线性结构(6) 设一棵完全二叉树共有699个结点,则在该二叉树中的叶子结点数为(B)A. 349B. 350C. 255D. 351 算法的空间