2023-11-16

在这里插入图片描述

定义

串是一种内容受限的线性表。

  • 串/字符串:由零个或多个字符组成的有限序列
  • 子串:串的任意个连续的字符组成的子序列
  • 主串:包含子串的串
  • 位置:字符在序列中的序号(子串在主串中的位置则以子串的第一个字符在主串中的位置来表示)
  • 空格串:由一个或多个空格组成的串“ ” 空格串不等于空串,其长度为串中空格字符的个数
s=“a1 a2...an”(n>=0)

s:串名
n:串的长度(n=0时为空串)
(双引号中的字符序列为串值,其可以是字母、数字或其他字符)

抽象类型定义

线性表的基本操作:大多以“单个元素”作为操作对象。在线性表中查找某个元素,求取某个元素,在某个位置上插入一个元素或删除一个元素。
串的基本操作:通常以“串的整体”作为操作对象。在串中查找某个子串,求取一个子串,在串的某个位置上插入一个子串,以及删除一个子串。

  • StrAssign (&T,chars)
    (chars是字符串常量)
    生成一个其值等于chars的串 T 。

  • 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的元素个数,即串的长度

  • ClearString (&S)
    将S清为空串

  • Concat (&T,S1,S2)
    用T返回由S1和S2联接而成的新串

  • SubString (&Sub,S,pos,len)
    ( 1<=pos<=StrLength (S) 且 0<=len<=StrLength (S) - pos + 1 )
    用Sub返回串S的第pos个字符起长度为len的子串

  • Index (S,T,pos)
    (T是非空串,1<=pos<=StrLrngth (S) )
    若主串S中存在和串T值相同的子串,则返回它在主串S中第pos个字符之后第一次出现的位置;否则函数值为0

  • Replace (&S,T,V)
    (T是非空串)
    用V替换主串S中出现的所有与T相等的不重叠的子串

  • StrInsert (&S,pos,T)
    ( 1<=pos<=SreLength (S) + 1 )
    在串S的第pos个字符之前插入串T

  • StrDelete (&S,pos,len)
    ( 1<=pos<=StrLength (S) - len + 1 )
    从串S中删除第pos个字符起长度为 len 的子串

  • DestroyString (&S)
    销毁串S

存储结构

串值的链式存储结构对某些串操作,如联接操作等,有一定方便之处,但它占用存储量大且操作复杂,不如顺序存储结构灵活。

顺序存储

类似于线性表的顺序存储结构,用一组地址连续的存储单元存储串值得字符序列。
在此可回顾一下 线性表存储结构

定长顺序存储结构

根据预定义的大小,为每个定义的串变量分配一个固定长度的存储区

#define MAXLEN 255  //串的最大长度
typedef struct 
{
   char ch [ MAXLEN + 1 ];  //存储串的一维数组
   int length;  //串的当前长度
}SString;
堆式顺序存储结构

堆可以为每个新产生的串动态分配一块实际串长所需的存储空间,若分配成功,则返回一个指向起始地址的指针,作为串的基址,同时约定串长作为存储结构的一部分

typedef struct
{
  char *ch;  //若是非空串,则按串长分配存储区,否则 ch 为 NULL
  int length;  //串的当前长度
}HString;

链式存储

顺序串的插入和删除操作不方便,需要移动大量的字符,所以可采用单链表方式存储串。因为串结构的特殊性——结构中的每个数据元素是一个字符,则在用链表存储串值时,存在一个“结点大小”的问题,即每个结点可以存放一个字符,也可以存放多个字符

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

  • 当结点大小大于 1 时,由于串长不一定是结点大小的整倍数,则链表中的最后一个结点不一定全被串值占满,此时通常补上“ # ”或其他的非串值字符(通常“ # ”不属于串的字符集,是一个特殊的符号 )
串的链式存储结构

为进行串操作的方便,当以链表存储串值时,除头指针外,还可附设一个尾指针指示链表中的最后一个结点,并给出当前串的长度

#define CHUNKSIZE 80  //可由用户定义的块大小
typedef struct Chunk
{
  char ch [ CHUNKSIZE ] ;  
  struct Chunk *next;
}Chunk;
typedef struct
{
  Chunk *head,*tail;  //串的头和尾指针
  int length;  //串的当前长度
}LString;
  • 结点大小的选择直接影响着串处理的效率
  • 存储密度小(如结点大小为 1 时 ),运算处理方便,但存储占用量大。( 如果在串处理过程中需进行内、外存交换的话,则会因为内、外存交换操作过多而影响处理的总效率。)一般来说,字符集小,则字符的机内编码就短,这也影响串值存储方式的选取。

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

串 的相关文章

  • 2023年信息与通信工程国际会议(JCICE 2023)

    会议简介 Brief Introduction 2023年第二届信息与通信工程国际会议 JCICE 2023 会议时间 2023年5月12日 14日 召开地点 中国 成都 大会官网 JCICE 2023 2023 International
  • DeeplabCut安装教程(CPU)版

    DeeplabCut安装教程 CPU 版 文章目录 DeeplabCut安装教程 CPU 版 前言 安装步骤 1 进入官网下载对应的DeepLabCut zip文件 附官网链接 2 解压到任意位置 3 打开Anaconda Navigato
  • c++模板(函数模板,类中函数模板,类模板)

    作用 减少程序中的冗余信息 如 多个函数或类的除了参数类型外 其余都完全相同时 可以使用模板来减少重复信息 参考函数重载时 输入参数数量也相同的情况 1 函数模板 即建立一个通用函数 只不过该函数的返回类型和形参类型都不具体指定 其定义格式
  • Python实现找零兑换的三种解法

    找零兑换 找零兑换问题最直接的解法就是贪心策略 比如问题 有面值1 5 10 25的硬币 求解兑换63元所需的最少硬币数 贪心策略的思想就是不断的利用面值最大的硬币去尝试 不行了 在尝试较小面值的硬币 该例中也即使用25的硬币去尝试 2枚2
  • 华为服务器怎么换系统,云服务器怎么更换系统

    云服务器怎么更换系统 内容精选 换一换 弹性云服务器系统密码涉及到客户重要的私人信息 提醒您妥善保管密码 如果您忘记密码或密码过期 可以重置密码 如果弹性云服务器提前安装了密码重置插件 请参见在控制台重置弹性云服务器密码 使用公共镜像的弹性
  • 【简单易用】基于Qt的跨平台自定义标题栏控件QJamWindow

    一 概述 QJamWindow是一个基于Qt的跨平台自定义标题栏控件 你可以通过它方便得设计出属于自己的标题栏 特性 1 标题栏高度可调 标题栏背景色设定 2 图标及其尺寸 图标背景色设定 3 Control box宽度 鼠标经过 按下颜色
  • JAVA基础必备功能之导出ZIP文件

    导出ZIP文件 比较常用的两种 导出图片压缩文件 导出excel压缩文件 导出思路 需要导出的文件转存为byte数组保存到Map 然后遍历压缩成zip 需要引入jar
  • 链表— —循环链表的算法实现

    Joseph问题 有 10 个小朋友按编号顺序 1 2 10 顺时针方向围成一圈 从 1 号开始顺时针方向 1 2 9 报数 凡报数 9 者出列 显然 第一个出圈为编号 9 者 最后一个出圈者的编号是多少 第 5 个出圈者的编号是多少 in
  • lintcode 631 · 最大矩阵II【矩阵 中等 vip】

    题目 https www lintcode com problem 631 给出一个只有 0 和 1 组成的二维矩阵 找出最大的一个子矩阵 使得这个子矩阵的主对角线元素均为 1 其他元素均为 0 你可以认为所求的矩阵一定是一个方阵 主对角线
  • 组是由圆括号分开的正则表达式 随后可以根据它们的组号进行调用 第 0 组表示整个匹 配表达式 第1 组表示第 1 个用圆括号括起来的组 等等 因此 在表达式 A B C D 中 有 3 个组 第 0 组 ABCD 第 1 组是 BC 以及第
  • Acwing790.数的三次方根

    解题思路 include
  • Pandora-ChatGPT(离线安装教程)(附安装包)

    要安装Pandora ChatGPT 1 1 0 tar gz 您可以按照以下步骤进行操作 安装包 https wwue lanzouj com iOMwG0yeozxg 解压缩文件 tar xvf Pandora ChatGPT 1 1
  • 设置bitmap的宽高,同时将bitmap转换为file对象

    public class BitmapToSizeChangeFile 将bitmap转换为file存储起来 param bitmap return public static File
  • Dijkstra C艹板子

    迪杰斯特拉算法主要特点是从起始点开始 采用贪心算法的策略 每次遍历到始点距离最近且未访问过的顶点的邻接节点 直到扩展到终点为止 题源 最短路 蓝桥云课 lanqiao cn 如下图所示 G 是一个无向图 其中蓝色边的长度是 1 橘色边的长度
  • 绕过JavaScript debugger三种解决方法

    最近网上挺火的一段加密混淆JS 格式化展开后有300多行 目的是解析生成一个cookie 不携带cookie 就不能加载网页源码 典型的反爬虫操作 看后觉得好使的请记得点赞哦 烧鸡么么哒 谢谢 JS会自动监视是否打开了调试器 如果打开了 就
  • STM32锁住,解开方法

    一 STM32 被锁住后的解开方法 问题 STM32 JTAG SWD禁用导致无法烧写 由于STM32的引脚功能较多 在为了方便硬件的使用 常会使用复用重映射的功能 这里主要涉及的是SWD和JTAG端口的引脚对应出现的问题 为了使得TIM2
  • php之RSA加密解密

    介绍 RSA算法属于非对称加密算法 非对称加密算法需要两个秘钥 公开密钥 publickey 和私有秘钥 privatekey 公开密钥和私有秘钥是一对 如果公开密钥对数据进行加密 只有用对应的私有秘钥才能解密 如果私有秘钥对数据进行加密那
  • Linux下nginx的安装以及环境配置

    linux下nginx的安装以及环境配置 刚好最近在处理服务器相关的工作 所以记录一下nginx的安装 ok 接下来直接开始操作 第一步 下载nginx压缩包 在这里可以去nginx官网下载 gt 点我下载nginx 也可以直接使用wget
  • 【解惑】一文告诉你,该学R还是Python!

    Python和R是统计学中两种最流行的的编程语言 R的功能性主要是统计学家在开发时考虑的 R具有强大的可视化功能 而Python因为易于理解的语法被大家所接受 在这篇文章中 我们将重点介绍R和Python以及它们在数据科学和统计上地位之间的
  • 提高 React 项目整洁度的 21 个最佳实践

    React 在如何组织结构方面非常开放 这正是为什么我们有责任保持项目的整洁和可维护性 今天 我们将讨论一些改善 React 应用程序健康状况的最佳实践 这些规则被广泛接受 因此 掌握这些知识至关重要 所有内容都将以代码展示 所以做好准备

随机推荐

  • 端口扫描技术

    端口扫描 常见的扫描类型 全连接扫描 TCP connect 扫描 半连接扫描 TCP SYN 扫描 IP 头信息 dumb 扫描 秘密扫描 TCP FIN 扫描 TCP ACK 扫描 NULL 扫描 XMAS 扫描 SYN ACK 扫描
  • SQL编程:存储过程、触发器、函数(实例基于MySQL5.7.12)

    SQL编程基础 A 编程环境 即存储过程 触发器和函数中进行SQL编程 所以有些语法并不能应用于普通的SQL应用场景 如命令行直接SQL查询 B 变量声明 1 全局变量 声明 set 变量名 值 读取 select 变量名 赋值 set 变
  • 联想gen系列服务器,Hpe Microserver Gen10 Plus开箱

    Hpe Microserver Gen10 Plus开箱 2021 04 19 10 53 23 25点赞 69收藏 83评论 心水很久的gen10 plus终于到了 关注了很久终于下手了 在值得买好像都没看到gen10 plus的开箱 那
  • vuex的持久化插件

    目的 让在vuex中管理的状态数据同时存储在本地 可免去自己存储的环节 在开发的过程中 像用户信息 名字 头像 token 需要vuex中存储且需要本地存储 再例如 购物车如果需要未登录状态下也支持 如果管理在vuex中页需要存储在本地 1
  • 参考《一个64位操作系统的设计与实现》,自己写操作系统(一)

    1 安装VMware虚拟机 版本16 下载地址 http downdownxia com down VMware16lsb rar key fa4505a42b82aa65195be879fc84defd 2 安装centos系统 版本6
  • 【项目实战】MySQL查询计算某个字符在某个字段中的数量

    一 背景说明 表sys dept中有个字段 ancestors ancestors的值是含有 逗号 现在需要计算 逗号 这个字符串在ancestors中出现的数量 二 解决方案 SELECT dept id dept name ancest
  • 2023华为od机试 Python【最长公共后缀】

    题目 我们现在要实现一个功能找到字符串数组 中的最长公共后缀如果不存在公共后缀 输入描述 abc bbc c 输出描述 c 示例1 输入 abc bbc c 输出 c 说明 返回公共后缀 c 示例2 输入 aa bb cc 输出 Zero
  • 解决微信小程序报错:[渲染层网络层错误] Failed to load local image resource

    一 场景 写了一个图片点击 全屏展示的组件 页面图片 gt 点击 gt 打开全屏遮罩层显示大图片 1控制元素展示的变量 data photoShow false 2图片点击函数 onClick const url null e curren
  • Shell的read 读取控制台输入、read的使用

    文章目录 1 read 读取控制台输入 1 1基本语法 1 2read的使用 如果想看更详细的Shell总结请到我之前写的博客https blog csdn net Redamancy06 article details 126048299
  • com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 2 of 2-byte

    com sun org apache xerces internal impl io MalformedByteSequenceException Invalid byte 2 of 2 byte UTF 8 sequence 分析 这个问
  • YOLO-----关于正负样本、Loss、IOU、怎样去平衡正负样本的问题?

    关于正负样本 Loss IOU 怎样去平衡正负样本的问题 1 关于正负样本 2 Loss计算 3 IOU GIOU DIOU CIOU 4 怎样去平衡正负样本的问题 先整理一下anchor的概念 常用的anchor定义 Faster R C
  • MySQL 8 安装教程

    MySQL 8发布了 据说相比MySQL 5速度提升了2倍 今天来搞一搞MySQL 8 一 下载MySQL 8 1 首先当然是下载安装包了 下载地址 点击下载MySQL 8 这个页面相信大家都熟悉 我就不多说了 2 将下载的压缩包解压 解压
  • 全网最简洁的mpy-cross教程

    大家知道我一向精干 不喜欢搞花儿的 如果去mpy官网看mpy cross的相关资料 估计又得绕蒙 跟我来 保证你三分钟学会 但是本文不涉及原理 第一 mpy cross是干嘛滴 答 把py文件转成mpy系统读的mpy文件 术语咱不懂 叫交叉
  • H3C交换机如何配置SNMP协议?

    1 使用telnet 登陆设备 system view snmp agent snmp agent community read public snmp agent sys infoversion all dis cur save 保存 Y
  • 操作系统原理大题

    一 地址变换和求FAT表大小 某一页表内容自0 7依次为03 07 0B 11 1A 1D 20 22 请计算页面大小为1K和4K时的逻辑地址134D对应的物理地址 首先 将134D转换为二进制数为 0001001101001101 1k为
  • 【2024届校招内推:NTAA84y】腾讯云智研发中心

    云智校招新官网查看最新岗位情况 云智研发中心2024届校园招聘官网 内推码 NTAA84y 云智研发公司2024届校园招聘启动啦 腾讯旗下子公司 八大类岗位 五大城市全面开放 在喜欢的城市 做喜欢的工作 期待正能量 共担当 实干家的你加入云
  • dumpsys meminfo 的原理和应用

    什么是dumpsys meminfo Android中通过命令dumpsys meminfo package name pid 查看指定进程的内存使用情况 通过输出的信息 可以看出来应用在内存哪里分配出现了问题 比如native heap
  • 华为服务器sn号查询网站,linux 查询服务器sn

    linux 查询服务器sn 内容精选 换一换 Linux云服务器变更规格时 可能会发生磁盘挂载失败的情况 因此 变更规格后 需检查磁盘挂载状态是否正常 本节操作介绍变更规格后检查磁盘挂载状态的操作步骤 以root用户登录云服务器 执行以下命
  • top 命令

    NAME top display Linux tasks SYNOPSIS top hv abcHimMsS d delay n iterations p pid pid a 按内存使用排序 b 批处理 c 显示完整的命令 d 指定间隔时间
  • 文章目录 定义 抽象类型定义 存储结构 顺序存储 定长顺序存储结构 堆式顺序存储结构 链式存储 串的链式存储结构 定义 串是一种内容受限的线性表 串 字符串 由零个或多个字符组成的有限序列 子串 串的任意个连续的字符组成的子序列 主串 包含