当前位置: 首页 > article >正文

数据结构-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是求主串长度的函数。

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。


四.总结:



http://www.kler.cn/news/328503.html

相关文章:

  • 深入理解网络通信: 长连接、短连接与WebSocket
  • Spring系列 AOP实现过程
  • 【PostgreSQL】入门篇——PostgreSQL 的历史、特点和优势
  • 开卷可扩展自动驾驶(OpenDriveLab)
  • express,MySQL 实现登录接口,如果用户未注册直接注册
  • 【Python】Uvicorn:Python 异步 ASGI 服务器详解
  • vue3 环境配置vue-i8n国际化
  • Linux高级IO之poll与epoll
  • 基于Springboot+微信小程序 的高校社团管理小程序(含源码+数据库+lw)
  • TypeScript 算法手册【插入排序】
  • 搜维尔科技:SenseGlove DK1触觉反馈手套,远程操作机器人任务,保证你工作时的安全
  • js无法获取执行的线程号(Thread ID)
  • 【Golang】关于Go语言中的包
  • 超分服务的分量保存
  • Gateway和VirtualService
  • 代码随想录算法训练营day44
  • PostgreSQL 数据库语法学习:深入理解 `JOIN` 操作
  • 【AI基础】pytorch lightning 基础学习
  • 【JavaEE初阶】深入解析死锁的产生和避免以及内存不可见问题
  • 药品识别与分类系统源码分享
  • 【Transformer】长距离依赖
  • 微信小程序中的 `<block>` 元素:高效渲染与结构清晰的利器
  • 初识C语言(五)
  • 鸿蒙开发(NEXT/API 12)【硬件(传感器开发)】传感器服务
  • Unity 2D RPG Kit 学习笔记
  • 滚雪球学Oracle[8.1讲]:高级主题与未来趋势
  • vite 快速入门指南
  • Flask+微信小程序实现Login+Profile
  • python-ds:Python 中的数据结构库(适用于面试的数据结构和算法合集)
  • 眼镜识别数据集类别和数量已经在文档中说明,训练集和验证集共2200,g是眼镜,ng是没有眼镜。