`
韩悠悠
  • 浏览: 841820 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

数据结构5

    博客分类:
  • java
 
阅读更多

串的抽象数据类型定义

ADT String{

数据对象:D={a1|ai属于CharacterSet,i=1,2,.....n,n>=0}

数据关系:R1={<ai-1,ai>|ai-1,ai属于D,i=2........n}

}

 

串的基本操作

StrAssign(&T,chars)

初始条件:chars是字符串常量

操作结果:把chars赋为T的值

 

StrCopy(&T,s)

初始条件:串S存在

操作结果:由串S复制得串T

 

StrLength(S)

初始条件:串S存在。

操作结果:返回S的元素个数,称为串的长度

 

StrEmpty(S)

初始条件:串S存在。

操作结果:若S为空串,则返回TRUE,否则返回FALSE

 

StrCompare(S,T)

初始条件:串ST存在。

操作结果:若S>T,则返回值>0

S=T,咋返回值=0

S<T,则返回值<0

 

Concat(&T,S1,S2)

初始条件:串S1S2存在。

操作结果;用T返回由S1S2连接而成的新串。

 

SubString(&Sub,S,pos,len)

初始条件:串S存在,1<=pos<=StrLength(S)0<=len<=StrLength(S)-pos+1

操作结果:用Ssub返回串S的第pos个字符起长度为len的子串

 

Index(S,T,pos)

初始条件:串ST存在,T是非空串,1<=pos<=StrLength(S)

操作结果:若主串S中存在和串T值相同的子串,则返回它在主串S中第pos个字符之后第一次出现的位置;否则函数值为0

 

Replace(&S,T,V)

初始条件:串S,TV存在,T是非空串

操作结果:用V替换主串S中出现的所有与T相等的不重叠的子串。

 

StrInsert(&S,pos,T)

初始条件:串ST存在,1<=pos<=StrLength(S)+1

操作结果:在串S的第pos个字符之前插入串T

 

StrDelete(&S,pos,len)

初始条件:串S存在,1<=pos<=StrLength(S)-len+1

操作结果:从串S中删除第pos个字符起长度为len的子串。

 

 

串的逻辑结构和线性表极为相似,区别仅在于串的数据对象约束为字符集,然而,串的基本操作和线性表有很大差别,在线性表的基本操作中,大多以

“单个元素”作为操作对象,如:线性表中查找某个元素,求某个元素,在某个位置上插入一个元素和删除一个元素灯。而在串的基本操作中,通常以

”串的整体“作为操作对象,如:在串中查找某个子串,求取一个子串,在串的某个为孩子插入一个子串以及删除一个子串等。

 

串的表示和实现

如果在程序设计语言中,串只是作为输入或输出常量出现,则只需存储此串的串值,即字符序列即可,但在大多数非数值处理的程序中,串也以变量的形

 

式出现。

 

串的三种存储表示

1、串的定长顺序存储表示

2、串的堆分配存储表示

3、串的块链存储表示

 

一、串的定长顺序存储表示

#define MAXSTRLEN 255

typedf unsigned char String

串的实际长度可在这个给予定义长度的范围内随意设定,超过了给予定长长度的串值则被舍去,称为”截断“

 

二、串的堆分配存储表示

typedef struct{

         char *ch;

         //若是非空串,则按串长度分配存储区,否则chNULL

         int length;//串长度

}

 

通常,C语言中提供的串类型就是以这种存储方式实现的,系统利用函数malloc()free()进行串值空间的动态管理,为每一个新产生的串分配一个存储区

 

,称串值共享的存储空间为“堆”,C语言中的串以一个空字符为结束符,串长是一个隐含值。

 

这类串操作的实现算法为:

先为新生成的串分配一个存储空间,然后进行串值的复制。

 

三、串的块链存储表示

#define CHUNKSIZE 80//可由用户定义的块大小

typedef struct Chunk{ //结点结构

         char ch[CHUNKSIZE];

         struct Chunk *netx;

}

typedef struct{//串的链表结构

Chunk *head,*tail; //串的头和尾指针

int curlen; //串的当前长度

}

 

串值也可用链表来存储,由于串的数据元素是一个字符,它只有8位二进制数,因此用链表存储时,通常一个结点中存放的不是一个字符,而是一个子串,

 

例如:在编辑系统中,整个文本编辑区可用看成一个串,每一行是一个子串,构成一个结点,即:同一行的串用定长结构(80个字符),行和行之间用指

 

针相链接。

 

串的模式匹配算法

这是串的一种重要操作,很多软件,若有“编辑”菜单项的话,则其中必有“查找”子菜单项。

首先,回忆一下串匹配(查找)的定义:

INDEX(s,t,pos)

初始条件:串ST存在,T是非空串,1<=pos<=StrLength(S)

操作结果:若主串S中存在和串T值相同的子串,则返回它在主串S中第pos个字符之后第一次出现的位置;否则函数值为0

 

下面讨论以定长顺序结构表示串时的几种算法

一、简单算法

二、首位匹配算法

三、KMP算法

简单算法:

int Index(SString S,SString T,int pos){

         i=pos; j=1;

         while(i<=S[0]&&j<=T[0]}{

                   if(S[i]==T[j]{

                            ++i;++j;

                   }else{

                            i=i-j+2;

                            j=1;

                   }

         }

         if(j>T[0]) return i-T[0];

         else return 0;

}

 

 

二、首位匹配算法

先比较模式串的第一个字符,

再比较模式串的最后一个字符,

最后比较模式串中从第二个到第n-1个字符。

 

int Index_FL(SString S,SString T,int pos){

         sLength=S[0],tLength=T[0];

         i = pos;

         patStartChar=T[1];

         patEndChar=T[tLength];

         while(i<=sLength=tLength+1){

                   if(S[i]!=patStartChar) i++;

                   else if(S[i+tLength-1]!=patEndChar)++i;

                   else{

                            k=1;j=2;

                            while(j<tLength&&S[i+k]=T[j]){

                                     ++k;++j;

                            }

                            if(j==tLength)   return i;

                            else ++i;

                   }

         }

}

 

 

分享到:
评论

相关推荐

    2024年机器人大作业代码

    2024年机器人大作业代码

    学生信息管理系统,idea-mysql小项目,记录一下

    这是mysql文件直接导入就行了,可以查一下相关指令例如:mysql -u root -p mydb_copy < mydb.sql就好了,这里就不多赘述了

    搜索关键字飞入飞出效果.zip

    Android 毕业设计,Android 毕业设计,小Android 程设计,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。

    基于ssm的团员管理系统源代码(完整前后端+mysql+说明文档+LW).zip

    管理员 管理员信息管理 学院管理 辅导员管理 学生信息管理 公告信息 辅导员 个人资料修改 团员信息管理 优秀团员管理 团费缴纳管理 团员活动管理(主题,内容,参与人数,日期) 团员活的报名 学生 个人资料修改 入团申请管理(提交申请,申请结果查看) 团员活动查看(只能查看,不能修改,活动报名) 团员活动报名 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3 服务器:tomcat7

    基于springboot图书管理系统源码+数据库+详细使用说明(高分毕设项目)

    基于springboot图书管理系统源码+数据库+详细使用说明(高分毕设项目),个人大四的毕业设计、经导师指导并认可通过的高分设计项目,评审分99分,代码完整确保可以运行,小白也可以亲自搞定,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 基于springboot图书管理系统源码+数据库+详细使用说明(高分毕设项目)基于springboot图书管理系统源码+数据库+详细使用说明(高分毕设项目)基于springboot图书管理系统源码+数据库+详细使用说明(高分毕设项目)基于springboot图书管理系统源码+数据库+详细使用说明(高分毕设项目)基于springboot图书管理系统源码+数据库+详细使用说明(高分毕设项目)基于springboot图书管理系统源码+数据库+详细使用说明(高分毕设项目)基于springboot图书管理系统源码+数据库+详细使用说明(高分毕设项目)个人大四的毕业设计、经导师指导并认可通过的高分设计项目,评审分99分,代码完整确保可以运行,小白也可以亲自搞定,主要针对计算机相关专业的正在做毕设的学生和需要。

    Python项目-自动办公-51 Excel_案例_把文件夹整理到Excel中.zip

    Python课程设计,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。

    汽车检测33-YOLO(v5至v9)数据集合集.rar

    汽车检测33-YOLO(v5至v9)数据集合集.rar多对象-V4 2023-03-12 9:33 PM ============================= *与您的团队在计算机视觉项目上合作 *收集和组织图像 *了解和搜索非结构化图像数据 *注释,创建数据集 *导出,训练和部署计算机视觉模型 *使用主动学习随着时间的推移改善数据集 对于最先进的计算机视觉培训笔记本,您可以与此数据集一起使用 该数据集包含4278张图像。 多对象以Yolo V5 Pytorch格式注释。 将以下预处理应用于每个图像: *调整大小为640x640(拉伸) 应用以下扩展来创建每个源图像的3个版本: 将以下转换应用于每个图像的边界框: *以下90度旋转之一的同等概率:无,顺时针,逆时针方向

    Python项目-自动办公-44 excel处理实例(二维表转一维表).zip

    Python课程设计,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。

    三亚市2005-2024年近20年历史气象数据下载

    三亚市2005-2024年近20年的历史气象数据,每3小时更新一次数据,参数包含气温、气压、降水量、云层、能见度、风向、湿度等,几万条数据

    公开整理-全国高校各专业及分方向研究生录取人数大数据(更新至2022年).zip

    详细介绍及样例数据:https://blog.csdn.net/T0620514/article/details/144542157

    javaweb音乐网系统-lw.zip

    项目包含前后台完整源码。 项目都经过严格调试,确保可以运行! 具体项目介绍可查看博主文章或私聊获取 助力学习实践,提升编程技能,快来获取这份宝贵的资源吧!

    Python项目-自动办公-08 用Python设置Word文档里表格的格式.zip

    Python课程设计,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。

    STM32F103通过WIFI接收配置信息修改BC260-NBIOT模块的目标IP和端口程序代码

    1、嵌入式物联网单片机项目开发实战。例程经过精心编写,简单好用。 2、代码使用KEIL 标准库开发,当前在STM32F103运行,如果是STM32F103其他型号芯片,依然适用,请自行更改KEIL芯片型号以及FLASH容量即可。 3、软件下载时,请注意keil选择项是jlink还是stlink。 4、有偿指导v:wulianjishu666; 5、如果接入其他传感器,请查看发布的其他资料。 6、单片机与模块的接线,在代码当中均有定义,请自行对照。 7、若硬件差异,请根据自身情况调整代码,程序仅供参考学习。 8、代码有注释说明,请耐心阅读。

    瓶罐瓶子罐子检测75-YOLO(v5至v9)、COCO、CreateML、Darknet数据集合集.rar

    瓶罐瓶子罐子检测75-YOLO(v5至v9)、COCO、CreateML、Darknet数据集合集.rar街7级-V2 2023-04-28 11:45 PM ============================= *与您的团队在计算机视觉项目上合作 *收集和组织图像 *了解和搜索非结构化图像数据 *注释,创建数据集 *导出,训练和部署计算机视觉模型 *使用主动学习随着时间的推移改善数据集 对于最先进的计算机视觉培训笔记本,您可以与此数据集一起使用 该数据集包括8934张图像。 街道以可可格式注释。 将以下预处理应用于每个图像: *像素数据的自动取向(带有Exif-Arientation剥离) *调整大小为640x640(拉伸) 没有应用图像增强技术。

    基于ssm的高速公路收费系统源代码(完整前后端+mysql+说明文档+LW).zip

    管理员 管理员信息管理 负责人管理 员工信息管理 公告信息管理 小型车收费标准设置(元/每公里) 大卡车收费标准设置(元/吨公里) 收费信息统计,统计小车和卡车收费,按月统计 负责人 个人资料修改 公告查看 小车收费统计(某员工某月统计) 大卡车收费统计(某员工某月统计) 员工 个人资料修改 公告查看 小型车收费登记(车牌号,车辆照片,行使公里数,收费金额,收费日期,收费员,按公里数可以自动计算费用 收费金额=收费标准*公里数) 大卡车金额设置(每吨/元)(车牌号,车辆照片,行使公里数,吨,收费金额,收费日期,收费员, 收费金额=收费标准*吨*公里数 ) 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3 服务器:tomcat7

    【图像加密解密】基于matlab Logistic映射和线性反馈移位寄存器组合的图像加密解密【含Matlab源码 9866期】复现.zip

    Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    Python项目-实例-08 抖音表白.zip

    Python课程设计,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。

    桌球检测10-YOLO(v5至v9)、Darknet、Paligemma、TFRecord、VOC数据集合集.rar

    桌球检测10-YOLO(v5至v9)、Darknet、Paligemma、TFRecord、VOC数据集合集.rar大理石-V3版本 ============================= *与您的团队在计算机视觉项目上合作 *收集和组织图像 *了解和搜索非结构化图像数据 *注释,创建数据集 *导出,训练和部署计算机视觉模型 *使用主动学习随着时间的推移改善数据集 对于最先进的计算机视觉培训笔记本,您可以与此数据集一起使用 该数据集包括105张图像。 大理石以Yolo V3 Darknet格式注释。 将以下预处理应用于每个图像: 没有应用图像增强技术。

    基于java的华奥汽车销售集团网源码.zip

    项目包含前后台完整源码。 项目都经过严格调试,确保可以运行! 具体项目介绍可查看博主文章或私聊获取 助力学习实践,提升编程技能,快来获取这份宝贵的资源吧!

    喜来登五星酒店酒店数字客房管理系统.docx

    喜来登五星酒店酒店数字客房管理系统.docx

Global site tag (gtag.js) - Google Analytics