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

考点频率 :★★★☆☆(选择题常考,是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

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

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

相关推荐
Huathy-雨落江南,浮生若梦7 小时前
Caddy 学习笔记 - 反向代理与 IP 封禁
笔记·学习·tcp/ip
谢白羽8 小时前
SGLang的AWQ量化笔记
笔记·python·sglang
噜~噜~噜~8 小时前
操作系统笔记-2.3.5.2 读者-写者问题
笔记·操作系统
lisin-lee-cooper9 小时前
【leetcode658】有序数组找出k个最接近x的数
java·数据结构·算法
MindUp9 小时前
企业私有化文件管理系统选型实录:从部署架构到AI能力的技术调研笔记
人工智能·笔记·架构
sunburn-9 小时前
Java堆(Heap)详解与实战教学
java·开发语言·数据结构·ide·算法
GGMM78910 小时前
西门子BOP20基本操作面板超详细教程(S120/G130专用)
笔记·变频器·变频器维修
一条破秋裤10 小时前
TIM 输入捕获与 PWMI:从边沿到频率、占空比
笔记·stm32·学习
哭泣方源炼蛊11 小时前
并查集进阶 P1(带权并查集,并查集分类)
数据结构·c++·算法·二进制·带权并查集
知产xiao_xin11 小时前
知识产权入门 —— 工业品外观设计
经验分享·笔记·知识产权