数据结构-串和数组.ppt
《数据结构-串和数组.ppt》由会员分享,可在线阅读,更多相关《数据结构-串和数组.ppt(63页珍藏版)》请在三一办公上搜索。
1、3.6 其他线性结构,串(String)是由零个或多个字符组成的有限序列。一般记为:S=a1 a2.an(n0)其中,S是串的名,用单引号括起来的字符序列是串的值;ai(1in)可以是字母、数字或其它字符,串中字符的数目n称为串的长度。n=0的串称为空串(null string)。,3.6.1 串的定义和串的存储方式概念,串中任意个连续的字符组成的子序列称为该串的子串。包含子串的串相应地称为主串。通常称字符在序列中的序号为该字符在串中的位置。子串在主串中的位置则以子串的第一个字符在主串中的位置来表示。当两个串的长度相等,并且各个对应位置上的字符都相等时,称两个串相等。,3.6.1 串的定义和串
2、的存储方式概念,例:串名为A、B、C、D的四个串如下:A=very good;长度为9,是D的主串;B=;长度为3;C=;长度为0(空串);D=good;长度为4,是A的子串。D在A中的位置是6。,3.6.1 串的定义和串的存储方式概念,(1)赋值操作:StrAssign(S,chars)初始条件:chars是字符串常量;操作结果:生成一个值等于chars的字符串S;(2)插入操作:StrInsert(S,pos,T)初始条件:字符串S、T存在,1pos StrLength(S)+1;操作结果:在字符串S的第pos个字符之前插入串T。,3.6.1 串的定义和串的存储方式基本操作,(3)删除操作
3、:StrDelete(S,pos,len)初始条件:字符串S存在,1pos StrLength(S)-len+1;操作结果:从字符串S中删除第pos个字符起长度为len的子串。(4)复制操作:StrCopy(S,T)初始条件:字符串S存在;操作结果:将字符串S的内容复制到串T。,3.6.1 串的定义和串的存储方式基本操作,(5)判空操作:StrEmpty(S)初始条件:字符串S存在;操作结果:若S为空串,则返回TRUE,否则返回FALSE。(6)比较操作:StrCompare(S,T)初始条件:字符串S、T存在;操作结果:若ST,则返回值0;若S=T,则返回值=0;若ST,则返回值0。,3.6
4、.1 串的定义和串的存储方式基本操作,(7)求串长操作:StrLength(S)初始条件:字符串S存在;操作结果:返回字符串S的长度,即串S中字符的个数。(8)置空操作:StrClear(S)初始条件:字符串S存在;操作结果:将字符串S清为空串。,3.6.1 串的定义和串的存储方式基本操作,(9)联接操作:StrCat(S,T)初始条件:字符串S、T存在;操作结果:将字符串T的值连接在S的后面。(10)求子串操作:SubString(Sub,S,pos,len)初始条件:字符串S存在,1posStrLength(S)且1lenStrLength(S)-pos+1;操作结果:用Sub返回字符串S
5、的第pos个字符开始长度为len的子串。,3.6.1 串的定义和串的存储方式基本操作,(11)定位操作:StrIndex(S,pos,T)初始条件:字符串S、T存在,T非空,1posStrLength(S);操作结果:若字符串S中存在与T相等的子串,则返回它在字符串S中第pos个字符之后第一次出现的位置;否则返回0。(7)置换操作:StrReplace(S,T,V)初始条件:字符串S、T、V存在,T非空;操作结果:用V替换字符串S中出现的所有与T相等的不重叠的子串。,3.6.1 串的定义和串的存储方式基本操作,(13)释放操作:StrDestroy(S)初始条件:字符串S存在;操作结果:销毁字
6、符串S。,3.6.1 串的定义和串的存储方式基本操作,串的两种基本存储结构:顺序存储结构和链式存储结构。定长顺序串:当串的长度基本固定时,主要考虑采用顺序存储结构实现。其C语言描述如下:#define Maxlen 20/串的最大长度typedef struct/串的定义char chMaxlen;int len;/串的长度 Sstring;,3.6.1 串的定义和串的存储方式串的存储结构,在进行串的插入时:插入位置pos将原字符串划分为两部分(分别假设为A和B,长度分别为LA和LB);待插入字符串假设为C,其长度为LC;插入过程可能出现下列三种情况:1)插入后串的总长度为LA+LB+LC M
7、axlen;2)插入后串的总长度Maxlen,且pos+LCMaxlen,且pos+LCMaxlen;,3.6.2 定长顺序串运算插入算法分析,/*在串s中序号为pos的字符之前插入串t*/int StrInsert(SString*s,int pos,SString t)int i;if(poss-len)return(0);/*插入位置不合法*/if(s-len+t.lenlen+t.len-1;i=t.len+pos;i-)s-chi=s-chi-t.len;for(i=0;ichi+pos=t.chi;s-len=s-len+t.len;,3.6.2 定长顺序串运算插入算法实现,els
8、e if(pos+t.lenMaxlen,但串t的字符序列可以全部插入*/for(i=Maxlen-1;i=t.len+pos;i-)s-chi=s-chi-t.len;for(i=0;ichi+pos=t.chi;s-len=Maxlen;else/*串t的部分字符序列要舍弃*/for(i=0;ichi+pos=t.chi;s-len=Maxlen;return(1);,3.6.2 定长顺序串运算插入算法实现,int StrDelete(SString*s,int pos,int len)if(pos(s-len-len)return(0);for(i=pos+len;ilen;i+)s-c
9、hi-len=s-chi;s-len=s-len-len;return(1);,3.6.2 定长顺序串运算删除算法实现,在进行串的连接时:假设原字符串为A,长度为LA;待连接串假设为B,其长度为LB;连接过程可能出现下列三种情况:1)连接后串的总长度为LA+LB Maxlen;2)连接后串的总长度Maxlen,且LAMaxlen,LA=Maxlen;,3.6.2 定长顺序串运算连接算法分析,/*将串t连接在串s的后面*/int StrCat(SString*s,SString t)int i,flag;if(s-len+t.lenlen;ilen+t.len;i+)s-chi=t.chi-s-
10、len;s-len=s-len+t.len;flag=1;,3.6.2 定长顺序串运算连接算法实现,else if(s-lenMaxlen,但串s的长度len;ichi=t.chi-s-len;s-len=Maxlen;flag=0;else flag=0;/*串s的长度=Maxlen,串t不被连接*/return(flag);,3.6.2 定长顺序串运算连接算法实现,数组(array)可看成是线性表的推广,是最常用的数据结构之一。数组是有限个数组元素的集合,元素数目固定;数组的每个元素与一组下标相对应,数组元素的下标关系具有上下界的约束且下标有序;数组中所有数组元素的数据类型必须一致;数组的
11、两种基本运算:给定下标,存取相应的数据元素;给定下标,修改相应的数据元素。,3.6.3 二维数组的结构特点和存储方式定义,一个m行n列的二维数组(也称为矩阵),记作Am,n。,3.6.3 二维数组的结构特点和存储方式定义,A=,a11 a12.a1n a21 a22.a2n am1 am2.amn,按行优先顺序存储对于上述二维数组A而言,可以将其看成是由m个行向量组成的向量,即:Amn=(a11,.,a1n),(a21,.,a2n),.,(am1,.,amn)这种行向量表相当于一个线性表。行优先顺序存储就是数组元素按行向量表次序进行存储,即第i+1个行表紧跟在第i个行表后面进行存储。,3.6.
12、3 二维数组的结构特点和存储方式存储结构,当把n维数组的元素按行优先顺序地存放在存储器里,则每个元素的存储地址可以用公式计算出来。这个计算公式称为“地址公式”。假设每个数据元素占c个存储单元,则上述二维数组Amn的地址公式为:Loc(aij)=Loc(a11)+(i-1)*n+(j-1)*c(1im,1jn),3.6.3 二维数组的结构特点和存储方式存储结构,按列优先顺序存储对于上述二维数组A而言,也可以将其看成是由n个列向量组成的向量,即:Amn=(a11,.,am1),(a12,.,am2),.,(a1n,.,amn)这种列向量表也相当于一个线性表。列优先顺序存储就是数组元素按列向量表次序
13、进行存储,即第i+1个列表紧跟在第i个列表后面进行存储。,3.6.3 二维数组的结构特点和存储方式存储结构,当把n维数组的元素按列优先顺序地存放在存储器里,并假设每个数据元素占c个存储单元,则上述二维数组Amn的地址公式为:Loc(aij)=Loc(a11)+(j-1)*m+(i-1)*c(1im,1jn),3.6.3 二维数组的结构特点和存储方式存储结构,根据二维数组的特性可以推出:一个三维数组可以用其数据元素为二维数组的线性表来定义;依次类推,n维数组是由数据元素为n-1维数组的线性表构成。因此,对n维数组也有上述两种不同顺序分配的存储结构。当把n维数组的元素这样顺序地存放在存储器里,则每
14、个元素的存储地址都可以用“地址公式”计算出来。,3.6.3 二维数组的结构特点和存储方式存储结构,在C语言中,可以把一个二维数组看作是一种特殊的一维数组,该一维数组的元素又是一个一维数组。例如定义:int a34;其中,可以把a看作是一个一维数组,它有3个元素:a0、a1、a2,每个元素又是一个包含4个元素的一维数组。,3.6.3 二维数组的结构特点和存储方式示例,通常在实际计算中经常出现一些阶数很高的矩阵,且矩阵中有许多值相同的元素或者零元素。为了节省存储空间,可以对这类矩阵进行压缩存储。所谓压缩存储是指:为多个值相同的元素只分配一个存储空间;对零元素不分配空间。,3.6.3 二维数组的结构
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 数组
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-6578839.html