数据结构2016MSE考研冲刺课程安排课程介绍栈、队列和向量树查找排序图课程目的(以最小代价)通过考试!不是成为专家不是初学授课试题结构考试满分60分考试题型:问答、分析、编程样题-问答和编程题插入排序、选择排序、冒泡排序、快速排序中最快的排序方法是________试论述什么叫Hash冲突及有那些处理方法编程实现对二叉树所有节点的统计课程安排课程介绍栈、队列和向量树查找排序图链表、栈和队列大纲描述:单链表,双向链表,环形链表,带哨兵节点的链表栈的基本概念和性质,栈ADT及其顺序,链接实现;栈的应用;栈与递归;队列的基本概念和性质,队列ADT及其顺序,链接实现;队列的应用;向量基本概念和性质;向量ADT及其数组、链接实现;线性表基本概念和性质线性表是n个数据元素的有限序列常见线性表包括数组、链表、栈、队列等线性表的两种实现方式顺序链式对比:插入(有序、无序)、删除、查找、读取环形链表环形链表又称循环列表,是另一种形式的链式存储结构。它的特点是表中最后一个元素的指针域指向头结点栈的基本概念和性质栈:栈是限定仅在表尾进行插入和删除操作的线性表后进先出特性(LIFO)栈顶、栈底、出栈、入栈例题设有一个栈S,元素S1,S2,S3,S4,S5,S6依次进栈,如果6个元素的出栈顺序为S2,S3,S4,S6,S5,S1,则栈的容量至少应为多少?答案:3栈的基本概念和性质设计递归问题的非递归算法一般需要用到栈机制三个数a、b、c进栈,不可能出现c、a、b顺序出栈例题若某栈的输入序列为a、b、c,则所有可能的出栈序列有___种,所有不可能的出栈序列有____种。答案:5,1例题若栈的输入序列为1,2,3,4,则——是不可能的栈输出序列之一。答案:4,3,1,2习题若某栈的输入序列为a、b、c、d,则所有可能的出栈序列有___种,所有不可能的出栈序列有____种。请写出所有可能的序列和不可能的序列。栈的应用数制转换十进制数字与d进制数字的转换N=(Ndivd)×d+Nmodd其中div为整除,mod为求余。算法:将算法3.1中8换成d例题十进制数1167等于八进制数——?答案:2217思路:计算方法:除余倒排法验证方法:指数相加法习题十进制数1167等于七进制数——?栈的应用表达式求值:中缀表达式转后缀表达式后缀表达式求值三种表达式:前缀表达式+ab中缀表达式a+b后缀表达式ab+例题中缀表达式a+b×c–d转为后缀表达式是————?答案:abc×+d-例题中缀表达式(a+b)×c–d转为后缀表达式是————?答案:ab+c×d-思路:数字位序不变,运算符位置改变后缀表达式无括号,运算顺序同中缀表达式习题中缀表达式A-(B+C)*D/E的后缀形式是_________________。练习中缀表达式a*(b+c)/d转为后缀表达式是————?例题计算后缀表达式12+4*2/的值为——?答案:6思路:顺序计算或转换为中缀表达式计算习题计算后缀表达式32-4*2/3+的值为——?递归一个直接调用自己或通过一系列的调用语句间接地调用自己的函数,称为递归函数优点:结构清晰、程序易读、正确性容易得到证明缺点:效率相对较低队列的基本概念和性质队列:队列是限定仅在表的一头进行插入、另一头进行删除操作的线性表先进先出特性(FIFO)队尾、队头、入队、出队例题在初始为空的队列中插入元素a,b,c,d以后,紧接着作了两次删除操作,此时的队头元素是——,队尾元素是————。答案:c,d双向队列双向队列:亦称双端队列(Deque)是限定插入和删除操作在表的两端进行的线性表可以用于包装产生栈和队列课程安排课程介绍栈、队列和向量树查找排序图树大纲描述:树的基本概念和术语;树的前序、中序、后序、层次序遍历;二叉树及其性质;普通树与二叉树的转换;树的存储结构,标准形式;完全树(completetree)的数组形式存储;树的应用,Huffman树。树的基本概念和术语树:是n(n≥0)个结点的有限集在任意一棵非空树中:1.有且仅有一个特定的称为根的结点2.当n1时,其余结点可以分为m(m0)个互不相交的有限集,其中每个集合本身又是一棵树,并且称为根的子树树属于层次结构数据结构树的基本概念和术语节点标签父节点、子节点、兄弟节点、祖先节点、子孙节点路径、树枝根、叶子次数内部节点、外部节点树的次数、K次树节点层次、树的高度和深度子树有序树、无序树森林、果园例题例题列出如上图所示树的所有叶子结点答案:K,L,F,G,M,I,J列出如上图所示树的所有分支结点答案:A,B,C,D,E,H树A为几次树?子树B呢?答案:3,2前页图所示树的高度为多少?答案:4树的基本概念和术语如果将树中结点的各子树看作从左到右有序的,则该树为有序树(orderedtree),否则为无序树。森林(forest)是m棵互不相交的树的集合。如果把一棵树的根砍去,剩下的部分就是森林。如果原来的树是有序的,则砍去根后的森林也是有序的,此时称该森林为有序森林或果园。二叉树及其性质二叉树(BinaryTree)另一种树形结构,特点是每个结点至多只有二棵子树,且子树有左右之分,其次序不能任意颠倒二叉树可能的五种基本形态二叉树及其性质在二叉树的第i层上至多有2i-1个结点(i≥1)例题一棵二叉树第五层上至多有多少个结点?至少多少?答案:16,1二叉树及其性质深度为k的二叉树至多有2k-1个结点(k≥1)例题深度为n(n0)的二叉树最多有_____个结点。答案:2n-1例题一棵深度为5的二叉树至多有多少个结点?至少多少?答案:31,5例题高度为h(h0)的二叉树最少有________个结点?答案:h二叉树及其性质对于任何二叉树,如果叶子节点数为n0,度为2的节点数为n2,则n0=n2+1例题在一棵二叉树中有n0个叶结点,有n2个度为2的结点,则n2=________。答案:n0-1例题若一棵二叉树有10个叶结点,则该二叉树中度为2的结的点个数为______________。答案:9例题若一二叉树有2度结点100个,则其叶结点有多少个?答案:101例题若二叉树中度为2的结点有15个,度为1的结点有10个,共有多少个结点?答案:41例题在一棵度为3的树中,度为3的结点有2个,度为2的结点有1个,度为1的结点有2个,那么,该树有__________个叶结点。答案:6构造法二叉树及其性质满二叉树:一棵深度为k且有2k-1个结点的二叉树可以对满二叉树的结点进行连续编号,约定编号从根开始,自上而下,自左而右。完全二叉树:深度为k的,有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树中编号从1到n的结点一一对应时,称为完全二叉树。二叉树及其性质完全二叉树特点:叶子结点只可能出现在层次最大的两层上对任一结点,若其右分支下子孙的最大层次为l,其左下分支的子孙的最大层次必为l或者l+1。深度为k的完全二叉树第k层最少1个结点,最多2k-1-1个结点;整棵树最少2k-1个结点,最多2k-2个结点例题若某完全二叉树的深度为h,则该完全二叉树中至少有______个结点。答案:2h-1例题若深度为6的完全二叉树的第6层有3个叶结点,则该二叉树一共有______个结点。答案:25-1+3=34例题一个具有767个结点的完全二叉树,其叶子结点个数为____。答案:384分析:可以根据公式进行推导,假设n0是度为0的结点总数(即叶子结点数),n1是度为1的结点总数,n2是度为2的结点总数,由二叉树的性质可知:n0=n2+1,则n=n0+n1+n2(其中n为完全二叉树的结点总数),由上述公式把n2消去得:n=2n0+n1-1,由于完全二叉树中度为1的结点数只有两种可能0或1,由此得到n0=(n+1)/2或n0=n/2,合并成一个公式:n0=[(n+1)/2],就可根据完全二叉树的结点总数计算出叶子结点数。本题计算得:384。二叉树及其性质具有n个结点的完全二叉树的深度为[log2n]+1例题具有2000个结点的二叉树,其深度至少为_________。答案:11二叉树及其性质如果含有n1个节点的二叉树的高度为[log2n]+1,将其所有结点按层次序编号,则对于任一节点j(1jn),有如果j=1,则节点j是树的根,无双亲;如果j1,则其父节点parent(j)是节点[j/2]如果2jn,则节点j无左子节点;否则其左子节点为2j如果2j+1n,则节点j无右子节点;否则其右子节点为2j+1证明完全树的数组形式存储完全树的数组形式存储算法将其编号为i的结点元素存储在一维数组下标为i-1的分量中例题已知数组[20,30,19,87,30,40]表示一棵完全二叉树,请画出该树。练习答案树的遍历树的遍历按某种搜索路径巡访树中每个结点,使每个结点均被访问一次仅且一次二叉树的遍历可分为前序、中序、后序、层次序等普通树的遍历可以分为先根、后根、层次序等树的遍历二叉树的遍历前序、中序、后序定义层次序:从上而下,从左至右常见问题已知树写遍历结果已知遍历结果画树依据:二叉树的前序和中序遍历可以唯一确定一棵二叉树思路:前序定根,中序定左右递归和非递归算法实现例题写出左图所示二叉树的前序、中序、后序、层次序遍历结果例题答案前序:ABDCEFG中序:DBAECFG后序:DBEGFCA层次序:ABCDEFG例题假设一棵二叉树的前序遍历为EBADCHGFIKJ,中序遍历为ABCDEFGHIJK,请画出该树。例题答案树的遍历普通树的遍历前根:先遍历根结点,再依次前根遍历各棵子树后根:先后根遍历各课子树,再遍历根结点已知树写遍历结果已知遍历结果画树思路:先根定根,后根定子树例题写出如右图所示树的先根、后根、层次序遍历结果例题答案前序:ABECFGHD后序:EBFHGCDA层次序:ABCDEFGH练习给出如图所示树的先根、后根和层次序遍历结果练习答案前根:ABEFHIGCJKLDMNOQP后根:EHIFGBKLJCNQOPMDA层次序:ABCDEFGJMHIKLNOPQ例题画出和下列已知序列对应的树T:树的先根次序访问序列为GFKDAIEBCHJ树的后根次序访问序列为DIAEKFCJHBG例题答案普通树与二叉树的转换对于任意k次树到相应二叉树的转换算法对于具有子节点n1,n2…nk的节点n,将n1作为其左子节点,且kj+1作为kj(1jk-1)的右子节点思路:“不同层在左,同层在右”普通树与二叉树的转换对于任意森林到相应二叉树的转换算法为设T=(T1,T2…..Tm)为m(m0)棵树的序列,而BT(T1,T2…..Tm)为相应的二叉树,则如果m=0,则BT为空树如果m0,则T1的根节点就是BT的根节点,而BT的左子树是T1的子树T11,T12…T1K转换成的BTl(T11,T12…T1K),其右子树为BTr(T2…..Tm)例题将下页图所示森林转换为等价的二叉树例题例题答案练习将如图所示树转换为二叉树练习答案Huffman树Huffman树:又称最优树,是一类带权路径长度最短的树基本概念:树的路径长度:从根到每一结点的路径长度之和。结点的带权路径长度:从该结点到树根之间的路径长度与结点上权的乘积。树的带权路径长度:树中所有叶子结点的带权路径长度之和,通常记做WPL。Huffman树基本概念:假设有n个权值wi,试构造一棵有n个叶子结点的二叉树,每个叶子的结点带权为wi,则其中WPL最小的二叉树称为最优二叉树或赫夫曼树算法见下页Huffman算法(1)由给定的n个权值{w0,w1,w2,…,wn-