数据结构:串(定义,基本操作,存储结构)

目录

  • 1.串的定义
  • 2.串的基本操作
  • 3.字符集编码
  • 4.串的存储结构
    • 1.顺序存储
    • 2.链式存储

1.串的定义

串,即字符串( String)是由零个或多个字符组成的有限序列。
一般记为s = ‘a1a2……an’ (n ≥0)
其中,S是串名,单引号括起来的字符序列是串的值;
ai可以是字母、数字或其他字符;
串中字符的个数n称为串的长度
n = 0时的串称为空串,用 ∅ \emptyset 表示。

①子串:串中任意个连续的字符组成的子序列。
②主串:包含子串的串。
③字符在主串中的位置:字符在串中的序号。
④子串在主串中的位置:子串的第一个字符在主串中的位置。

串是一种特殊的线性表,数据元素之间呈线性关系。
串的数据对象限定为字符集(如中文字符、英文字符、数字字符、标点字符等)
串的基本操作,如增删改查等通常以子串为操作对象

2.串的基本操作

①StrAssign(&T,chars):赋值操作。把串T赋值为chars。
②StrCopy(&T,S):复制操作。由串S复制得到串T。
③StrEmpty(S):判空操作。若S为空串,则返回TRUE,否则返回FALSE。
④StrLength(S):求串长。返回串S的元素个数。
⑤ClearString(&S):清空操作。将S清为空串。
⑥DestroyString(&S):销毁串。将串S销毁(回收存储空间)。
⑦Concat(&T,S1,S2):串联接。用T返回由S1和S2联接而成的新串。
⑧SubString(&Sub,S,pos,len):求子串。用sub返回串S的第pos个字符起长度为len的子串。
⑨Index(S,T):定位操作。若主串S中存在与串T值相同的子串,则返回它在主串S中第一次出现的位置;否则函数值为0。
⑩StrCompare(S,T):比较操作。若S>T,则返回值>0;若S=T,则返回值=0;若S<T,则返回值<0。

3.字符集编码

每个字符在计算机中对应一个二进制数,比较字符的大小其实就是比较二进制数的大小。
常见的编码方式可以看博主的这篇博客:https://blog.csdn.net/qq_61888137/article/details/131026013

4.串的存储结构

1.顺序存储

①静态数组实现(定长顺序存储)
方案1:定义结构体,使用变量length记录数组长度。
方案2:char[0]记录数组的长度,优点:字符的位序和数组下标相同
方案3:没有Length变量,以字符\0’表示结尾(对应ASCII码的0),缺点是需要遍历所有字符串获取长度。

②动态数组实现(堆分配存储),用完需要手动free。

2.链式存储

①每个结点存储一个字符
在这里插入图片描述

②每个结点存多个字符,没有字符的位置用’#'或"\0’补足
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FCOS难点记录

FCOS 中有计算 特征图&#xff08;Feature map中的每个特征点到gt_box的左、上、右、下的距离&#xff09; 1、特征点到gt_box框的 左、上、右、下距离计算 x coords[:, 0] # h*w&#xff0c;2 即 第一列y coords[:, 1] l_off x[None, :, None] - gt_boxes[..., 0][:, No…

使用U盘安装ubuntu22操作教程

U盘启动 将烧录好的U盘&#xff0c;插上待安装系统的电脑 服务器在开机之后长按【ESC键】进入BIOS选项中&#xff0c;选择对应的U盘启动 如下图&#xff0c;在界面中“USB”选项就是我的U盘&#xff0c;第一启动项选择U盘启动&#xff0c;其他启动项不动&#xff0c;选择后按F…

【推荐】一款AI写作大师、问答、绘画工具-「智元兔 AI」

在当今技术飞速发展的时代&#xff0c;越来越多的领域开始应用人工智能&#xff08;Artificial Intelligence&#xff0c;简称AI&#xff09;。其中&#xff0c;AI写作工具备受瞩目&#xff0c;备受推崇。在众多的选择中&#xff0c;智元兔AI是一款在笔者使用过程中非常有帮助的…

使用gitflow时如何合并hotfix

前言 在使用 git flow 流程时, 对于项目型的部署项目经常会遇到一个问题, 就是现场项目在使用历史版本时发现的一些问题需要修复, 但升级可能会有很大的风险或客户不愿意升级, 这时就要求基于历史版本进行 hotfix 修复. 基于历史发布版本的缺陷修复方式不同于最新发布版本的补…

SQL使用

--天空会的像哭过&#xff0c;离开你以后 并没有更自由 SQL进行数据的删除 一、删除delete 语法 delete [from] 表名称 where 条件数据删除&#xff0c;不能删除某一列&#xff0c;因为删除是对记录而言 2.1 删除是一条一条删除&#xff0c;每次删除都会将操作写入日志文件 删…

JPA Buddy快速创建update、find、count、delete、exists方法

JPA Buddy快速创建update、find、count、delete、exists方法&#xff0c;JPA默认提供的CrudRepository\JpaRepository提供的方法比较少&#xff0c;一般我们会手写一些方法&#xff0c;这里我们选择通过JPA Buddy快速生成&#xff0c;之前文章中讲到了JPA Buddy原本是IDEA收费插…

Word软件手动安装Zotero插件

文章目录 Word软件手动安装Zotero插件方法一方法二 参考资料 Word软件手动安装Zotero插件 方法一 关闭word在zotero中依次点击编辑—首选项—引用—文字编辑软件—重新安装加载项Microsoft word 方法二 寻找Zotero.dotm存储位置&#xff0c; 例如D:\Program Files\Zotero\ext…

kernelbase.dll故障怎么处理?Kernelbase.dll故障的解决方法

在使用Windows操作系统过程中&#xff0c;有可能出现kernelbase.dll故障的情况。本文将详细介绍几种修复kernelbase.dll文件的方法&#xff0c;并对这个重要的dll文件进行简要的介绍。 一.kernelbase.dll文件概述 Kernelbase.dll是Windows系统中的一个关键动态链接库&#xff…

阿里云优惠券介绍、作用、领取入口及使用教程

阿里云是阿里巴巴集团倾力打造的云计算品牌&#xff0c;提供丰富多样的云计算产品及服务&#xff0c;为了吸引用户&#xff0c;阿里云经常推出各种优惠活动&#xff0c;其中就包括阿里云优惠券的发放。本文将为大家详细介绍阿里云优惠券的作用、领取入口以及使用教程。 一、阿里…

leetcode:21. 合并两个有序链表

一、题目 函数原型&#xff1a; struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) 二、思路 合并两个有序链表为一个新的升序链表&#xff0c;只需要遍历两个有序链表并比较结点值大小&#xff0c;依次将较小的结点尾插到新链表即可。 三、代码…

arcgis基础篇--实验

一、绘制带空洞的面要素 方法一&#xff1a;先绘制出一个面区域&#xff0c;然后在面上再绘制一个面区域代表面洞&#xff0c;两者位于同一个图层内&#xff0c;选中代表面洞的区域&#xff0c;选择【编辑器】-【裁剪】工具&#xff0c;将面裁剪出一个洞&#xff0c;随后删除代…

零代码秒集成打通小鹅通订单支付信息与 CRM合同接口

随着科技的不断进步&#xff0c;数字化已经成为了商业世界的核心。企业和组织必须紧跟数字化趋势&#xff0c;以适应快速变化的市场需求和消费者行为。企业需要做到快速反应市场的需求变化&#xff0c;从产品设计到产品生产&#xff0c;每一步都离不开技术人员对系统的操作&…