数据结构学习 --4 串

news2024/12/30 2:56:03

数据结构学习 --1 绪论
数据结构学习 --2 线性表
数据结构学习 --3 栈,队列和数组
数据结构学习 --4 串
数据结构学习 --5 树和二叉树
数据结构学习 --6 图
数据结构学习 --7 查找
数据结构学习 --8 排序

本人学习记录使用 希望对大家帮助 不当之处希望大家帮忙纠正

数据结构学习 --4 串

在这里插入图片描述


文章目录

  • 4.1 串的定义和实现
    • 4.1.1 串的定义
    • 4.1.2 串的存储结构
    • 4.1.3 串的基本操作
  • 4.2 串的模式匹配
    • 4.2.1 简单的模式匹配算法
    • 4.2.2 串的模式匹配算法KMP 算法


4.1 串的定义和实现

字符串简称串,计算机上非数值处理的对象基本都是字符串数据。我们常见的信息检索系统(如搜索引擎) 文本编辑程序 (如 Word)问答系统、自然语言翻译系统等, 都是符数据作为处理对象的。

4.1.1 串的定义

串(string) 是有零个或多个字符组成的有限序列
一般记为

S='A1,A2,A3,AN'(N>=0);

其中,S 是串名,单引号括起来的字符序列是串的值,a1可以是字母 数字 或者其他字符;串中字符的个数n 称为串的长度。n=0时的串称为空串

串的逻辑结构和线性表极为相似,区别仅在于串的数据对象限定为字符集。在基本操作上,串和线性表有很大差别。线性表的基本操作主要以单个元素作为操作对象,如查找、插入或删除某个元素等:而串的基本操作通常以子串作为操作对象,如查找、插入或删除一个子串等

4.1.2 串的存储结构

  1. 定长顺序存储表示
    类似于线性表的顺序存储结构,用一组地址连续的存储单元存储串值的字符序列。在串的定长顺序存储结构中,为每个串变量分配一个固定长度的存储区,即定长数组。
#define MAXLEN 255 //预定义最大串长为255
typedef struct{ //每个分量存储一个字符
	char ch[MAXLEN]; 
	int length;//串的实际长度
}SString;

串的实际长度只能小于或等于
MAXLEN,超过预定义长度的串值会被舍去,称为截断。串长有两种表示方法:一是如上述定义描述的那样,用一个额外的变量 len来存放串的长度;二是在串值后面加一个不计入串长的结束标记字符“\0”,此时的串长为隐含值。
在一些串的操作(如插入、联接等)中,若串值序列的长度超过上界MAXLEN,约定用“截断”法处理,要克服这种弊端,只能不限定串长的最大长度,即采用动态分配的方式。

  1. 堆分配存储表示
    堆分配存储表示仍然以一组地址连续的存储单元存放串值的字符序列,但它们的存储空间是在程序执行过程中动态分配得到的。
typedef struct{
	char *ch; //按串长分配存储区,ch 指向串的基地址
	int length; //串的长度
}HString;

在C语言中,存在一个称之为“堆”的自由存储区,并用malloc()和free()函数来完成动态存储管理。利用malloc()为每个新产生的串分配一块实际串长所需的存储空间,若分配成功,则返回一个指向起始地址的指针,作为串的基地址,这个串由
ch 指针来指示;若分配失败,则返回NULL。已分配的空间可用free()释放掉。
上述两种存储表示通常为高级程序设计语言所采用。块链存储表示仅做简单介绍。

  1. 块链存储表示
    类似于线性表的链式存储结构,也可采用链表方式存储串值。由于串的特殊性(每个元素只有一个字符),在具体实现时,每个结点既可以存放一个字符,也可以存放多个字符。每个结点称为块,整个链表称为块链结构

4.1.3 串的基本操作

StrAssign(&T,chars) :赋值操作。把串赋值为chars
StrCopy(&T,S) :赋值操作,由串S复制得到串T。
StrEmpty(S) :判空操作。若S为空串返回 true ,否则false
StrCompare(S,T) :比较操作。若S>T ,则返回值>0,若S=T,则返回值=0若S<T,则返回值<0;
Strlength(S) 求串长。返回串S的元素个数
Substring(&Sub,S,pos,len):求子串。用Sub 返串s的第pos 个字符起长度为len的子串。
Concat(&T,S1,S2):串联接。用T返回由S1和S2联接而成的新串。Index(S,T):定位操作。若主串 s 中存在与串T值相同的子串,则返回它在主串 S中第一次出现的位置;否则函数值为 0clearString(&S):清空操作。将s清为空串
DestroyString(&S):销毁串。将串S销毁

不同的高级语言对串的基本操作集可以有不同的定义方法。在上述定义的操作中,串赋值strAssign串比较StrCompare、求串长StrLength 串联接Concat 及求子串 Substring五种操作构成串类型的最小操作子集,即这些操作不可能利用其他串操作来实现:反之,其他串操作(除串清除ClearString和串销毁 Destroystring外)均可在该最小操作子集上实现。

4.2 串的模式匹配

4.2.1 简单的模式匹配算法

子串的定位操作通常称为串的模式匹配,它求的是子串(常称模式串)在主串中的位置。这里采用定长顺序存储结构,给出一种不依赖于其他串操作的爆破匹配算法。

int Index(SString S,SString T){
	int i=1,j=1;
	while(i<S.length && j< T.length){
		if(S.ch[i] == T.ch[j]){
			++i;++j;  //继续比较后继字符
		}else{
			i = i-j+2; j=1 //指针后退重新开始匹配
		}
		if(j>T.length) return i-T.length;
		else return 0;
	} 
}

4.2.2 串的模式匹配算法KMP 算法

  1. 字符串的前缀 后缀 和部分匹配值

要了解子串的结构,首先要弄清楚几个概念:前缀、后缀和部分匹配值。前缀指除最后一个字符以外,字符串的所有头部子串;后缀指除第一个字符外,字符串的所有尾部子串;部分匹配值则为字符串的前缀和后缀的最长相等前后缀长度。

void get_nextval(SString T,int nextval[]){
		int i=1,j=0;
		nextval[1]=0;
		while(i<T.length)(
			if(j==0 || T.ch[i]==T.ch[j]){
				++i,++j;
				if(T.ch[i]!=T.ch[j]) nextval[i]=j;
				else  nextval[i]=nextval[j];

			}
			else j=nextval[j];
		}
}		

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/949788.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二极管:常用二极管封装

常用二极管封装 1、DO-41 2、DO-201AD 3、DO-35 4、LL-34 5、DO-214AC (SMA) 6、SMB

电脑数据丢失如何恢复?最常见的2种数据恢复方法!

大家使用电脑的时候是否有发生过不小心删除数据&#xff0c;或者数据不明丢失的情况呢&#xff1f;相信九成都是有的&#xff0c;那么当你的数据不小心删除或是丢失的话&#xff0c;有没有电脑数据恢复方法&#xff1f;其实很多人当自己电脑的数据丢失后&#xff0c;如果不是很…

一直傻傻分不清 count(*) count(id) count(1) 这次终于整明白了

COUNT(*)、COUNT(id) 和 COUNT(1) 是用于计算行数的 SQL 聚合函数&#xff0c;它们在某些方面有一些区别。 - COUNT(*)&#xff1a;COUNT(*) 是一种特殊的语法&#xff0c;它返回结果集中的行数&#xff0c;不考虑任何列的值。它会将表中的每一行都计数&#xff0c;包括含有NU…

ToBeWritten之威胁情报

也许每个人出生的时候都以为这世界都是为他一个人而存在的&#xff0c;当他发现自己错的时候&#xff0c;他便开始长大 少走了弯路&#xff0c;也就错过了风景&#xff0c;无论如何&#xff0c;感谢经历 转移发布平台通知&#xff1a;将不再在CSDN博客发布新文章&#xff0c;敬…

【LeetCode】剑指 Offer <二刷>(1)

目录 前言&#xff1a; 题目&#xff1a;剑指 Offer 03. 数组中重复的数字 - 力扣&#xff08;LeetCode&#xff09; 题目的接口&#xff1a; 解题思路&#xff1a; 代码&#xff1a; 过啦&#xff01;&#xff01;&#xff01; 写在最后&#xff1a; 前言&#xff1a; …

Charles调试请求

问题 需要调试特定的一个请求。 解决 选中调试 选中一个请求&#xff0c;右键菜单选中调试即可。 启用调试模式 勾选顶部控制按钮&#xff0c;启用调试模式&#xff0c;右下角会出现调试启用状态。 调试请求管理 通过顶部proxy➡️Breakpoint Settings…菜单&#xf…

企业诊断屋:在线小说企业如何用A/B测试赋能业务

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 近两年来&#xff0c;在线小说领域业务发展“降速”&#xff0c;相较于几年前的快速扩张&#xff0c;2022年后国内在线小说企业步入瓶颈期。但与此同&#xff0c;新…

云端地球 | 在线云端建模,让建筑设计更高效

三维模型制作是建筑设计的重要环节&#xff0c;但人工建模需要耗费大量的时间和精力。随着计算机视觉和倾斜摄影测量技术的发展&#xff0c;实景三维模型的应用日益广泛&#xff0c;利用三维重建技术实现可视化、数字化和信息化转变&#xff0c;已逐渐成为建筑行业的共识。 陕西…

【二等奖方案】大规模金融图数据中异常风险行为模式挖掘赛题「Aries」解题思路

第十届CCF大数据与计算智能大赛&#xff08;2022 CCF BDCI&#xff09;已圆满结束&#xff0c;大赛官方竞赛平台DataFountain&#xff08;简称DF平台&#xff09;正在陆续释出各赛题获奖队伍的方案思路&#xff0c;欢迎广大数据科学家交流讨论。 本方案为【大规模金融图数据中…

学生管理系统VueAjax版本

学生管理系统VueAjax版本 使用Vue和Ajax对原有学生管理系统进行优化 1.准备工作 创建AjaxResult类&#xff0c;对Ajax回传的信息封装在对象中 package com.grg.Result;/*** Author Grg* Date 2023/8/30 8:51* PackageName:com.grg.Result* ClassName: AjaxResult* Descript…

打造完美直播:深入解析人脸美颜SDK的算法与特性

在如今数字化的时代&#xff0c;直播已经成为了人们与世界互动的重要方式之一。而在众多直播平台中&#xff0c;吸引观众并提供高质量的视觉体验成为了至关重要的任务。其中&#xff0c;人脸美颜技术的应用对于提升直播质量和观众体验起到了不可忽视的作用。本文将深入解析人脸…

正中优配:h股是什么意思

跟着我国世界化程度的日益进步&#xff0c;越来越多的人开端瞩目“H股”&#xff0c;它到底是什么意思呢&#xff1f; H股&#xff08;H share&#xff09;是指在香港上市的我国企业股票&#xff0c;它是我国企业参与世界本钱商场的一种方法。在1990年代初期&#xff0c;我国为…

在CSDN的第128天:写博客是我对抗焦虑的工具

目录 机缘 收获 日常 成就 憧憬 致各位 机缘 机缘&#xff0c;我在CSDN应该有两个比较大的机缘 第一个机缘是在大一上的时候&#xff0c;加入了实验室的朋友们都在写博客&#xff0c;而我因为没加入实验室&#xff0c;一度非常焦虑。当时我很害怕&#xff0c;我害怕我自己…

月薪16K,从房地产转行5G网络优化工程师,他说:等风来,不如追风去!

杨绛先生曾说&#xff1a;“无论你上到人生的哪一层台阶&#xff0c;阶下有人仰望你&#xff0c;阶上有人俯视你&#xff0c;抬头自卑&#xff0c;低头自得&#xff1b;唯有平视&#xff0c;才能看见最真实的自己。” 李同学&#xff0c;湖北的某四线小城市&#xff0c;29岁&am…

【HSPCIE仿真】输入网表文件(5)基本仿真输出

仿真输出 1. 概述1.1 输出变量1.2 输出分析类型 2. 显示仿真结果2.1 .print语句基本语法示例 2.2 .probe 语句基本语法示例 2.3 子电路的输出2.4 打印控制选项.option probe.option post.option list.option ingold 2.5 .model_info打印模型参数 3. 仿真输出参数的选择3.1 直流…

如何跟进好客户,维护客户?

万事开头难&#xff0c;获取了客户资源后&#xff0c;必须进行有效的跟进和维护才有机会获得赢单。 客户跟进维护过程中的主要困境 基于以上困境&#xff0c;我向公司销售大佬取经&#xff0c;总结了以下几个适合销售小白的销售方法论&#xff1a; 本文所用工具&#xff1a;ht…

哈佛商学院教授:每个老板使用ChatGPT之类AI工具的理由

哈佛商学院教授Karim Lakhani表示&#xff0c;每个老板都应该使用生成式人工智能工具&#xff0c;生成式AI为老板提供了一种更高效的工作方式&#xff0c;在提高生产力、提高规模、与客户沟通以及促进销售、社交媒体内容更新和新产品开发等方面都有积极意义。 Karim Lakhani表…

分享一个影像切瓦片工具

当我们手上有很多无人机拍摄的影像&#xff0c;想切片后发布到内网可以用什么工具切片&#xff1f;亦或是自己制作的地图有没有什么工具可以切片后进行发布&#xff1f;想要解决这些问题&#xff0c;你可以好好看看这篇文章&#xff0c;本文将为你提供一种简单的切片方法&#…

信息安全——数字签名

一、数字签名背景 假定A发送一条包含认证码的消息给B&#xff0c;他们之间仍然可能存在争议&#xff0c;例如A可以否认发过该消息&#xff0c;B无法证明A确实发了该消息。另外B也可以伪造一个不同的消息&#xff0c;但声称是从A收到的。也就是说&#xff0c;虽然保证了信息的完…

WordPress(3)会员插件安装

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、服务器中上传插件二、使用步骤1.启动插件前言 提示:会员插件的安装不能在网站后台插件中心中直接安装原因我还没有排查 原因:会导致网站停止运行 一、服务器中上传插件 二、使用步骤 …