数据结构PPT格式课件下载.pptPPT格式课件下载.ppt
《数据结构PPT格式课件下载.pptPPT格式课件下载.ppt》由会员分享,可在线阅读,更多相关《数据结构PPT格式课件下载.pptPPT格式课件下载.ppt(365页珍藏版)》请在冰豆网上搜索。
确定散列函数后,根据结点的关键字直接计算出该结点的存储地址。
2022/10/7,数据结构,8,关系:
逻辑结构是从逻辑关系上描述数据,与存储无关,是独立于计算机的。
逻辑结构是从具体问题抽象出来的数学模型存储结构是逻辑结构用计算机语言的实现(亦称映象)数据的运算是定义在数据的逻辑结构上的一个运算的集合运算的实现与存储结构密切相关逻辑结构与存储结构是多对多的关系,2022/10/7,数据结构,9,例:
一个学生成绩表:
是一个数据结构每行是一个结点(或记录),由学号、姓名、各科成绩及平均成绩等数据项组成。
逻辑关系:
线性结构存储结构:
表的运算:
2022/10/7,数据结构,10,2022/10/7,数据结构,11,2022/10/7,数据结构,12,2022/10/7,数据结构,13,2022/10/7,数据结构,14,第一章概论,三、(渐进)时间复杂度(O(f(n)当问题的规模n趋向无穷大时,时间复杂度T(n)的数量级(阶)称为算法的渐近时间复杂度,简称时间复杂度四、最坏时间复杂度依据数据集中可能出现的最坏情况估算出的时间复杂度称为最坏时间复杂度。
五、平均时间复杂度在假设数据集的分布是等概率的条件下,估算出的时间复杂度称为平均时间复杂度。
例:
顺序查找,2022/10/7,数据结构,15,五、空间复杂度S(n):
算法所耗费的存储空间,仍是问题规模n的函数。
第一章概论,2022/10/7,数据结构,16,第一章概论,2022/10/7,数据结构,17,第二章线性表,本章要学习的主要内容1、线性表的逻辑结构及基本运算2、线性表的顺序存储结构3、线性表的链式存储结构:
单链表、循环链表、双链表、静态链表4、顺序表和链表的比较,2022/10/7,数据结构,18,2022/10/7,数据结构,19,2022/10/7,数据结构,20,2022/10/7,数据结构,21,2022/10/7,数据结构,22,2022/10/7,数据结构,23,2022/10/7,数据结构,24,2022/10/7,数据结构,25,2022/10/7,数据结构,26,2022/10/7,数据结构,27,2022/10/7,数据结构,28,2022/10/7,数据结构,29,2022/10/7,数据结构,30,2022/10/7,数据结构,31,2022/10/7,数据结构,32,2.3.2单链表上的基本运算(实现),Linklist*CREATLISTR1()charch;
linklist*head,*s,*r;
head=malloc(sizeof(linklist);
r=head;
ch=getchar();
while(ch!
=“$”)s=malloc(sizeof(linklist);
s-data=ch;
r-next=s;
r=s;
r-next=NULL;
returnhead;
2022/10/7,数据结构,33,2022/10/7,数据结构,34,按值查找即在链表中查找是否有值等于给定值key的结点。
若有则返回首次找到的其值为key的结点的指针,否则返回NULL。
算法描述如下:
linklist*locate(head,key)linklist*head;
datatyekey;
linklist*p;
p=headnext;
在等概率的情况下,该算法的平均时间复杂度亦为O(n),
(2)按值查找LOCATE(head,key),2.3.2单链表上的基本运算(实现),while(p!
=NULL)if(pdata!
=key)p=pnext;
elsebreak;
returnp;
2022/10/7,数据结构,35,3.插入运算,
(1)后插操作:
在指针p所指结点之后插入,
(2)前插操作:
在指针p所指结点之前插入,时间复杂度度O
(1),平均时间复杂度O(n),先从头指针起,顺链找到*p的前趋结点*q.,2022/10/7,数据结构,36,x,3.插入运算:
将前插操作转变为后插操作,a,2022/10/7,数据结构,37,4.删除运算,时间复杂度O
(1),删除指定结点的直接后继,r=p-next;
p-next=r-next;
free(r);
删除指定结点,时间复杂度O(n),链表的优点:
在链表上实现插入、删除运算无须移动结点,仅须修改指针,2022/10/7,数据结构,38,2022/10/7,数据结构,39,2022/10/7,数据结构,40,DELETENODE(p)/*删除双链表结点*p*/dlinklist*p;
p-prior-next=p-next;
p-next-prior=p-prior;
free(p);
2022/10/7,数据结构,41,2022/10/7,数据结构,42,2.3.5静态链表,静态链表与动态链表的区别,2022/10/7,数据结构,43,2、静态链表存储结构描述如下:
definemaxsize1024typedefintdatatype;
typedefintcursor;
typedefstructdatatypedata;
数据域cursornext;
游标node;
nodenodepoolmaxsize;
存储池cursorav;
游标变量,2022/10/7,数据结构,44,2022/10/7,数据结构,45,2022/10/7,数据结构,46,4、节点的分配与回收,GETNODE():
将表av上的第一个结点取出,并把该结点的位置付给pCursorGETNODE()cursorp;
if(av=NULL)p=NULL;
elsep=av;
av=nodepoolav.next;
FREENODE(p)将p所指的结点插入到表av的头上。
FREENODE(p)nodepoolp.next=av;
av=p,2022/10/7,数据结构,47,2022/10/7,数据结构,48,2022/10/7,数据结构,49,2022/10/7,数据结构,50,2022/10/7,数据结构,51,2022/10/7,数据结构,52,2022/10/7,数据结构,53,2022/10/7,数据结构,54,2022/10/7,数据结构,55,2022/10/7,数据结构,56,4链栈上基本运算的实现:
1)进栈PUSHLSTACK(top,x),2022/10/7,数据结构,57,2)退栈*POPLSTACK(top,datap),2022/10/7,数据结构,58,3.2栈的应用举例,1.文字编辑器2.函数的递归调用(p47),2022/10/7,数据结构,59,2022/10/7,数据结构,60,3队列的基本运算:
(1)SETNULL(Q)置队空
(2)EMPTY(Q)判队空(3)FRONT(Q)取队头元素,队中元素保持不变(4)ENQUEUE(Q,x)将元素x入队(5)DEQUEUE(Q)出队,函数返回原队头元素,2022/10/7,数据结构,61,2022/10/7,数据结构,62,2022/10/7,数据结构,63,2022/10/7,数据结构,64,解决“假上溢”的方法有两种:
2022/10/7,数据结构,65,采用循环队列后,进行入队和出队运算时,头、尾指针加1操作应如下进行:
出队:
sqfront=(sqfront+1)%maxsize;
入队:
sqrear=(sqrear+1)%maxsize;
循环队列如何判断队空和队满?
方法一:
引入标志flag若(sqfront=sqrear)&
(flag=0),则队空,不能出栈。
若(sqfront=sqrear)&
(flag=1),则队满,不能入栈。
2022/10/7,数据结构,66,2022/10/7,数据结构,67,2022/10/7,数据结构,68,1)入队ENQUEUE(q,x)类似于单链表的尾插法,2022/10/7,数据结构,69,2022/10/7,数据结构,70,2022/10/7,数据结构,71,2022/10/7,数据结构,72,2022/10/7,数据结构,73,2022/10/7,数据结构,74,2022/10/7,数据结构,75,2022/10/7,数据结构,76,2022/10/7,数据结构,77,typedefstructlinknodechardata;
structlinknode*next;
linkstring;
linkstring*s;
如果结点大小不为1,则此处应说明一个字符数组。
链串存储结构描述如下:
2022/10/7,数据结构,78,2022/10/7,数据结构,79,2022/10/7,数据结构,80,2022/10/7,数据结构,81,1.朴素的匹配算法,基本思想:
初始时,从S的第一个字符开始将T的第一个字符与其进行比较,若相等,则继续逐个比较后续字符,如匹配成功,则返回子串在S中的位置,否则,将T向右移动一个字符位置,从T的第一个字符开始与S中第二个字符进行比较,并在相等的情况下逐个比较后续字符,进行第二趟匹配,成功则返回子串在S中的位置,否则,T再向右移动一个字符位置,进行第三趟匹配,如此反复,或匹配成功,或当T右移到无法与S继续进行比较时,匹配失败。
2022/10/7,数据结构,82,设S=“ababcabcacbab”T=“abcac”,i指针回溯的位置为:
i=i-j+1(i的值为1),1.朴素的匹配算法,2022/10/7,数据结构,83,设S=“ababcabcacbab”T=“abcac”,i指针回溯的位置为:
i=i-j+1(i的值为2),2022/10/7,数据结构,84,设S=“ababcabcacbab”T=“abcac”,i指针回溯的位置为:
i=i-j+1(i的值为3),2022/10/7,数据结构,85,设S=“ababcabcacbab”T=“abcac”,i指针回溯的位置为:
i=i-j+1(i的值为4),2022/10/7,数据结构,86,设S=“ababcabcacbab”T=“abcac”,i指针回溯的位置为:
i=i-j+1(i的值为5),2022/10/7,数据结构,87,设S=“ababcabcacbab”T=“abcac”,返回子串的位置为:
i-j+1=6(串的起始位置从1开始算起),2022/10/7,数据结构,88,intindex(s,t)seqstring*s,*t;
inti=0,j=0;
while(iscurlen),朴素的模式匹配算法描述如下:
2022/10/7,数据结构,89,2022/10/7,数据结构,90,2022/10/7,数据结构,91,2022/10/7,数据结构,92,2022/10/7,数据结构,93,2022/10/7,数据结构,94,2022/10/7,数据结构,95,2022/10/7,数据结构,96,3)确定aij与sk的对应关系a: