[数据结构]-07字符串

本文介绍了字符串的基础概念,包括定义、空串与空格串的区别,以及子串和位置的概念。接着讨论了字符串的基本操作,如求串长、查找子串位置、替换字符等。还探讨了字符串的两种存储方式:顺序存储和链式存储,并通过举例说明了如何实现字符串反转。最后,推荐了几本关于数据结构的参考书籍。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

字符串

由 0 或多个字符顺序排列组成的有限序列称为字符串。

若用 s="a1a2...an"(n≥0)s="a_1a_2...a_n"(n\ge 0)s="a1a2...an"(n0) 表示一个字符串:

  • sss 称为串名,引号中的字符序列称为串值;
  • nnn 为字符个数,也称作串长度;
  • n=0n=0n=0 时不包含任何字符,称为空串,用 ∅\emptyset 表示。
    若串由一个或多个空格组成,此时称为空串格,与空串不同,空格串的长度为实际空格的个数。

若把串 sss 称为主串,则主串中的任意连续的字符组成的子序列称为子串,不包含自身的所有子串称为真子串。
例如:主串 "abcd""abcd""abcd" 的子串有:"","a","abc","bc","bcd","cd","abcd""","a","abc","bc","bcd","cd","abcd""","a","abc","bc","bcd","cd","abcd"等。

字符在序列中的序号称为该字符在串中的位置。 子串在主串中第一次出现时,其首字符在主串中的序号为该子串在主串中的位置,称为子串位置。

两个字符串相等的判断条件:

  • 两个串的长度相等;
  • 各个对应位置上的字符都相等;
  • 所有的空串相等。
字符串的基本操作
  • 求串长
  • 求主串的所有子串
  • 求子串在主串中的位置
  • 求字符在主串中的位置
  • 将串中的字符特换称特定的字符
  • 将一个串复制到另一个串中
  • 在主串的指定位置插入一个字符串
  • 删除主串中的一个子串
  • 拼接两个字符串

串的存储方式

串元素的逻辑关系与线性表的相同,串可以采用与线性表相同的存储结构:顺序存储链式存储

串的顺序存储:

  • 为主串分配一个固定长度的存储空间;
  • 当串的实际长度超出设定的存储空间长度时,超出部分的字符被舍弃。

串的链式存储:

  • 把存储空间分成一系列大小相同的结点;
  • 每个结点结构与链表相同:data域、next域;
  • 每个结点可以存放一个字符,也可以存放多个字符。

算法例题

1.字符串转化
例题: 反转字符串 “algorithm”

解题思路:用两个指针,一个指向字符串的第一个字符 a,一个指向它的最后一个字符 m,然后互相交换。交换之后,两个指针向中央一步步地靠拢并相互交换字符,直到两个指针相遇。这是一种比较快速和直观的方法。

注意:由于无法直接修改字符串里的字符,所以必须先把字符串变换为数组,然后再运用这个算法。

参考

  • 《数据结构(C语言版)》 严魏敏、吴伟民著
  • 《数据结构(第3版)》 刘大有等著
  • 《搞定数据结构与算法》 苏勇
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值