数据结构(java版)刘小晶:第4章-串与数组-课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《数据结构(java版)刘小晶:第4章-串与数组-课件.ppt》由用户(ziliao2023)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 java 刘小晶 数组 课件
- 资源描述:
-
1、第四章第四章 串与数组串与数组第四章第四章 串与数组串与数组4.1 串的基本概念串的基本概念 4.2 串的存储结构串的存储结构 4.3 顺序串的实现顺序串的实现 4.4 串的模式匹配操作串的模式匹配操作 4.5 串的应用举例串的应用举例 4.6 数组的概念及顺序存储结构数组的概念及顺序存储结构 4.7 特殊矩阵的压缩存储特殊矩阵的压缩存储 4.8 稀疏矩阵的压缩存储稀疏矩阵的压缩存储 第四章第四章 串与数组串与数组重点:重点:u掌握串类型定义中各基掌握串类型定义中各基本操作的定义以及本操作的定义以及串中基本操作的应用。串中基本操作的应用。u掌握数组的定义、操作和存储结构掌握数组的定义、操作和存
2、储结构难点:难点:u串的基本操作的应用,即如何运用串串的基本操作的应用,即如何运用串的基本操作来实现其它串的复杂操作。的基本操作来实现其它串的复杂操作。u矩阵的压缩存储。矩阵的压缩存储。4.1串的基本概念串的基本概念1 1、串:串:是由是由零个零个或或多个多个字符组成的有限序列。字符组成的有限序列。一般记为一般记为s=s=a a0 0a a1 1a an-1 n-1,其中其中s s为为串名串名,双引号括起来的字符序列是,双引号括起来的字符序列是串值串值。2 2、串的长度:串的长度:串中串中字符的个数字符的个数。3 3、空串:空串:长度为长度为0 0的串,即不包含任何字符的的串,即不包含任何字符
3、的串,表示为串,表示为。4 4、空白串:空白串:由一个或多个空白字符组成的串,由一个或多个空白字符组成的串,如:如:。注意:注意:空串与空白串的区别空串与空白串的区别串也是一种特殊的线性表。串也是一种特殊的线性表。4.1.1 4.1.1 串的基本概念串的基本概念4.1串的基本概念串的基本概念5 5、子串:子串:主串:主串:串中任意个串中任意个连续字符连续字符组成的组成的子子序序列称为该串的子串。列称为该串的子串。包含子串的串相应地称为包含子串的串相应地称为主主串。串。6 6、字符在串中的位置:字符在串中的位置:子串在主串中的位置:子串在主串中的位置:如:如:s1=s1=cdababefcdab
4、abef,s2=,s2=abab字符在串中的序号值。字符在串中的序号值。子串在主串中第一次子串在主串中第一次出现时的第一个字符在主串中的序号值。出现时的第一个字符在主串中的序号值。注意:注意:空串是任意串的子串空串是任意串的子串,任意串是其自任意串是其自 身的子串。身的子串。4.1.1 4.1.1 串的基本概念串的基本概念4.1串的基本概念串的基本概念7 7、两个串相等:两个串相等:长度相等长度相等各个字符对应相等各个字符对应相等串值相等串值相等4.1.1 4.1.1 串的基本概念串的基本概念4.1串的基本概念串的基本概念4.1.2 4.1.2 串的抽象数据类型描述串的抽象数据类型描述 cle
5、ar()1 1)串的置空操作:)串的置空操作:isEmpty()2 2)串的判空操作:)串的判空操作:length()3 3)求串的长度操作:)求串的长度操作:4 4)取字符元素操作:)取字符元素操作:5 5)截取子串操作:)截取子串操作:charAT(index)substring(bengin,end)6 6)插入操作:)插入操作:insert(offset,str)4.1串的基本概念串的基本概念4.1.2 4.1.2 串的抽象数据类型描述串的抽象数据类型描述 delete(begin,end )7 7)删除操作:)删除操作:concat(str)8 8)串的连接操作:)串的连接操作:co
6、mpareTo(str )9 9)串的比较操作:)串的比较操作:1010)子串定位操作:)子串定位操作:indexOf(str,begin)4.1串的基本概念串的基本概念4.1.2 4.1.2 串的抽象数据类型描述串的抽象数据类型描述charAT(index)读取并返回串中的第读取并返回串中的第indexindex个字符值个字符值,其中其中:0:0indexindexlength()-1length()-1 例如例如:当前串为当前串为abcdefg charAT(0)=?acharAT(3)=?dcharAT(6)=?g4.1串的基本概念串的基本概念4.1.2 4.1.2 串的抽象数据类型描述
7、串的抽象数据类型描述substring(bengin,end)截取当前串中从序号截取当前串中从序号beginbegin开始开始,到序号到序号end-1end-1为止的子串并返回其值为止的子串并返回其值,其中其中:0beginlength()-1,1 1endendlength()length()例如例如:当前串为当前串为commander substring(3,6)=?man substring(0,9)=?commander substring(8,9)=?r substring(3,10)=?substring(9,1)=?4.1串的基本概念串的基本概念4.1.2 4.1.2 串的抽象数
8、据类型描述串的抽象数据类型描述 将串将串strstr插入到当前串中的第插入到当前串中的第offsetoffset个字个字符的前面符的前面,并返回操作结果。其中并返回操作结果。其中:0offsetlength()例如例如:当前串为当前串为chater,则则insert(3,rac)=?character insert(offset,str)insert(0,rac)=?racchater insert(6,rac)=?chaterrac 4.1串的基本概念串的基本概念4.1.2 4.1.2 串的抽象数据类型描述串的抽象数据类型描述delete(bengin,end)删除当前串中从序号删除当前串中
9、从序号beginbegin开始开始,到序号到序号end-1end-1为止的子串为止的子串,并返回操作结果。其中并返回操作结果。其中:0beginlength()-1,1 1endendlength()length()例如例如:当前串为当前串为commanderdelete(3,6)=?comder delete(0,9)=?delete(8,9)=?commande delete(3,10)=?delete(9,1)=?4.1串的基本概念串的基本概念4.1.2 4.1.2 串的抽象数据类型描述串的抽象数据类型描述 concat(str)将串将串strstr连接在当前串的后面,连接在当前串的后面
10、,并返回其值。并返回其值。例如例如:当前串为当前串为man,则则concat(kind)=?mankind 4.1串的基本概念串的基本概念4.1.2 4.1.2 串的抽象数据类型描述串的抽象数据类型描述 compareTo(str)将当前串与目标串将当前串与目标串strstr进行比较进行比较,若若:当前串当前串 str str,则返回值,则返回值 0 0;当前串当前串 str str,则返回值,则返回值 0 0;当前串当前串 strstr,则返回值,则返回值 0 0。例如例如:当前串为当前串为 cat compareTo(case)?0 compareTo(cate)?0compareTo(c
11、ht )?0 4.1串的基本概念串的基本概念4.1.2 4.1.2 串的抽象数据类型描述串的抽象数据类型描述indexOf(str,begin)在当前串中从在当前串中从beginbegin位置开始去找与位置开始去找与非空串非空串strstr相等的子串相等的子串,若查找成功则返回在当前串中的位置若查找成功则返回在当前串中的位置,否则返回否则返回-1,-1,其中其中:0beginlength()-1 例如例如:当前串为当前串为 bcaabcaaabc,str=,str=bca indexOf(str,0)=?0indexOf(str,2)=?4indexOf(str,6)=?-14.1串的基本概念
12、串的基本概念public interface IString public void clear();public boolean isEmpty();public int length();public char charAt(int index);public IString substring(int begin,int end);public IString insert(int offset,IString str);4.1.2 4.1.2 串的抽象数据类型描述串的抽象数据类型描述4.1串的基本概念串的基本概念 串串的逻辑结构和的逻辑结构和线性表线性表极为相似,极为相似,区别区别仅在
13、于仅在于串的数据对象约束为字符集串的数据对象约束为字符集。但串的基本操作和线性表有很大差别但串的基本操作和线性表有很大差别:在线性表的基本操作中,大多以大多以“单个元素单个元素”作为操作对象作为操作对象;在串的基本操作中,通常以通常以“串的串的整体整体”作为操作对象作为操作对象。4.2串的存储结构串的存储结构4.2.1 4.2.1 串的顺序存储结构串的顺序存储结构 串的顺序存储结构与线性表的顺序存储结串的顺序存储结构与线性表的顺序存储结构类似,可以采用一组地址连续的存储单元构类似,可以采用一组地址连续的存储单元来存储串字符序列。顺序存储的串称为来存储串字符序列。顺序存储的串称为顺序顺序串,顺序
14、串的类型描述如下串,顺序串的类型描述如下:public class SeqString implements IString private char strvalue;/存放串值存放串值 private int curlen;/存放串的长度存放串的长度 4.2串的存储结构串的存储结构 其中:其中:strvaluestrvalue是一个字符数组,数组是一个字符数组,数组容量是容量是1111,该数组中存放字符串,该数组中存放字符串“I am a I am a dogdog,串的实际长度,串的实际长度curlencurlen的值是的值是1010。4.2.1 4.2.1 串的顺序存储结构串的顺序存储
15、结构 4.2串的存储结构串的存储结构4.2.2 4.2.2 串的链式存储结构串的链式存储结构 串的链式存储结构和线性表的链式存储结串的链式存储结构和线性表的链式存储结构类似,可以构类似,可以采用单链表来存储串值采用单链表来存储串值,串的,串的这种链式存储结构称为链串。如下图这种链式存储结构称为链串。如下图:4.3顺序串的实现顺序串的实现4.3.1 4.3.1 顺序串的类定义顺序串的类定义(见教材(见教材P113-115P113-115)public class SeqString implements ISring private char strValue;private int curLe
16、n;public SqStack()/构造一个空串构造一个空串 /以字符串常量构造串对象以字符串常量构造串对象 public SqStack(String str)stingValue=new char0;curLen=0;char tempchararray=str.toCharArray();strValue=tempchararray;curLen=tempchararray.length;4.3顺序串的实现顺序串的实现4.3.1 4.3.1 顺序串的类定义顺序串的类定义(见教材(见教材P113-115P113-115)public class SeqString implements
17、ISring public SqStack(char value)/以字符数组构造串对象以字符数组构造串对象 this.strValue=new charvalue.length;for(int i=0;i value.length;i+)/复制数组复制数组 this.strValuei=valuei;curLen=value.length;public void clear()/顺序串的置空函数顺序串的置空函数 curLen=0;4.3顺序串的实现顺序串的实现4.3.1 4.3.1 顺序串的类定义顺序串的类定义(见教材(见教材P113-115P113-115)public class Seq
18、String implements ISring return curLen;/判判空函数空函数public boolean isEmpty()/求顺序串长度函数求顺序串长度函数 public int length()/返回顺序串中第返回顺序串中第indexindex个字符个字符 public char charAt(int index)return curLen=0;if(index=curLen)throw new StringIndexOutofBoundsException(index);return strValuei;4.3顺序串的实现顺序串的实现4.3.1 4.3.1 顺序串的类
19、定义顺序串的类定义(见教材(见教材P113-115P113-115)public class SeqString implements ISring /扩充字符串的存储容量,参数指定容量扩充字符串的存储容量,参数指定容量 public void allocate(int newCapacity)char temp=srtValue;strValue=new charnewCapacity;for(int i=0;itemp.length;i+)strValuei=tempi;/截子串操作截子串操作public IString subString(int begin,int end)4.3顺序串
20、的实现顺序串的实现4.3.1 4.3.1 顺序串的类定义顺序串的类定义(见教材(见教材P113-115P113-115)public class SeqString implements ISring /串的插入操作串的插入操作public IString insert(int offset,IString str)/串的删除操作串的删除操作public IString delete(int begin,int end)/串的比较操作串的比较操作public int compareTo(IString str)/子串的定位操作子串的定位操作 public int indexOf(IString
21、 str,int begin)4.3顺序串的实现顺序串的实现4.3.2 4.3.2 串的基本操作实现串的基本操作实现1.截子串操作截子串操作 subString(begin,end)的实现(的实现(P115/算法算法 4.1)a.a.检测参数检测参数beginbegin和和end end 是否合法是否合法 if(if(begin0begincurLenendcurLen|beginbegin=endend)抛出异常抛出异常 返回当前串中序号从返回当前串中序号从beginbegin至至end-1end-1的子的子串。起始下标串。起始下标beginbegin的范围是:的范围是:0beginleng
22、th()-10beginlength()-1;结束下标;结束下标endend的范的范围是:围是:1endlength()1endlength()。4.3顺序串的实现顺序串的实现char buffer=new charend-begin;for(int i=0;i buffer.length;i+)/复制子串复制子串 bufferi=this.strvaluei+begin;return new SeqString(buffer);if(begin=0&end=curLen)return this;else b.b.若要截取整个串,则返回原串;若要截取整个串,则返回原串;否则返回截取从否则返回截
23、取从beginbegin到到end-1end-1之间的子串之间的子串 1.截子串操作截子串操作 subString(begin,end)的实现(的实现(P115/算法算法 4.1)4.3顺序串的实现顺序串的实现char buffer=new charend-begin;for(int i=0;i 0|endend)throw new StringIndexOutOfBoundsException(参数不合法);4.3顺序串的实现顺序串的实现4.3.2 4.3.2 串的基本操作实现串的基本操作实现2.串的插入操作串的插入操作 insert(offset,str)的实现(的实现(P116/算法算法
24、 4.2)在当前串中第在当前串中第offsetoffset个字符之前插入串个字符之前插入串strstr,并返回结果串对象并返回结果串对象。其中:参数。其中:参数offsetoffset的有效范围是:的有效范围是:0offsetlength()0offsetlength()。当当offset=0offset=0,表示在当前串的,表示在当前串的开始处开始处插插入串入串strstr;当;当offset=length()offset=length(),表示在当前,表示在当前串的串的结尾处结尾处插入串插入串strstr。4.3顺序串的实现顺序串的实现a.a.检测参数的合法性检测参数的合法性 2.串的插入
25、操作串的插入操作 insert(offset,str)的实现(的实现(P116/算法算法 4.2)if(if(offset0offsetcurLenoffsetcurLen)抛出异常抛出异常b.b.判断空间是足够判断空间是足够:如果不足如果不足,则扩充空间则扩充空间,否则否则转转c cint len=str.length();/str串的长度串的长度int newcount=this.curLen+len;/插入后串的长度插入后串的长度if(newcountstrValue.length)allocate(newcount);c.c.后移:后移:将将strvaluestrvalue中从中从of
展开阅读全文