数据结构(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.栈、队列和串,第一部分 线性数据结构,线性数据结构
4、的特点,2.1线性表的逻辑结构,在数据元素的非空有限集中存在唯一的一个被称作“第一个”的数据元素;存在唯一的一个被称作“最后一个”的数据元素;除第一个之外,集合中的每一个数据元素均只有一个前驱;除最后一个之外,集合中每一个数据元素均只有一个后继。,基本概念和术语,2.1线性表的逻辑结构(续),线性表:n个数据元素的有限序列(线性表中的数据元素在不同环境下具体含义可以不同,但在同一线性表中的元素性质必须相同)。表长:线性表中元素的个数n(n=0)。空表:n=0时的线性表称为空表。位序:非空表中数据元素 ai 是此表的第 i 个元 素,则称 i 为 ai 在线性表中的位序。,线性表的抽象数据类型定
5、义,2.1线性表的逻辑结构(续),ADT List 数据对象:D=ai|ai属于ElemSet,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 List,LocateElem(L,e,compare()初始条件:L存在;compare()是判定条件 操作结果:返回第1个与e满足关系compare()的 数据元素位序,若
6、不存在,则返回0ListInsert(&L,i,e)初始条件:L存在;1=i=ListLength(L)+1 操作结果:第i个位置之前插入元素e,长度加1ListDelete(&L,i,&e)初始条件:L存在;非空;1=i=ListLength(L)操作结果:删除第i个元素,e返回值,长度减1,顺序表-线性表的顺序存储,2.2线性表的顺序存储结构,内涵:线性表的顺序存储指用一组地址连续的存储单元依次存储线性表的数据元素。这称为顺序表。特点:*存储单元地址连续(需要一段连续空间)*逻辑上相邻的数据元素其物理位置也相邻*随机存取*存储密度为大(100%),顺序表的随机存取,2.2线性表的顺序存储结
7、构(续),对线性表L,设每个元素占k个存储单元,则有:递推关系:LOC(ai+1)=LOC(ai)+k任一元素ai+1的存储位置:LOC(ai)=LOC(a1)+(i-1)*k(其中1=i=ListLength(L),顺序表上插入运算的实现,2.2线性表的顺序存储结构(续),(a1,ai,ai+1,an)表长为n,Status ListInsert_Sq(SqList 第四步:插入;/ListInsert_Sq,(a1,ai-1,e,ai,an)表长为n+1,顺序表上删除运算的实现,2.2线性表的顺序存储结构(续),(a1,ai,ai+1,an)表长为n,Status ListDelete_S
8、q(SqList&L,int i,ElemType&e)第一步:判断参数是否合法合理,否则出错;第二步:在物理空间中找到删除位置;第三步:删除;第四步:删除后的善后工作/ListDelete_Sq,(a1,ai-1,ai+1,an)表长为n-1,顺序表优缺点分析,2.3线性表的链式存储结构,优点:*不需要额外空间来存储元素之间的关系*可以随机存取任一元素,缺点:*插入和删除运算需要移动大量元素*需要一段连续空间*预先分配足够大的空间*表的容量难以扩充,链表-线性表的链式存储,2.3线性表的链式存储结构(续),内涵:线性表的链式存储指用任意的存储单元存放线性表中的元素,每个元素与其前驱和(或)后
9、继之间的关系用指针来存储。这称为链表。,术语:*结点*数据域*指针域*头指针*头结点,分类:*单链表*循环链表*双向链表*双向循环链表*静态链表,单链表,2.3线性表的链式存储结构(续),单链表中,如果每个结点中只包含一个指域,称这种链表为线性链表或单链表。单链表可由头指针唯一确定。,单链表的数据类型描述,用高级语言中的指针类型描述线性表的链式存储,/-用结构指针描述-typedef struct LNodeElemTypedata/数据域struct LNode*next/指针域 Lnode,*LinkList,2.3线性表的链式存储结构(续),单链表上插入运算的实现,2.3线性表的链式存储
10、结构(续),(a1,ai,ai+1,an)表长为n,(a1,ai-1,e,ai,an)表长为n+1,S=(LinkList)malloc(sizeof(LNode),s-next=p-next;p-next=s,单链表上删除运算的实现,2.3线性表的链式存储结构(续),(a1,ai,ai+1,an)表长为n,(a1,ai-1,ai+1,an)表长为n-1,free(q),p-next=p-next-next,2.线性表3.栈、队列和串,教学内容-第三章,栈、队列和串是特殊的线性表,3.1 栈、队列和串的逻辑结构,栈和队列是操作受限的线性表栈和队列的“操作受限”指操作位置受限串的特殊性在于线性表
11、中数据元素只能是字符串一般以子串为操作单位栈、队列和串具有一般线性表共性的特点特殊的线性表反而应用面更宽,栈的基本概念和术语,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 栈顶
12、,基本操作:InitStack(&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):允许插入的一端。队
13、头(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(
14、&Q,e)初始条件:Q存在 操作结果:插入元素e为新的队尾元素,长度加 1DelQueue(&S,&e)初始条件:Q存在;非空 操作结果:删除Q的对头元素,e返回值,长度 减1ADT Queue,串的基本概念和术语,3.1 栈、队列和串的逻辑结构(续),串(String):由零个或多个字符组成的有限序列。S=a1a2an串名、串值串长空串、空格串子串:串中任意连续的字符组成的子序列主串:字符在串中的位置、子串在串中的位置串相等,串的操作特点:一般以子串整体为单位,串的抽象数据类型定义,3.1 栈、队列和串的逻辑结构(续),ADT Sring 数据对象:D=ai|ai属于CharacterSet
15、,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
16、=pos=StrLength(S)-len+1 操作结果:从串S中删除第pos个字符起长度为 len 的子串ADT String,栈的顺序存储,3.2 栈、队列和串的存储结构,/-动态分配-#define STACK_INIT_SIZE 100/空间初始分配量#define STACKINCREMENT 10/空间分配增量typedef struct sElemType*basesElemType*topintstacksize/当前分配的存储容量 SqStack,Status Push(SqStack/Push,顺序栈上的入栈,3.2 栈、队列和串的存储结构(续),Status Pop(Sq
17、Stack/Pop,顺序栈上的出栈,3.2 栈、队列和串的存储结构(续),栈的链式存储-链栈,3.2 栈、队列和串的存储结构(续),typedef struct ElemTypedatastruct Lnode*next Lnode,*StackPtr,typedef struct StackPtr top StackPtr base LinkStack,链栈上的入栈与出栈,3.2 栈、队列和串的存储结构(续),链栈上的入栈与出栈与单链表上元素插入删除操作类似插入删除位置都在栈顶处,不花费查找时间栈空的判断,队列的顺序存储-循环队列(一),3.2 栈、队列和串的存储结构(续),一般顺序存储的队
18、列特点:队空条件:front=rear队满条件:rear=MAXSIZE队满条件下的队满为假满(假溢出)(真满时:rear=MAXSIZE,front=0),/-动态分配-#define MAXSIZE 100/最大队列长度typedef struct QElemType*baseintfront/指向队头元素当前位置intrear/指向队尾元素下一个位置 SqQueue,队列的顺序存储-循环队列(二),3.2 栈、队列和串的存储结构(续),循环队列特点:队空条件:*front=rear(方式一)*标志域+(front=rear)(方式二)队满条件:*(rear+1)%MAXSIZE=fron
19、t(方式一)*标志域+(front=rear)(方式二)队满条件下的队满为真满,队列的顺序存储-循环队列(三),3.2 栈、队列和串的存储结构(续),队列的顺序存储-循环队列(四),3.2 栈、队列和串的存储结构(续),Status EnQueue(SqQueue/EnQueue,Status InitQueue(SqQueue/InitQueue,Status DeQueue(SqQueue/DeQueue,队列的链式存储-链队列(一),3.2 栈、队列和串的存储结构(续),typedef struct QElemTypedatastruct QNode*next QNode,*QueueP
20、tr,typedef struct QueuePtr rear QueuePtr front LinkQueue,Status EnQueue(LinkQueue/EnQueue,Status InitQueue(LinkQueue/InitQueue,Status DeQueue(LinkQueue/DeQueue,队列的链式存储-链队列(二),3.2 栈、队列和串的存储结构(续),串的顺序存储(一),3.2 栈、队列和串的存储结构(续),/-串的定长顺序存储表示-#define MAXSTRLEN 255/最大串长度typedef unsigned char SStringMAXSTRLE
21、N+1/0号单元存放串的长度,串顺序存储的特点:连续存储单元静态分配串操作中的原操作一般为“字符序列的复制”截尾法处理串值序列的上越界,Status SubString(SString/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 T0)return
22、 i T0;else return 0;/Index算法时间复杂度: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
23、 a c b a b/i=7模式串:a b c a c/j=5,第四趟 主串: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),而由部分匹配成功的结果可
25、知:t1t2tj-1=si-j+1si-j+2si-1-(2),由(2)式可以推知: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 串的模式匹配算法(续),设主
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 语言 描述 课件

链接地址:https://www.31ppt.com/p-2153925.html