数据结构(C语言描述)课件.ppt
《数据结构(C语言描述)课件.ppt》由会员分享,可在线阅读,更多相关《数据结构(C语言描述)课件.ppt(178页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据结构辅导李青山西安电子科技大学http:/202.117.118.45/faculty/029-8820-4611课程内容框架数 据 结 构基础数据结构应用数据结构栈队列线性表线性结构 非线性结构串查找内部排序外部排序文件动态存管理储数组广义表 树二叉树 图基本概念1.2基本概念和术语数据、数据元素、数据项、数据对象结构*集合:松散的关系*线性结构:一对一的关系*树形结构:一对多的关系*网状结构:多对多的关系数据结构Data_Structure=(D,S)数据结构的分类1.2基本概念和术语(续)逻辑结构:数据元素之间的逻辑关系(本来的关系)存储结构:数据结构在计算机中的映象。包括数据元素的
2、表示和关系的表示两个方面。分类:*顺序存储结构*链式存储结构描述方式:用高级语言中的“数据类型”来描述算法1.3算法和算法分析内涵:是对特定问题求解步骤的一种描述,是指令的有限序列,其中每一条指令表示一个或多个操作。特性:*有穷性:有穷步+有穷时间/每一步*确定性:指令的语义无二义性*可行性:算法能用基本操作完成*输入:零个或多个输入*输出:一个或多个输出算法设计的要求1.3算法和算法分析(续)正确性(Correctness)可读性(Readablity)健壮性(Robustness)高时间效率与低存储量需求算法时间效率的度量1.3算法和算法分析(续)算法时间效率度量的基本做法在算法中选取一种
3、对于所研究问题来说是基本操作的原操作,以该基本操作重复执行的次数作为算法的时间度量。一般而言,这个基本操作是最深层循环内的语句中的原操作。算法时间复杂度 T(n)=O(f(n)称为算法的渐近时间复杂度,简称时间复杂度。算法存储空间的度量1.3算法和算法分析(续)算法存储空间度量的基本做法用程序执行中需要的辅助空间的消耗作为存储空间度量的依据,是问题规模n的函数。而程序执行中本身需要的工作单元不能算。算法空间复杂度 S(n)=O(f(n)称为算法的空间复杂度。2.线性表3.栈、队列和串第一部分 线性数据结构线性数据结构的特点2.1线性表的逻辑结构在数据元素的非空有限集中存在唯一的一个被称作“第一
4、个”的数据元素;存在唯一的一个被称作“最后一个”的数据元素;除第一个之外,集合中的每一个数据元素均只有一个前驱;除最后一个之外,集合中每一个数据元素均只有一个后继。基本概念和术语2.1线性表的逻辑结构(续)线性表:n个数据元素的有限序列(线性表中的数据元素在不同环境下具体含义可以不同,但在同一线性表中的元素性质必须相同)。表长:线性表中元素的个数n(n=0)。空表:n=0时的线性表称为空表。位序:非空表中数据元素 ai 是此表的第 i 个元 素,则称 i 为 ai 在线性表中的位序。线性表的抽象数据类型定义2.1线性表的逻辑结构(续)ADT List 数据对象:D=ai|ai属于ElemSet
5、,i=1,2,n,n=0数据关系:R1=|ai-1,ai属于D,i=2,3,n 基本操作:InitList(&L)DestroyList(&L)ClearList(&L)ListLength(L)GetElem(L,i,&e)初始条件:L存在;1=i=ListLength(L)操作结果:用e返回L中第i个 数据元素的值 ADT ListLocateElem(L,e,compare()初始条件:L存在;compare()是判定条件 操作结果:返回第1个与e满足关系compare()的 数据元素位序,若不存在,则返回0ListInsert(&L,i,e)初始条件:L存在;1=i=ListLengt
6、h(L)+1 操作结果:第i个位置之前插入元素e,长度加1ListDelete(&L,i,&e)初始条件:L存在;非空;1=i=ListLength(L)操作结果:删除第i个元素,e返回值,长度减1查找删除插入顺序表-线性表的顺序存储2.2线性表的顺序存储结构内涵:线性表的顺序存储指用一组地址连续的存储单元依次存储线性表的数据元素。这称为顺序表。特点:*存储单元地址连续(需要一段连续空间)*逻辑上相邻的数据元素其物理位置也相邻 *随机存取 *存储密度为大(100%)顺序表的随机存取2.2线性表的顺序存储结构(续)对线性表L,设每个元素占k个存储单元,则有:递推关系:LOC(ai+1)=LOC(
7、ai)+k任一元素ai+1的存储位置:LOC(ai)=LOC(a1)+(i-1)*k (其中1=i next=p-next;p-next=s单链表上删除运算的实现2.3线性表的链式存储结构(续)删除q(a1,ai,ai+1,an)表长为nListDelete(&L,i,&e)(a1,ai-1,ai+1,an)表长为n-1free(q)ai-1aiLai+1pp-next=p-next-nextai-1aiLai+1p2.线性表3.栈、队列和串教学内容-第三章栈、队列和串是特殊的线性表3.1 栈、队列和串的逻辑结构栈和队列是操作受限的线性表栈和队列的“操作受限”指操作位置受限串的特殊性在于线性表
8、中数据元素只能是字符串一般以子串为操作单位栈、队列和串具有一般线性表共性的特点特殊的线性表反而应用面更宽栈的基本概念和术语3.1 栈、队列和串的逻辑结构(续)栈(Stack):限定仅在表尾进行插入或删除操作的线性表。栈顶(top):插入或删除的表尾端。栈底(bottom):表头端。空栈:空表。栈的操作特点:后进先出(Last In First Out-LIFO)栈的抽象数据类型定义3.1 栈、队列和串的逻辑结构(续)ADT Stack 数据对象:D=ai|ai属于ElemSet,i=1,2,n,n=0数据关系:R1=|ai-1,ai属于D,i=2,3,n/a1 为栈底,an 栈顶基本操作:In
9、itStack(&S)DestroyStack(&S)StackEmpty(S)ClearStack(&S)StackLength(S)GetTop(S,&e)初始条件:S存在,非空;操作结果:用e返回S的栈顶元素 Push(&S,e)初始条件:S存在 操作结果:插入元素e为新的栈顶元素,长度加 1Pop(&S,&e)初始条件:S存在;非空 操作结果:删除S的栈顶元素,e返回值,长度 减1ADT Stack出栈(删除)入栈(插入)队列的基本概念和术语3.1 栈、队列和串的逻辑结构(续)队列(Queue):限定仅在表的一端进行插入,而另一端进行删除操作的线性表。队尾(rear):允许插入的一端。
10、队头(front):允许删除的一端。空队:空表。队列操作特点:先进先出(First In First Out-FIFO)队列的抽象数据类型定义3.1 栈、队列和串的逻辑结构(续)ADT Queue 数据对象:D=ai|ai属于ElemSet,i=1,2,n,n=0数据关系:R1=|ai-1,ai属于D,i=2,3,n/a1 为队头,an 队尾基本操作:InitQueue(&Q)DestroyQueue(&Q)ClearQueue(&Q)QueueEmpty(Q)QueueLength(Q)GetHead(Q,&e)初始条件:Q存在,非空;操作结果:用e返回Q的栈顶元素 EnQueue(&Q,e
11、)初始条件:Q存在 操作结果:插入元素e为新的队尾元素,长度加 1DelQueue(&S,&e)初始条件:Q存在;非空 操作结果:删除Q的对头元素,e返回值,长度 减1ADT Queue出队(删除)入队(插入)串的基本概念和术语3.1 栈、队列和串的逻辑结构(续)串(String):由零个或多个字符组成的有限序列。S=a1a2an串名、串值串长空串、空格串子串:串中任意连续的字符组成的子序列主串:字符在串中的位置、子串在串中的位置串相等串的操作特点:一般以子串整体为单位串的抽象数据类型定义3.1 栈、队列和串的逻辑结构(续)ADT Sring 数据对象:D=ai|ai属于CharacterSe
12、t,i=1,2,n,n=0数据关系:R1=|ai-1,ai属于D,i=2,3,n基本操作:StrAssign(&T,chars)StrCopy(&T,S)StrEmpty(S)StrLength(S)SubString(&Sub,S,pos,len)初始条件:S存在,1=pos=StrLength(S),0=len=StrLength(S)-pos+1;操作结果:Index(S,T,pos)StrInsert(&S,pos,T)初始条件:S存在,1=pos=StrLength(S)+1 操作结果:在串S的第pos个字符之前插入串TStrDelete(&S,pos,len)初始条件:S存在,1=
13、pos=S.stacksize)S.base=(SElemTupe*)realloc(S.base,(S.stacksize+STACKINCERMENT)*sizeof(Selemtype);if(!S.base)exit(OVERFLOW);/存储分配失败S.top=S.base+S.stacksize;S.stacksize=+STACKINCERMENT;*S.top+=e;return OK;/Push入栈a1aia2basetopa1eaia2basetop顺序栈上的入栈3.2 栈、队列和串的存储结构(续)Status Pop(SqStack&S,SElemType&e)if(S.
14、top=S.base)return error;e=*-S.top;return OK;/Pop出栈a1ai-1a2basetopa1aiai-1a2basetop顺序栈上的出栈3.2 栈、队列和串的存储结构(续)栈的链式存储-链栈3.2 栈、队列和串的存储结构(续)basetoptypedef struct ElemTypedatastruct Lnode*next Lnode,*StackPtran-1a1antypedef struct StackPtr top StackPtr base LinkStack链栈上的入栈与出栈3.2 栈、队列和串的存储结构(续)链栈上的入栈与出栈与单链表
15、上元素插入删除操作类似插入删除位置都在栈顶处,不花费查找时间栈空的判断队列的顺序存储-循环队列(一)3.2 栈、队列和串的存储结构(续)a1aia2front一般顺序存储的队列特点:队空条件:front=rear队满条件:rear=MAXSIZE队满条件下的队满为假满(假溢出)(真满时:rear=MAXSIZE,front=0)rear/-动态分配-#define MAXSIZE 100 /最大队列长度typedef struct QElemType*baseintfront/指向队头元素当前位置intrear /指向队尾元素下一个位置 SqQueue队列的顺序存储-循环队列(二)3.2 栈、
16、队列和串的存储结构(续)循环队列特点:队空条件:*front=rear(方式一)*标志域+(front=rear)(方式二)队满条件:*(rear+1)%MAXSIZE=front(方式一)*标志域+(front=rear)(方式二)队满条件下的队满为真满队列的顺序存储-循环队列(三)3.2 栈、队列和串的存储结构(续)队列的顺序存储-循环队列(四)3.2 栈、队列和串的存储结构(续)Status EnQueue(SqQueue&Q,QElemType e)if(Q.rear+1)%MAXSIZE=Q.front)return ERROR;Q.baseQ.rear=e;Q.rear=(Q.re
17、ar+1)%MAXSIZE;return OK;/EnQueueStatus InitQueue(SqQueue&Q)Q.base=(QElemType*)malloc(MAXSIZE*sizeof(QElemType);if(!Q.base)exit(overflow);Q.front=Q.rear=0;return OK;/InitQueueStatus DeQueue(SqQueue&Q,QElemType&e)if(Q.rear=Q.front)return ERROR;e=Q.baseQ.front;Q.front=(Q.front+1)%MAXSIZE;return OK;/DeQ
18、ueue队列的链式存储-链队列(一)3.2 栈、队列和串的存储结构(续)typedef struct QElemTypedatastruct QNode*next QNode,*QueuePtra2ana1typedef struct QueuePtr rear QueuePtr front LinkQueueq.rear.frontStatus EnQueue(LinkQueue&Q,QElemType e)p=(QueuePtr)malloc(sizeof(Qnode);if(!p)exit(overflow);p-data=e;p-next=NULL;Q.rear-next=p;Q.re
19、ar=p;return OK;/EnQueueStatus InitQueue(LinkQueue&Q)Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode);if(!Q.front)exit(overflow);Q.front-next=NULL;return OK;/InitQueueStatus DeQueue(LinkQueue&Q,QElemType&e)if(Q.rear=Q.front)return ERROR;p=Q.front-next;e=p-data;Q.front-next=p-next;if(Q.rear=p)Q.rear=Q.fr
20、ont;free(p);return OK;/DeQueue队列的链式存储-链队列(二)3.2 栈、队列和串的存储结构(续)串的顺序存储(一)3.2 栈、队列和串的存储结构(续)/-串的定长顺序存储表示-#define MAXSTRLEN 255 /最大串长度typedef unsigned char SStringMAXSTRLEN+1/0号单元存放串的长度串顺序存储的特点:连续存储单元静态分配串操作中的原操作一般为“字符序列的复制”截尾法处理串值序列的上越界Status SubString(SString&Sub,SString S,int pos,int len)if(pos S0|le
21、n S0 pos+1)return ERROR;Sub1.len=Spos.pos+len-1;Sub0=len;return OK;/SubString串的顺序存储(二)3.2 栈、队列和串的存储结构(续)Status Concat(SString&T,SString S1,SString S2)/Concat一般算法3.3 串的模式匹配算法int Index(SString S,SString T,int pos)/返回子串T在主串S中第pos个 i=pos;j=1;/字符之后的位置。若不存在,while(i=s0&j T0)return i T0;else return 0;/Index
22、算法时间复杂度:T(n)=O(n*m)逻辑函数为 Index(S,T,pos)S=a1a2aianT=t1t2tjtm 一般而言,mn算法思路:从主串S的第pos个字符起和模式的第一个字符比较之,若相等,继续逐个比较后续字符,否则从主串的下一个字符起再重新和模式的字符比较之。3.3 串的模式匹配算法(续)第一趟 主串:a b a b c a b c a c b a b/i=3模式串:a b c/j=3第二趟 主串:a b a b c a b c a c b a b/i=2模式串:a/j=1第三趟 主串:a b a b c a b c a c b a b/i=7模式串:a b c a c/j=5
23、第四趟 主串:a b a b c a b c a c b a b/i=4模式串:a/j=1第五趟 主串:a b a b c a b c a c b a b/i=5模式串:a/j=1第六趟 主串:a b a b c a b c a c b a b /i=11模式串:a b c a c/j=6模式串T=abcac改进算法-思路3.3 串的模式匹配算法(续)KMP算法思路:从主串S的第pos个字符起和模式的第一个字符比较之,若相等,继续逐个比较后续字符。当一趟匹配过程中出现字符比较不等时,不回朔i指针,而是利用已经得到的“部分匹配”的结果将模式串向右“滑动”尽可能远的一段距离后,继续进行比较。优点:
24、在匹配过程中,主串的跟踪指针不回朔 时间效率达到T(n)=O(n+m)如何理解“部分匹配”?主串:a c a b a a c a a b c a c模式串:a c a a b 改进算法-原理3.3 串的模式匹配算法(续)设主串S=s1s2sisn,模式串T=t1t2tjtm 在匹配过程中,当主串中第i个字符与模式串中第j个字符“失配”时(si不等于tj),将模式串“向右滑动”,让模式串中第k(kj)个字符与si对齐继续比较。这时有:t1t2tk-1=si-k+1si-k+2si-1-(1)而由部分匹配成功的结果可知:t1t2tj-1=si-j+1si-j+2si-1-(2)由(2)式可以推知:
25、tj-k+1tj-k+2tj-1=si-k+1si-k+2si-1-(3)由(1)式与(3)式可以推知:t1t2tk-1=tj-k+1tj-k+2tj-1 -(4)令nextj=k,表示当模式串中第j个字符与主串中相应字符“失配”时,在模式中需重新和主串中该字符进行比较的字符的位置。根据其语义,定义如下:0当j=1时 /相当于主串中i指针推进一个位置Nextj=Max k|1kj 且 t1t2tk-1=tj-k+1tj-k+2tj-1 /1其他情况改进算法-Next函数定义3.3 串的模式匹配算法(续)设主串S=s1s2sisn,模式串T=t1t2tjtm Next函数值仅取决于模式串本身的结
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 语言 描述 课件
限制150内