【数据结构】串(字符串):基本概念与存储

考点频率 :★★★☆☆(选择题常考,是KMP算法的基础知识)

难度 :⭐

建议:掌握串的定义、基本概念(空串/空格串/子串/主串),理解串的三种存储方式

1️⃣ 什么是串?

串(String) 是由零个或多个字符组成的有限序列 ,通常称为字符串

从数据结构的角度来看,串是一种特殊的线性表 ------它的数据元素是单个字符 。线性表的所有基本操作(如插入、删除、查找)都适用于串,但串更强调整体处理(如整体赋值、比较、拼接)。

基本术语

术语 含义 示例
串的长度 串中字符的个数 "hello" 的长度为 5
空串(Null String) 长度为 0 的串,不包含任何字符 ""
空格串(Blank String) 只包含空格字符的串 " "(长度为3)
子串(Substring) 串中任意连续字符组成的子序列 "llo""hello" 的子串
主串(Main String) 包含子串的串 "hello""llo" 的主串
串的位置(Position) 字符在串中的序号(通常从 1 开始) "hello"'e' 的位置是 2

空串 vs 空格串:空串长度为0,不含任何字符;空格串长度为空格字符的个数,每个空格也是一个字符。两者在考试中经常作为概念辨析题出现。

2️⃣ 串的存储结构

2.1 定长顺序存储(静态数组)

用一组地址连续的存储单元存储串中的字符,串的长度固定。

c 复制代码
#define MAXLEN 100
typedef struct {
    char ch[MAXLEN];   // 存储字符
    int length;        // 串的实际长度
} SString;

特点

  • 实现简单,随机访问 O(1)O(1)O(1)
  • 容量固定,可能浪费空间或溢出
  • 截断问题:赋值时如果超过最大长度,需要截断

2.2 堆分配存储(动态数组)

在程序运行时,根据串的长度动态分配存储空间。

c 复制代码
typedef struct {
    char* ch;          // 指向动态分配的存储空间
    int length;        // 串的实际长度
} HString;

特点

  • 按需分配,不会浪费空间
  • 插入、删除操作灵活
  • 需要手动管理内存(分配和释放)

2.3 链式存储(链表)

单链表存储串中的字符,每个节点可以存储一个字符或多个字符。

c 复制代码
// 每个节点存一个字符
typedef struct StringNode {
    char ch;
    struct StringNode* next;
} StringNode;

特点

  • 插入、删除操作方便
  • 存储密度低(每个字符多一个指针)
  • 可以优化:每个节点存储多个字符(如4个),提高存储密度

2.4 三种存储方式对比

对比项 定长顺序 堆分配 链式存储
存储方式 连续内存,固定长度 连续内存,动态分配 分散内存(指针链接)
随机访问 ✅ O(1)O(1)O(1) ✅ O(1)O(1)O(1) ❌ O(n)O(n)O(n)
存储密度 低(有指针开销)
容量限制 固定,可能溢出 按需分配 无限制
适用场景 串长度可预知 串长度变化较大 插入/删除频繁

3️⃣ 串的基本操作(了解即可)

操作 含义
赋值(StrAssign) 将字符串常量赋给串变量
复制(StrCopy) 将一个串复制到另一个串
判空(StrEmpty) 判断串是否为空
比较(StrCompare) 比较两个串的大小(按字典序)
求长度(StrLength) 返回串中字符的个数
拼接(Concat) 将两个串连接成一个新串
求子串(SubString) 返回串中从某位置开始的连续子串
查找(Index) 在串中查找子串的位置

4️⃣ 经典例题

例题1:以下关于串的说法中,正确的是( )。

A. 空串和空格串是相同的

B. 串是一种特殊的线性表

C. 串的长度是指串中有效字符的个数,不包括空格

D. 链式存储是串存储的最佳方式

解析 :A错误------空串不含任何字符,空格串包含空格字符;C错误------空格也是字符,应计入长度;D错误------链式存储存储密度低,各存储方式各有适用场景,没有"最佳"。B正确------串的数据元素是单个字符,因此是特殊的线性表。选 B


例题2 :设串 S = "Data Structure",则 S 的长度为( ),子串 "Struct"S 中的起始位置为( )。

A. 13;6

B. 14;5

C. 13;5

D. 14;6

解析"Data Structure" 共14个字符(含中间的空格),"Struct" 从第6个字符开始(下标从1开始,D=1,a=2,t=3,a=4,空格=5,S=6)。选 D

5️⃣ 记忆口诀

串是字符线性表,长度字符总个数。

空串不含任何字符,空格串里有空格。

顺序存储空间有限,链式存储指针多。

6️⃣ 小测验(评论区对答案)

设串 S = "Hello World",则 S 的长度为( )。

A. 10

B. 11

C. 12

D. 13

🔔 本专栏日更,点击头像 → 专栏《软考中级高频考点》订阅,第一时间接收新内容

#软考中级 #软件设计师 #串 #字符串 #数据结构 #软考备考

相关推荐
一隅论数智15 小时前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
m0_5474866617 小时前
《数据结构教程》全套 PPT课件2026
数据结构
深圳老胡18 小时前
STM32F407 控制 L6470 步进电机驱动 —— 控制过程简介
笔记·stm32·单片机·嵌入式硬件·代码规范
Because_of_Her118 小时前
并查集-听课笔记
笔记·算法·并查集
彧azz18 小时前
Linux 环境下 Redis 学习总结:数据类型、持久化、锁、事务、主从与缓存问题
linux·redis·笔记·学习·面试
陈卫军老师19 小时前
陈卫军:把口味写在一张纸上,店才稳得住
经验分享·笔记·流量运营
`流年づ19 小时前
人工智能学习笔记 - 补充
人工智能·笔记·深度学习·学习
qeen8720 小时前
【Linux】操作系统之进程介绍(二)
linux·笔记·学习·进程
从零开始的嵌入式之旅20 小时前
day47
arm开发·经验分享·笔记·嵌入式硬件
陈年老古董21 小时前
MediaPipe 姿态检测与脸部关键点检测
笔记·python·opencv·学习·dlib