1 / 36
文档名称:

数据结构-串结构.ppt

格式:ppt   大小:712KB   页数:36页
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

数据结构-串结构.ppt

上传人:文库旗舰店 2019/5/8 文件大小:712 KB

下载得到文件列表

数据结构-串结构.ppt

文档介绍

文档介绍:补充:C语言中常用的串运算串比较,intstrcmp(chars1,chars2);//pare(S,T)求串长,intstrlen(chars);//StrLength(S)串连接,charstrcat(charto,charfrom)//Concat(&T,S1,S2)子串T定位,charstrchr(chars,charc);//Index(S,T,pos)……Concat=concatenation,在字符串处理中,把多个短字符串合成为长字符串的操作。注:用C处理字符串时,要调用标准库函数#include<>数据结构课程的内容第4章串(String):s=‘a1,a2,……..,an’(n≥0)串名串值(用‘’括起来)串中字符个数(n≥0).n=0时称为空串。由一个或多个空格符组成的串。串s中任意个连续的字符序列叫s的子串;S叫主串。子串的第一个字符的序号。字符在串中的序号。串长度相等,且对应位置上字符相等。串即字符串,是由零个或多个字符组成的有限序列,是数据元素为单个字符的特殊线性表。:串长:空白串:子串:子串位置:字符位置:串相等:隐含结束符‘/0’,即ASCII码NULL练1:串是由字符组成的序列,一般记为。练2:现有以下4个字符串:a=‘BEI’ b=‘JING’c=‘BEIJING’d=‘BEIJING’问:①他们各自的长度?②a是哪个串的子串?在主串中的位置是多少?a=3,b=4,c=7,d=8a是c和d的子串,在c和d中的位置都是1练3:空串和空白串有无区别?答:有区别。空串(NullString)是指长度为零的串;而空白串(BlankString),是指包含一个或多个空白字符‘’(空格键)=’a1a2……an’ADTSting{Objects:D={ai|ai∈CharacterSet,i=1,2,…,n,n≥0}Relations:R1={<ai-1,ai>|ai-1,ai∈D,i=2,…,n}functions://有13种之多 StrAssign(&T,chars)//串赋值,生成值为chars的串T pare(S,T)//串比较,若S>T,返回值大于0…StrLength(S)//求串长,即返回S的元素个数Concat(&T,S1,S2)//串连接,用T返回S1+S2的新串 SubString(&Sub,S,pos,len)//求S中pos起长度为len的子串…… Index(S,T,pos)//返回子串T在pos之后的位置Replace(&S,T,V)//用子串V替换子串T }ADTSting串的抽象数据类型定义(参见教材P71)最小操作子集设s=’IAMASTUDENT’,t=’GOOD’,q=’WORKER’。求:练****StrLength(s)=StrLength(t)=SubString(s,8,7)=SubString(t,2,1)=Index(s,‘A’)=Index(s,t)=Replace(s,‘STUDENT’,q)=144‘STUDENT’‘O’30(s中没有t!)’IAMAWORKER’再问:Concat(SubString(s,6,2),Concat(t,SubString(s,7,8)))=?‘AGOODSTUDENT’ 串的表示和实现定长顺序存储表示——用一组地址连续的存储单元存储串值的字符序列。堆分配存储表示——用一组地址连续的存储单元存储串值的字符序列,但存储空间是在程序执行过程中动态分配而得。串的块链存储表示——链式方式存储首先强调:串与线性表的运算有所不同,是以“串的整体”作为操作对象,例如查找某子串,在主串某位置上插入一个子串等。串有三种机内表示方法:: 用一组连续的存储单元来存放串,直接使用定长的字符数组来定义,数组的上界预先给出,故称为静态存储分配。例如:#defineMaxstrlen255//用户可用的最大串长typedefunsignedcharSString[Maxstrlen+1];SStrings;//s是一个可容纳255个字符的顺序串。注:一般用SString[0]来存放串长信息;C语言约定在串尾加结束符‘\0’,以利操作加速,但不计入串长;若字符串超过Maxstrlen则自动截断(因为静态数组存不进去)。实现方式:参见教材P73编程两例,两串连接和求子串1)串连接Concat(&T,S1,S2)StatusConcat(sstring&T,sstringS1,sstringS2){if(S1[0]+S2[0]<=M