串数组和广义表.pptx
《串数组和广义表.pptx》由会员分享,可在线阅读,更多相关《串数组和广义表.pptx(62页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、4.1 串类型的定义串类型的定义4.2 串的表示和实现串的表示和实现5.1 数组的定义数组的定义5.2 数组的顺序表示和实现数组的顺序表示和实现5.3 矩阵的压缩存储矩阵的压缩存储5.4广义表的定义广义表的定义 教学内容第1页/共62页内容回顾栈栈的的特点及其特点及其表示实现表示实现队列队列的的特点及其特点及其表示实现表示实现第2页/共62页1.1.串和基本概念串和基本概念v串串(String):(String):零个或多个字符组成的有限零个或多个字符组成的有限序列序列.如:如:S=S=a a1 1a a2 2a a3 3a an n(n n0),0),其中,其中,S S是是串的名,单引号括起
2、来的字符序列是串的值;串的名,单引号括起来的字符序列是串的值;a ai i(1in1in)可以是字母、数字或其它字符,)可以是字母、数字或其它字符,单引号本身不属于串单引号本身不属于串,它的作用只是为了避免它的作用只是为了避免与变量名或数的常量混淆。与变量名或数的常量混淆。v串长串长(string length)(string length):串中所包含串中所包含的字符个数。的字符个数。strLength(s)=nstrLength(s)=n第四章第四章 串串第3页/共62页v空串空串(Empty String):(Empty String):0 0个字符的串,个字符的串,串的长度为零,它不包
3、含任何字符串的长度为零,它不包含任何字符,一个空串用一个空串用 表示。表示。v空格串空格串(Blank String)(Blank String):由一个或多由一个或多个空格组成的串。个空格组成的串。注意:注意:空串和空格串的不同,例如空串和空格串的不同,例如 和和分别表示长度为分别表示长度为1 1的空格串和长度为的空格串和长度为0 0的空的空串。串。第4页/共62页v子串子串:串中串中任意个连续任意个连续字符组成的子序列。字符组成的子序列。v主串主串:包含子串的串。包含子串的串。如求如求 S=S=abcabc的子串?的子串?一个长度为一个长度为n n的串有多少个子串?的串有多少个子串?v子串
4、在主串中的位置子串在主串中的位置:以子串的第一个字符在主串中的位置来表示以子串的第一个字符在主串中的位置来表示.如:如:a,b,c,da,b,c,d分别为分别为:a=a=BEIBEI,b=,b=JINGJING,c=,c=BEIJINGBEIJING,d=,d=BEI JINGBEI JING,长度分别为?子串?主串?子串在主串中的位置?长度分别为?子串?主串?子串在主串中的位置?第5页/共62页v称两个串是相等的称两个串是相等的,当且仅当这两个串的值相等,即只有当两个串的,当且仅当这两个串的值相等,即只有当两个串的长度相等长度相等,并且并且各个对应位置的字符相等各个对应位置的字符相等时才相等
5、。时才相等。注意:注意:空串是任意串的子串,任意串是其自身的子串。空串是任意串的子串,任意串是其自身的子串。v串常量:串常量:和整常数、实常数一样,在程序中只能被引用但不能改变其值,即只和整常数、实常数一样,在程序中只能被引用但不能改变其值,即只能读不能写。如:能读不能写。如:const char ch=const char ch=“hellohello”,串变量:其取值是可以改,串变量:其取值是可以改变的。变的。第6页/共62页2.串的抽象数据类型的定义串的抽象数据类型的定义ADT String 数据对象数据对象:D ai|aiCharacterSet,i=1,2,.,n,n0 数据关系数据
6、关系:R1|ai-1,ai D,i=2,.,n 串是有限长的字符序串是有限长的字符序列,由一对单引号相列,由一对单引号相括,如括,如:a string 第7页/共62页 基本操作基本操作 StrAssign(&T,chars)StrCopy(&T,S)DestroyString(&S)StrEmpty(S)StrCompare(S,T)StrLength(S)Concat(&T,S1,S2)SubString(&Sub,S,pos,len)Index(S,T,pos)Replace(&S,T,V)StrInsert(&S,pos,T)StrDelete(&S,pos,len)ClearStri
7、ng(&S)ADT String第8页/共62页 SubString(&Sub,S,pos,len)初始条件:串 S 存在,1posStrLength(S)且0lenStrLength(S)-pos+1。操作结果:用用 Sub 返回串返回串 S 的第的第 pos 个字符起个字符起 长度为长度为 len 的子串。的子串。基本操作基本操作第9页/共62页例例1:SubString(sub,commander,4,3)求得求得 sub=man ;SubString(sub,commander,1,9)求得求得 sub=commander;SubString(sub,commander,9,1)求得求
8、得 sub=r;子串为子串为“串串”中的一个字符子序列中的一个字符子序列第10页/共62页SubString(sub,commander,4,7)sub=?SubString(sub,beijing,7,2)=?sub=?SubString(sub,student,5,0)=起始位置和子串长度之间存在约束关系起始位置和子串长度之间存在约束关系0lenStrLength(S)-pos+1长度为长度为 0 的子串为的子串为“合法合法”串串第11页/共62页Index(S,T,pos)初始初始条件:条件:串串S和和T存在,存在,T是非空串,是非空串,1posStrLength(S)。操作结果:操作结
9、果:若主串若主串 S 中存在和串中存在和串 T 值相同值相同 的子串的子串,则返回它在主串则返回它在主串 S 中第中第pos个个 字符之后第一次出现的位置;字符之后第一次出现的位置;否则函数值为否则函数值为0。第12页/共62页例2:S=abcaabcaaabc,T=bca Index(S,T,1)=2;Index(S,T,3)=6;Index(S,T,8)=0;“子串在主串中的位置子串在主串中的位置”意指子串中的第一个字符在主串中的位序位序。第13页/共62页 Replace(&S,T,V)初始条件:初始条件:串串S,T和和 V 均已存在,且均已存在,且 T 是非空串。是非空串。操作结果:操
10、作结果:用用V替换主串替换主串S中出现的所中出现的所有与(模式串)有与(模式串)T相等的不重叠的子串。相等的不重叠的子串。第14页/共62页例例3 3:假设 S=abcaabcaaabca,T=bca若 V=x,则经置换后得到 S=axaxaax若 V=bc,则经置换后得到 S=abcabcaabc第15页/共62页 StrInsert(&S,pos,T)初始条件:串S和T存在,1posStrLength(S)1。操作结果:在串S的第pos个字符之前 插入串T。例例4:S=chater,T=rac,则执行 StrInsert(S,4,T)之后得到 S=character第16页/共62页 对于
11、串的基本操作集可以有不同的定义方法,在使用高级程序设计语言中的串类型时,应以该语言的参考手册为准以该语言的参考手册为准。gets(str)输入一个串;puts(str)输出一个串;strcat(str1,str2)串联接函数;strcpy(str1,str2,k)串复制函数;strcmp(str1,str2)串比较函数;strlen(str)求串长函数;例如:C语言函数库中提供下列串处理函数:第17页/共62页 在上述抽象数据类型定义的13种操作中,串赋值串赋值StrAssignStrAssign、串比较、串比较StrCompareStrCompare、求串长求串长StrLengthStrLe
12、ngth、串联接、串联接ConcatConcat、求子串求子串SubString SubString 等五种操作构成串等五种操作构成串类型的最小操作子集类型的最小操作子集。即:这些操作不可能利用其他串操作来实现,反之,其他串操作(除串清空ClearString和串销DestroyString 外)可在这个最小操作子集上实现。第18页/共62页 串的逻辑结构和线性表极为相似,区别串的逻辑结构和线性表极为相似,区别仅在于串的数据对象约束为仅在于串的数据对象约束为字符集字符集。串的基本操作和线性表有很大差别。串的基本操作和线性表有很大差别。在线性表的基本操作中,大多以在线性表的基本操作中,大多以“单
13、个单个元素元素”作为操作对象;作为操作对象;在串的基本操作中,通常以在串的基本操作中,通常以“串的整体串的整体”作为操作对象。作为操作对象。第19页/共62页 在程序设计语言中,串只是作在程序设计语言中,串只是作为输入或输出的常量出现,则只需存为输入或输出的常量出现,则只需存储此串的储此串的串值串值,即字符序列即可。但,即字符序列即可。但在多数非数值处理的程序中,串也以在多数非数值处理的程序中,串也以变量的形式出现。变量的形式出现。3.串的表示和实现串的表示和实现第20页/共62页 按这种串的表示方法实现串的运算时,其基本操作为“字符序列的复制字符序列的复制”。用一组地址连续的存储单元存储串值
14、用一组地址连续的存储单元存储串值的字符序的字符序 列,即按照预定义大小,为每列,即按照预定义大小,为每一个定义的串变量分配一个一个定义的串变量分配一个固定长度的存固定长度的存储区储区。串。串的实际长度可在这个预定义长度的范围内随意设定,超过预定义长度的串值则被舍去,称之为“截断截断”。串的定长顺序存储表示串的定长顺序存储表示第21页/共62页导入导入 线性表、栈、队列、串:要求数据线性表、栈、队列、串:要求数据结构中的元素必须有结构中的元素必须有相同的属性,即相同的属性,即数据类型;数据类型;其中元素的数据类型只要其中元素的数据类型只要相同即可,当然也可以就是一个相同即可,当然也可以就是一个数
15、据数据结构。结构。第五章第五章 数组和广义表数组和广义表第22页/共62页1、数组的定义、数组的定义数组:数组:它是它是n(n1)个个相同数据类型相同数据类型的数的数据元素据元素a0,a1,a2,an-1构成的占用一块地址连构成的占用一块地址连续的内存单元的有限序列。续的内存单元的有限序列。注意:注意:(1)C语言的数组定义下标语言的数组定义下标从从0开始。开始。(2)数组元素的下标一般具有固定的)数组元素的下标一般具有固定的上界上界和和下下界,即数组一界,即数组一旦被定义,它的维数和维界就不再改变。旦被定义,它的维数和维界就不再改变。(3)一个二维数组可以看作)一个二维数组可以看作每个数据元
16、素是一个一维数组的每个数据元素是一个一维数组的一维数组一维数组。二维数组是两维的,内存单元是一维的,存在向。二维数组是两维的,内存单元是一维的,存在向内存存储时二维数组中数据元素的存储方法问题,内存存储时二维数组中数据元素的存储方法问题,C语言采用语言采用以行序为主序的方法存储。以行序为主序的方法存储。第23页/共62页 数组数组逻辑上是线性结构的推广;逻辑上是线性结构的推广;数组数组是以是以线性表为元素线性表为元素的线性结的线性结 构,而且元素的结构相同;构,而且元素的结构相同;数组数组可以看作是可以看作是下标和值的偶对下标和值的偶对的的集合;集合;数组数组是一种是一种逻辑结构逻辑结构。第2
17、4页/共62页例例1 1 高级语言中的数组高级语言中的数组wint a10;a0 a1 a2 a3 a10-1wchar B45 B00 B01 B02 B03 B05-1B10 B11B15-1B20 B21B25-1第25页/共62页二维数组wint a23;n两个变量组成的一个数组,其中两个变量组成的一个数组,其中每一个变量都是数组。其中每一个变量都是数组。其中a0,a1都是数组的名字,也就是地址。都是数组的名字,也就是地址。一个一个mn的二维数组可以看成是的二维数组可以看成是m行的一维数组,或者行的一维数组,或者n列的一维列的一维数组。数组。a01a00a12a11a10a02第26页
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数组 广义
限制150内