数据结构-4.3.串的存储结构

一.串的顺序存储:

1.静态数组会由系统自动回收;动态数组需要手动回收;
2.优点:随机存取,可以立即找到所需的字符;缺点:插入和删除较麻烦;
3.串的顺序存储方案:
对于方案二:如果ch[0]存储字符串长度,会导致字符串长度限制在0到255,因为ch[0]位置是一个字符型,占1B即8bit;
对于方案三:额外设置一个变量记录长度,从头开始遍历,每找到一个字符,长度加一,当到\0时,停止遍历,得出字
符串长度(如果经常要用到字符串长度的话,方案三的效率会低很多);
对于方案四:ch[0]不存任何内容,从ch[1]开始存,使得字符的位序和数组下标相同,在最后一个位置记录字符串长度
Length;

二.串的链式存储:

1.存字符的每个结点如果只存1个字符(1个字符占1B即有效内容占1B),会导致存储密度低,因为指向下一个结点的指针
占了4B,该指针在实际开发中没什么用,因此导致存储密度低->为了解决这一问题,可以在结点中定义字符数组,字
符数组长度定义的大一些,就会使得一个结点存的字符变多,有效内容也就相对指针而言变多了,最终存储密度提高;
2.如果在最后一个结点中存不满,可以用特殊的字符如#或者\0填充进去;
3.串的链式存储的优点:增和删较方便;缺点:不具备随机存取的特性。
三.基本操作的实现:
注:用方案四来顺序存储串,字符下标从1开始,与位序一致

1.求字串:
pos+len-1代表从第pos个字符起长度为len的子串,因为长度为len的子串实际用一个len就可以表示,但这时需要一个pos来表示它的位置,为了结果仍为len,就需要减1(相当于减去pos占的那一个)即pos+len-1,子串的长度最大为主串的长度,因此pos+len-1必须不大于串的长度;
从第pos个字符起长度为len的子串中第一个字符的索引为pos,最后一个字符的索引为pos+len-1,因为从第pos个字符起,需要长度为len的子串就pos+len,但实际pos也占了一个位置,此时长度就是len+1,为了使得结果是长度为len,就需要减一即pos+len-1;

2.比较两个串的大小:

3.定位要找的子串在主串中的位置:
如果在主串中无法找到要找的子串,则返回0,因为定位操作的函数的返回值代表要找的子串的第一个字符在主串中的位
置,主串中0不存任何数据,返回0相当于返回一个不存在的位置
定位操作的思路:可以从主串中依次取出与要找的子串长度相同的子串,再与要找的子串比较,此时取主串的子串是这样
的:第一次从主串的第一个位置开始取,第二次从主串的第二个位置开始取,以此类推;

注:1.StrLength是求串长度的函数,i表示从第一个字符开始找,i为0处不存数据。
2.以上述图片为例,n是主串S的长度,m是要找的子串T的长度,主串S的长度为7,要找的子串T的长度为3,按照上
述方法依次找到主串S中第5个位置的字符即可,因为此时再往后子串T的长度即3就已经到了S的最后一个位置,就无
需再往后找了,因此循环到n-m+1就行了,思路:可以逆向来推导,由于下标从1开始,因此S中最后一个字符在第n
个位置上,n-m似乎是可以停止循环的位置(主串S的长度减去要找的子串T的长度),但实际上这只是个差,做差后实
际是停止循环的前一个位置上,因此要加一,所以停止循环的位置为n-m+1,以上述图为例:n=7,m=3,在主串S中的第
5个位置就可以停止循环即7-3+1也就是n-m+1。
四.总结:

相关文章:
数据结构-4.3.串的存储结构
一.串的顺序存储: 1.静态数组会由系统自动回收;动态数组需要手动回收; 2.优点:随机存取,可以立即找到所需的字符;缺点:插入和删除较麻烦; 3.串的顺序存储方案: 对于方…...
LeetCode讲解篇之34. 在排序数组中查找元素的第一个和最后一个位置
文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 这题让我们求目标值的左边界和右边界,我们可以采用二分查找搜索有序数组内大于等于目标值的最左边的下标 然后我们只需要在有序数组查找一下大于等于target的最左边下标 如果该下标越界或者下标对应…...
Linux自动化构建工具Make/Makefile
make是一个命令 makefile是一个文件 touch 创建并用vim打开makefile 写入依赖对象和依赖方法 mycode是目标文件 第二行数依赖方法 以tab键开头 make makefile原理 makefile中写的是依赖关系和依赖方法 clean英语清理文件 后不用加源文件。.PHONY定义clean是伪目标。 make只…...
自动驾驶系列—智能驾驶中的“换挡革命”:线控换挡技术详解
🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…...
.mallox勒索病毒肆虐:了解它的危害与防范措施
引言 在数字化时代,随着信息技术的飞速发展,网络空间的安全问题日益凸显。其中,勒索病毒作为一种新型的恶意软件,以其独特的加密方式和勒索行为,成为了网络安全领域的一大威胁。近年来,.mallox勒索病毒以其…...
如何使用ssm实现基于Java的民宿预订管理系统的设计与实现
TOC ssm773基于Java的民宿预订管理系统的设计与实现jsp 绪论 1.1课题研究背景意义 随着科技的发展,计算机的应用,人们的生活方方面面都和互联网密不可分。计算机的普及使得人们的生活更加方便快捷,网络也遍及到我们生活的每个角落&#x…...
光伏组件模型模板在SketchUp中如何完成成模数化设计?
选中模板组件,点击左侧工具栏中移动工具,按住Ctrl再依次点击组件起始点和终点,完成组件复制,输入需要复制的组件数量(*n)后回车,即可完成模数化设计。 选中模组的多块模型右键进行创建组件或群…...
常用组件详解(十):保存与加载模型、检查点机制的使用
文章目录 1.保存、加载模型2.torch.nn.Module.state_dict()2.1基本使用2.2保存和加载状态字典 3.创建Checkpoint3.1基本使用3.2完整案例 1.保存、加载模型 torch.save()用于保存一个序列化对象到磁盘上,该序列化对象可以是任何类型的对象,包括模型、张量…...
基于SpringBoot+Vue+MySQL的在线学习交流平台
系统展示 用户前台界面 管理员后台界面 系统背景 随着互联网技术的飞速发展,在线学习已成为现代教育的重要组成部分。传统的面对面教学方式已无法满足广大学习者的需求,特别是在时间、地点上受限的学习者。因此,构建一个基于SpringBoot、Vue.…...
前端开发在AI时代如何保持核心竞争力
随着人工智能(AI)技术的迅猛发展,前端开发领域正经历着前所未有的变革。AI辅助开发工具、自动化测试框架、智能代码补全等技术的出现,极大地提高了开发效率,同时也对前端开发人员的技能和角色提出了新的要求。在这个背…...
ffmpeg面向对象——拉流协议匹配机制探索
目录 1.URLProtocol类2.协议匹配的核心接口3. URLContext类4. 综合调用流程图5.rtsp拉流协议匹配流程图及对象图5.1 rtsp拉流协议调用流程图5.2 rtsp拉流协议对象图 6.本地文件调用流程图及对象图6.1 本地文件调用流程图6.2 本地文件对象图 7.内存数据调用流程图及对象图7.1 内…...
R语言绘制柱状图
柱状图是一种数据可视化工具。由 x 轴和 y 轴构成,x 轴表示类别,y 轴为数据数值。以矩形柱子展示数据大小,便于直观比较不同类别数据差异及了解分布。广泛应用于销售分析、统计、项目管理、科学研究等领域。可定制颜色、宽度等属性࿰…...
GNU/Linux - tarball文件介绍介绍
Linux 中的 tarball 文件是将多个文件和目录归档到一个文件中的常用方法,通常用于备份、分发或打包目的。术语 “tarball ”来源于 “tar”(磁带归档的缩写)命令的使用,该命令最初设计用于将数据写入磁带等顺序存储设备。如今&…...
AppointmentController
目录 1、 AppointmentController 1.1、 删除预约单据信息 1.2、 反审核预约单 1.3、 SelectToMainten AppointmentController using QXQPS.Models; using QXQPS.Vo; using System; using System.Collections; using System.Collections.Generic; using System.L…...
网站建设完成后,切勿让公司官网成为摆设
在当今这个数字化时代,公司官网已经成为企业展示形象、传递信息、吸引客户的重要平台。然而,许多企业在网站建设完成后,往往忽视了对官网的持续运营和维护,导致官网逐渐沦为摆设,无法发挥其应有的作用。为了确保公司官…...
独孤思维:闲得蛋疼才去做副业
独孤现实中玩的要好的朋友。 他们都只在自己的社交圈,工作圈链接。 没有人知道,副业可以这么玩。 所以他们很好奇,问我,独孤,你最开始是怎么知道这些副业的? 其实,独孤最开始接触副业&#…...
vulnhub靶场之hackablell
一.环境搭建 1.靶场描述 difficulty: easy This works better with VirtualBox rather than VMware 2.靶场下载 https://download.vulnhub.com/hackable/hackableII.ova 3.靶场启动 二.信息收集 1.寻找靶场的真实ip nmap -SP 192.168.246.0/24 arp-scan -l 根据上面两个…...
《浔川社团官方通报 —— 为何明确 10 月 2 日上线的浔川 AI 翻译 v3.0 再次被告知延迟上线》
《浔川社团官方通报 —— 为何明确 10 月 2 日上线的浔川 AI 翻译 v3.0 再次被告知延迟上线》 各位关注浔川社团的朋友们: 大家好!首先,我们要向一直期待浔川 AI 翻译 v3.0 上线的朋友们致以最诚挚的歉意。原定于 10 月 2 日上线的浔川 AI 翻…...
加密与安全_HOTP一次性密码生成算法
文章目录 HOTP 的基础原理HOTP 的工作流程HOTP 的应用场景HOTP 的安全性安全性增强措施Code生成HOTP可配置项校验HOTP可拓展功能计数器(counter)计数器在客户端和服务端的作用计数器的同步机制客户端和服务端中的计数器表现服务端如何处理计数器不同步计…...
ResNet18果蔬图像识别分类
关于深度实战社区 我们是一个深度学习领域的独立工作室。团队成员有:中科大硕士、纽约大学硕士、浙江大学硕士、华东理工博士等,曾在腾讯、百度、德勤等担任算法工程师/产品经理。全网20多万粉丝,拥有2篇国家级人工智能发明专利。 社区特色…...
接口调用失败与重试策略详解
接口调用失败与重试策略详解 远程调用(HTTP/RPC、消息投递等)失败时,重试可提高对瞬时故障的容忍度;若设计不当,也会放大负载、拉长尾延迟或造成重复副作用。本文归纳常见退避与重试策略、与幂等/熔断/队列的配合&…...
如何快速配置Windows三指拖动功能:ThreeFingerDragOnWindows完整指南
如何快速配置Windows三指拖动功能:ThreeFingerDragOnWindows完整指南 【免费下载链接】ThreeFingersDragOnWindows Enables macOS-style three-finger dragging functionality on Windows Precision touchpads. 项目地址: https://gitcode.com/gh_mirrors/th/Thre…...
STM32CubeMX项目实战:从新建工程到驱动LED,一步步教你玩转HAL库(附代码解析)
STM32CubeMX实战指南:HAL库驱动LED的底层逻辑与工程化思维 第一次打开STM32CubeMX时,那种面对密密麻麻的配置选项却不知从何下手的焦虑感,相信每位嵌入式开发者都记忆犹新。不同于传统寄存器操作的直白,HAL库和图形化配置工具带来…...
效率飙升:借鉴Cherry Studio思路,用快马平台自动化你的前端工作流
最近在尝试优化前端开发流程时,发现Cherry Studio的工作流理念特别值得借鉴——把重复性工作交给工具,让开发者专注创意和核心逻辑。刚好体验了InsCode(快马)平台的AI辅助开发功能,发现它能完美实现这种高效工作模式。下面分享我的实践心得&a…...
SimCLR揭秘:自监督学习中的对比学习艺术
1. 自监督学习与对比学习的革命性结合 第一次听说SimCLR这个名词时,我正被海量无标注图像数据的处理问题困扰。传统监督学习需要大量人工标注,成本高得吓人。而SimCLR的出现,就像给计算机视觉领域投下了一颗震撼弹——原来模型可以自己教自己…...
用STM32F103C8T6做个宠物喂食器:从电路图到代码的保姆级DIY教程
用STM32F103C8T6打造智能宠物喂食器:从硬件搭建到软件调优全流程解析 养宠物的朋友都知道,定时定量喂食对宠物健康至关重要。今天我们就来手把手教你如何用STM32F103C8T6单片机打造一个智能宠物喂食器,不仅能定时投喂,还能识别不…...
Pwndbg调试器实战指南:5大核心场景下的高效调试配置策略
Pwndbg调试器实战指南:5大核心场景下的高效调试配置策略 【免费下载链接】pwndbg Exploit Development and Reverse Engineering with GDB & LLDB Made Easy 项目地址: https://gitcode.com/GitHub_Trending/pw/pwndbg Pwndbg是专为漏洞利用开发和逆向工…...
别再死记硬背MIPI状态转换图了!用Python脚本模拟单向/双向Data Lane状态机
用Python脚本动态解析MIPI状态机:从理论到实践的可视化之旅 每次打开MIPI协议文档看到那些密密麻麻的状态转换图,是不是感觉像在解读外星密码?作为嵌入式开发者,我们需要的不是死记硬背那些LP-11→LP-01的箭头指向,而…...
厂房钢结构工程:从设计、制造到安装验收的关键要点全解析
一、什么是厂房钢结构工程,为什么越来越常见?厂房钢结构工程,简单说,就是以钢柱、钢梁、檩条、支撑体系、屋面系统和围护系统为主体,完成工业厂房、仓储车间、物流中心、生产车间及配套功能区建设的一类工程。相比传统…...
如何快速上手tuic:从零开始的安装与配置教程
如何快速上手tuic:从零开始的安装与配置教程 【免费下载链接】tuic 项目地址: https://gitcode.com/gh_mirrors/tu/tuic tuic是一款高效的GitHub加速工具,能够帮助用户解决GitHub访问速度慢、连接不稳定等问题,让开发者更流畅地获取G…...
