《数据结构教程》PPT课件.ppt
《《数据结构教程》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《数据结构教程》PPT课件.ppt(88页珍藏版)》请在三一办公上搜索。
1、概述模块1:线性表模块2:树型结构模块3:图型结构模块4:其他,1.数据结构的定义,数据数据元素数据项,数据结构是指数据以及相互之间的联系(或关系)。包括:(1)数据的逻辑结构。(2)数据的存储结构(物理结构)。(3)施加在该数据上的运算。,概述,数据的逻辑结构是从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。数据的存储结构是逻辑结构用计算机语言的实现(亦称为映象),它是依赖于计算机语言的。数据的运算是定义在数据的逻辑结构上的,每种逻辑结构都有一组相应的运算。但运算的实现与数据的存储结构有关。,程序数据结构算法,概述,(1)线性结构(2)树形结构(3)图形结构,概述,逻辑结构主要有
2、三大类:,存储结构分为如下四种:,(1)顺序存储方法(2)链式存储方法(3)索引存储方法(4)散列存储方法,概述,2.算法,算法是对特定问题求解步骤的一种描述,它是指令的有限序列。,概述,算法的五个重要的特性:(1)有穷性(2)确定性(3)可行性(4)有输入(5)有输出,概述,算法的时间复杂度:是指其基本运算在算法中重复执行的次数。,算法中基本运算次数T(n)是问题规模n的某个函数f(n),记作:T(n)=O(f(n)记号“O”读作“大O”,它表示随问题规模n的增大算法执行时间的增长率和f(n)的增长率相同。,概述,例 分析以下程序段的时间复杂度。i=1;while(i=n)i=i*2;,解:
3、上述算法中基本操作是语句i=i*2,设其频度为T(n),则有:2T(n)n即T(n)log2n=O(log2n)。所以,该程序段的时间复杂度为O(log2n)。,算法空间复杂度:是对一个算法在运行过程中临时占用的存储空间大小的量度。,对于空间复杂度为O(1)的算法称为原地工作或就地工作算法。,概述,递归定义,3.算法设计方法:递归,在定义一个算法时出现调用本算法的成分,称之为递归。,概述,递归模型,由递归出口和递归体组成,例如,求二叉树所有结点个数:f(b)=0 b=NULLf(b)=f(b-lchild)+f(b-rchild)+1 bNULL,概述,递归算法设计,对原问题f(s)进行分析,
4、假设出合理的“较小问题”f(s);假设f(s)是可解的,在此基础上确定f(s)的解,即给出f(s)与f(s)之间的关系;确定一个特定情况(如f(1)或f(0))的解,由此作为递归出口.,概述,b,b-rchild,b-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(f(b-lchild)+f(b-rchild)+1);,求解算法:,概述,例 设计求
5、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对应的递归算法如下:,int f(int n)if(n=1)return(1);else return(f(n-1)+n);,1.一般线性表 线性表:具有相同特性的数据元素的一个有限序列。不是集合。元素之间是一对一的关系。,模块1:线性结构,逻辑结构,(1)顺序表,typedef struct ElemType elemMaxSize;/*存放顺序表元素*/int length;/*存
6、放顺序表的长度*/SqList;,存储结构之一,模块1:线性结构,顺序表基本运算的实现,插入数据元素算法:元素移动的次数不仅与表长n有关;插入一个元素时所需移动元素的平均次数 n2。平均时间复杂度为O(n)。,模块1:线性结构,删除数据元素算法:元素移动的次数也与表长n有关。删除一个元素时所需移动元素的平均次数为(n-1)/2。删除算法的平均时间复杂度为O(n)。,模块1:线性结构,(2)链表,定义单链表结点类型:typedef struct LNode ElemType data;struct LNode*next;/*指向后继结点*/LinkList;,存储结构之二,模块1:线性结构,定义
7、双链表结点类型:typedef struct DNode ElemType data;struct DNode*prior;/*指向前驱结点*/struct DNode*next;/*指向后继结点*/DLinkList;,模块1:线性结构,单链表基本运算的实现,重点:(1)头插法建表和尾插法建表算法,它是很多算法设计的基础;(2)查找、插入和删除操作。,模块1:线性结构,头插法建表 该方法从一个空表开始,读取字符数组a中的字符,生成新结点,将读取的数据存放到新结点的数据域中,然后将新结点插入到当前链表的表头上,直到结束为止。采用头插法建表的算法如下:,模块1:线性结构,void CreateL
8、istF(LinkList*,模块1:线性结构,尾插法建表 头插法建立链表虽然算法简单,但生成的链表中结点的次序和原数组元素的顺序相反。若希望两者次序一致,可采用尾插法建立。该方法是将新结点插到当前链表的表尾上,为此必须增加一个尾指针r,使其始终指向当前链表的尾结点。采用尾插法建表的算法如下:,模块1:线性结构,void CreateListR(LinkList*/*终端结点next域置为NULL*/,双链表基本运算的实现,重点:插入和删除结点的算法。,模块1:线性结构,循环链表基本运算的实现,重点:判断最后一个结点。,模块1:线性结构,例 设计一个算法在单链表中查找元素值为e的结点序号的算法
9、LocateElem(L,e)。,思路:在单链表L中从头开始找第1个值域与e相等的结点,若存在这样的结点,则返回位置,否则返回0。int LocateElem(LinkList*L,ElemType e)LinkList*p=L-next;int n=1;while(p!=NULL,2.栈(1)栈的定义 栈是一种先进后出表。插入删除受限的线性表。栈的基本运算:进栈,出栈。,逻辑结构,模块1:线性结构,(2)顺序栈,typedef struct ElemType elemMaxSize;int top;/*栈指针*/SqStack;,存储结构之一,模块1:线性结构,栈空条件:s.top=-1 栈
10、满条件:s.top=MaxSize-1 进栈:top+;s.datas.top=e;出栈:e=s.datas.top;s.top;,顺序栈的4要素:,模块1:线性结构,(3)链栈,typedef struct linknode ElemType data;/*数据域*/struct linknode*next;/*指针域*/LiStack;,存储结构之二,模块1:线性结构,带头结点的单链表来实现(也可不带头结点),栈空条件:s-next=NULL 栈满条件:?,模块1:线性结构,3.队列,(1)队列的定义 队列是一种先进先出表。插入删除受限的线性表。队列的基本运算:进队,出队,逻辑结构,模块1
11、:线性结构,(2)顺序队,typedef struct ElemType elemMaxSize;int front,rear;/*队首和队尾指针*/SqQueue;,存储结构之一,模块1:线性结构,队空:q.front=q.rear 队满:(q.rear+1)%MaxSize=q.front 进队:q.rear=(q.rear+1)MaxSize;q.dataq.rear=e;出队:q.front=(q.front+1)MaxSize;e=q.dataq.front;,环形队列的4要素:,模块1:线性结构,(3)链队,struct qnode/*数据结点*/ElemType data;str
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构教程 数据结构 教程 PPT 课件
链接地址:https://www.31ppt.com/p-5519671.html