数据结构复习题课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《数据结构复习题课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 复习题 课件
- 资源描述:
-
1、 概述概述 模块模块1:线性结构:线性结构 模块模块2:树型结构:树型结构 模块模块3:图型结构:图型结构 模块模块4:其他:其他数据结构复习数据结构复习1.1.数据结构的定义数据结构的定义 数据数据数据元素数据元素数据项数据项 数据结构是指数据以及相互之间的联系(或数据结构是指数据以及相互之间的联系(或关系)。包括:关系)。包括:(1)数据的逻辑结构。)数据的逻辑结构。(2)数据的存储结构(物理结构)。)数据的存储结构(物理结构)。(3)施加在该数据上的运算。)施加在该数据上的运算。概述概述 数据的逻辑结构数据的逻辑结构是从逻辑关系上描述数据,它是从逻辑关系上描述数据,它与数据的存储无关,是
2、独立于计算机的。与数据的存储无关,是独立于计算机的。数据的存储结构数据的存储结构是逻辑结构用计算机语言的实是逻辑结构用计算机语言的实现(亦称为映象),它是依赖于计算机语言的。现(亦称为映象),它是依赖于计算机语言的。数据的运算数据的运算是定义在数据的逻辑结构上的,每是定义在数据的逻辑结构上的,每种逻辑结构都有一组相应的运算。但运算的实现与种逻辑结构都有一组相应的运算。但运算的实现与数据的存储结构有关。数据的存储结构有关。程序数据结构算法程序数据结构算法概述概述(1)线性结构)线性结构(2)树形结构)树形结构(3)图形结构)图形结构概述概述逻辑结构主要有三大类:逻辑结构主要有三大类:存储结构分为
3、如下四种:存储结构分为如下四种:(1)顺序存储方法)顺序存储方法(2)链式存储方法)链式存储方法(3)索引存储方法)索引存储方法(4)散列存储方法)散列存储方法 概述概述2.算法算法 算法是对特定问题求解步骤的一种描算法是对特定问题求解步骤的一种描述,它是指令的有限序列。述,它是指令的有限序列。概述概述算法的五个重要的特性算法的五个重要的特性:(1)有穷性)有穷性(2)确定性)确定性(3)可行性)可行性(4)有输入)有输入(5)有输出)有输出 概述概述 算法的时间复杂度:是指其基本运算在算算法的时间复杂度:是指其基本运算在算法中重复执行的次数。法中重复执行的次数。算法中基本运算次数算法中基本运
4、算次数T(n)是问题规模是问题规模n的某的某个函数个函数f(n),记作:,记作:T(n)=O(f(n)记号记号“O”读作读作“大大O”,它表示随问题规,它表示随问题规模模n的增大算法执行时间的增长率和的增大算法执行时间的增长率和f(n)的增长的增长率相同。率相同。概述概述例例 分析以下程序段的时间复杂度。分析以下程序段的时间复杂度。i=1;while(ilchild)+f(b-rchild)+1 bNULL概述概述 递归算法设计递归算法设计 对原问题对原问题f(s)进行分析,假设出合理的进行分析,假设出合理的“较小问题较小问题”f(s);假设假设f(s)是可解的,在此基础上确定是可解的,在此基
5、础上确定f(s)的解,即给出的解,即给出f(s)与与f(s)之间的关系;之间的关系;确定一个特定情况(如确定一个特定情况(如f(1)或或f(0))的)的解,由此作为递归出口解,由此作为递归出口.概述概述bb-rchildb-lchild 假设出合理的假设出合理的“较小问题较小问题”:假设左右子树的结点个数可求假设左右子树的结点个数可求 求出求出f(s)与与f(s)之间的关系:之间的关系:f(b)=f(b-lchild)+f(b-rchild)+1 确定递归出口:确定递归出口:f(NULL)=0概述概述int f(BTNode*b)if(b=NULL)return(0);else return(
6、f(b-lchild)+f(b-rchild)+1);求解算法:求解算法:概述概述例、假设非空二叉树例、假设非空二叉树bt采用二叉链存储,其中所有节点采用二叉链存储,其中所有节点数据域为正整数,设计一个递归算法求其中的最大值。数据域为正整数,设计一个递归算法求其中的最大值。递归模型如下:递归模型如下:f(bt)=0 若若bt为空为空 f(bt)=bt-data 若若bt是叶子节点是叶子节点f(bt)=MAX3(bt-data,f(bt-lchild),f(bt-rchild)其他情况其他情况int f(BTNode*bt)int m,n;if(bt=NULL)return 0;if(bt-lc
7、hild=NULL&bt-rchild=NULL)return bt-data;else m=f(bt-lchild);/求左子树中的最大值求左子树中的最大值n=f(bt-rchild);/求右子树中的最大值求右子树中的最大值if(mbt-data)return m;else return bt-data;例例 设计求设计求f(n)=1+2+.+n的递归算法的递归算法解:解:f(n)为前为前n项之和,则项之和,则f(n-1)=1+2+.+(n-1)假设假设f(n-1)可求,则可求,则f(n)=f(n-1)+n,所以:,所以:f(n)=1 当当n=1f(n)=f(n-1)+n 当当n1对应的递归
8、算法如下:对应的递归算法如下:int f(int n)if(n=1)return(1);else return(f(n-1)+n);1.1.一般线性表一般线性表 线性表:具有相同特性的数据元素的一个线性表:具有相同特性的数据元素的一个有限序列。不是集合。有限序列。不是集合。元素之间是一对一的关系。元素之间是一对一的关系。模块模块1 1:线性结构:线性结构逻辑结构逻辑结构(1)顺序表)顺序表 typedef struct ElemType elemMaxSize;/*存放顺序表元素存放顺序表元素*/int length;/*存放顺序表的长度存放顺序表的长度*/SqList;存储结构之一存储结构之
9、一模块模块1 1:线性:线性结构结构顺序表基本运算的实现顺序表基本运算的实现 插入数据元素算法:元素移动的次数不仅与表插入数据元素算法:元素移动的次数不仅与表长长n有关有关;插入一个元素时所需移动元素的平均次;插入一个元素时所需移动元素的平均次数数 n/2。平均时间复杂度为。平均时间复杂度为O(n)。模块模块1 1:线性:线性结构结构删除数据元素算法删除数据元素算法:元素移动的次数也与元素移动的次数也与表长表长n有关有关。删除一个元素时所需移动元素的。删除一个元素时所需移动元素的平均次数为平均次数为(n-1)/2。删除算法的平均时间复杂。删除算法的平均时间复杂度为度为O(n)。模块模块1 1:
10、线性结构:线性结构 例、在一个长度为例、在一个长度为n的顺序表中删除第的顺序表中删除第i个元素(个元素(1in)时,需向前移动时,需向前移动 个元素。个元素。A.nB.i-1C.n-iD.n-i+1例、设线性表有例、设线性表有n个元素,以下操作中,个元素,以下操作中,在顺序表上在顺序表上实现比在链表上实现效率更高。实现比在链表上实现效率更高。A.输出第输出第i(1in)个元素值)个元素值B.交换第交换第1个元素与第个元素与第2个元素的值个元素的值C.顺序输出这顺序输出这n个元素的值个元素的值D.输出与给定值输出与给定值x相等的元素在线性表中的序号相等的元素在线性表中的序号例已知长度为例已知长度
11、为n的线性表的线性表L采用顺序存储结构,试设计采用顺序存储结构,试设计一个在时间和空间两方面都尽可能高效的算法,删除其中所一个在时间和空间两方面都尽可能高效的算法,删除其中所有元素值在有元素值在x,y之间的所有元素。之间的所有元素。解法一:解法一:对应的算法如下:对应的算法如下:void delxy1(SqList&L,ElemType x,ElemType y)int k=0,i;/k记录不满足条件的元素个数记录不满足条件的元素个数 for(i=0;i=x&L.datai=y)L.datak=L.datai;k+;/不满足条件的元素个数增不满足条件的元素个数增1L.length=k;/顺序表
12、顺序表L的长度等于的长度等于k解法二解法二:对应的算法如下:对应的算法如下:void delnode2(SqList&L,ElemType x,ElemType y)int k=0,i=0;/k记录满足条件的元素个数记录满足条件的元素个数 while(i=x&L.datainext=NULL;for(i=0;idata=ai;s-next=L-next;/*将将*s插在原开始结点之前插在原开始结点之前,头结点之后头结点之后*/L-next=s;模块模块1 1:线性结构:线性结构 尾插法建表尾插法建表 头插法建立链表虽然算法简单头插法建立链表虽然算法简单,但生成的链表但生成的链表中结点的次序和原
13、数组元素的顺序相反。若希望中结点的次序和原数组元素的顺序相反。若希望两者次序一致两者次序一致,可采用尾插法建立。该方法是将可采用尾插法建立。该方法是将新结点插到当前链表的表尾上新结点插到当前链表的表尾上,为此必须增加一为此必须增加一个尾指针个尾指针r,r,使其始终指向当前链表的尾结点。使其始终指向当前链表的尾结点。采用尾插法建表的算法如下采用尾插法建表的算法如下:模块模块1 1:线性结构:线性结构 void CreateListR(LinkList*&L,ElemType a,int n)LinkList*s,*r;int i;L=(LinkList*)malloc(sizeof(LinkLi
14、st);/*创建头结点创建头结点*/r=L;/*r始终指向终端结点始终指向终端结点,开始时指向头结点开始时指向头结点*/for(i=0;idata=ai;r-next=s;/*将将*s插入插入*r之后之后*/r=s;r-next=NULL;/*终端结点终端结点next域置为域置为NULL*/例、设一个整数线性表采用带头节点的例、设一个整数线性表采用带头节点的hc单链表存放,设单链表存放,设计一个算法在不破坏原有单链表的前提下,创建两个单链表计一个算法在不破坏原有单链表的前提下,创建两个单链表ha和和hb,前者由,前者由hc中值为奇数的节点构成,后者由中值为奇数的节点构成,后者由hc中值为偶数中
15、值为偶数的节点构成。的节点构成。void split(LinkList*hc,LinkList*&ha,LinkList*&hb)LinkList*p=hc-next,*ra,*rb,*s;ha=(LinkList*)malloc(sizeof(LinkList);ra=ha;hb=(LinkList*)malloc(sizeof(LinkList);rb=hb;while(p!=NULL)if(p-data%2=1)/奇数节点奇数节点 s=(LinkList*)malloc(sizeof(LinkList);s-data=p-data;/复制产生节点复制产生节点*s ra-next=s;/将
16、将*s节点链接到节点链接到ha尾部尾部 ra=s;else/偶数节点偶数节点 s=(LinkList*)malloc(sizeof(LinkList);s-data=p-data;/复制产生节点复制产生节点*s rb-next=s;/将将*s节点链接到节点链接到hb尾部尾部 rb=s;p=p-next;ra-next=rb-next=NULL;/两链表尾节点两链表尾节点next均置为均置为NULL 双链表基本运算的实现双链表基本运算的实现 重点:重点:插入和删除结点的算法。插入和删除结点的算法。模块模块1 1:线性结构:线性结构 循环链表基本运算的实现循环链表基本运算的实现 重点:重点:判断最
17、后一个结点。判断最后一个结点。模块模块1 1:线性结构:线性结构2.栈栈(1)栈的定义)栈的定义 栈是一种栈是一种先进后出先进后出表。插入删除受限的线表。插入删除受限的线性表。性表。栈的基本运算栈的基本运算:进栈,出栈。进栈,出栈。逻辑结构逻辑结构模块模块1 1:线性结构:线性结构(2)顺序栈)顺序栈typedef struct ElemType dataMaxSize;int top;/*栈顶指针栈顶指针*/SqStack;存储结构之一存储结构之一模块模块1 1:线性结构:线性结构栈空条件栈空条件:s.top=-1栈满条件栈满条件:s.top=MaxSize-1进栈进栈:top+;s.dat
18、as.top=e;出栈出栈:e=s.datas.top;s.top;顺序栈的顺序栈的4要素要素:模块模块1 1:线性结构:线性结构(3)链栈)链栈 typedef struct linknode ElemType data;/*数据域数据域*/struct linknode*next;/*指针域指针域*/LiStack;存储结构之二存储结构之二模块模块1 1:线性结构:线性结构带头结点的单链表来实现带头结点的单链表来实现(也可不带头结点也可不带头结点)lhead a1 an a2 栈底结点 栈顶结点 头结点 栈空条件栈空条件:s-next=NULL 栈满条件栈满条件:?模块模块1 1:线性结构
19、:线性结构3.队列队列(1)队列的定义队列的定义 队列是一种队列是一种先进先出先进先出表。插入删除受限的表。插入删除受限的线性表。线性表。队列的基本运算队列的基本运算:进队进队,出队出队逻辑结构逻辑结构模块模块1 1:线性结构:线性结构(2)顺序队顺序队typedef struct ElemType dataMaxSize;int front,rear;/*队首和队尾指针队首和队尾指针*/SqQueue;存储结构之一存储结构之一模块模块1 1:线性结构:线性结构队空队空:q.front=q.rear队满队满:(q.rear+1)%MaxSize=q.front进队进队:q.rear=(q.re
20、ar+1)MaxSize;q.dataq.rear=e;出队出队:q.front=(q.front+1)MaxSize;e=q.dataq.front;环形队列的环形队列的4要素要素:模块模块1 1:线性结构:线性结构(3)链队)链队struct qnode /*数据结点数据结点*/ElemType data;struct qnode*next;QNode;typedef struct /*头结点头结点*/QNode*front;QNode*rear;LiQueue;存储结构之二存储结构之二模块模块1 1:线性结构:线性结构(2)顺序串)顺序串 (3)链串)链串 (4)串串的模式匹配算法:的模
展开阅读全文