数据结构—字符串

一、字符串的定义

  1. 字符串是一种最常用的非数值类型。
  2. 字符串是由零个或多个字符组成的有限序列,字符串的逻辑结构与线性表相似,只是数据对象约束为字符集合,字符串的操作中数据元素操作不像线性表那样单个元素操作,而是通常作为一个整体进行操作。

二、串的表现和实现

  1. 概念

    1. 串的常用定长顺序存储、堆分配存储和块链存储三种方法实现。
    2. 串相等:如果两个串的串值相等(相同),称这两个串相等。换言之,只有当两个串的长度相等,且各个对应位置的字符都相同时才相等。
  2. 定长顺序存储表示

    1. 与线性表的顺序存储结构相同,用一组连续的固定长度地址空间进行存储。超过定义范围的字符串将被

      截断舍弃。

    2. 这个空间里面保存的字符串是什么,其方法是在C语言中用一个结束符号 ’\0‘ 进行标记,在定长顺序存储方法中字符串的长度保存在数组第一个位置、0位置。

三、堆分配存储表示

使用堆存储数据的方式已经学过很多了,线性表在堆中分配空间时分配比较大的一块空间,之后有一个表示线性表内元素个数的变量控制线性表的操作。字符串的堆分配存储方式是按照字符串长度分配堆空间,不会额外多分配空间,如果字符串为空,堆中不分配空间。

四、块链存储形式

  1. 像线性表一样如果每个字符都以一个节点形式存储,这是比较浪费空间,见下图。因为字符串操作通常不以单个元素为单位进行,而通常对多个元素进行操作。
  2. 可以设计一个大块Chunk节点,在Chunk节点中存储多个字符,并将Chunk块用链表方式链接,如果最后一个大块不能完全填充存储则约定某个符号为空字符,如 ‘#’,这种存储方式成为块链存储表示。

五、字符串匹配算法

  1. 概念

    给定一个字符串从这个字符串中查找某个字符串是否为该串的子串的操作称为串的模式匹配算法。

  2. 朴素算法

  3. KMP 算法

数据结构字符串C是指在C语言中对字符串进行操作和处理的一种数据结构。它包括对字符串的拼接、删除、截取、转换、匹配、替换等常用功能的实现。该数据结构还涉及单字符串匹配和多模式匹配算法的详细讲解。另外,C中的字符(char)实际上是以ASCII码值存储的。字符常量使用单引号表示,如'a'、'A',对应的ASCII码值分别为97、65。字符常量与字符串常量(双引号括起来的)是有区别的,字符常量是单个字符,而字符串常量可以包含多个字符。C语言提供了一些特殊字符(如'\n'、'\r'、'\t')来表示换行、回车、制表等功能。引用的中的C模板实现的数据结构字符串类也提供了对字符串的各种操作,其中的匹配算法使用了基于KMP的快速匹配算法。这个字符串类具有良好的编码风格和详细的算法注释。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [C++数据结构字符串](https://blog.csdn.net/suren_jun/article/details/127561801)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [C++数据结构字符串及KMP匹配算法](https://download.csdn.net/download/linxdef/9387482)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [C++字符串](https://blog.csdn.net/u014042772/article/details/125807000)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iGma_e

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值