串的存储结构演示
串的存储主要有两种方式:
- 顺序存储:类似于数组,紧凑但需要预分配空间。
- 链式存储:为了提高存储密度,通常一个结点存储多个字符(块链)。
Step 1/4初始化空串:申请固定大小数组 (MAXSIZE),长度为 0。
1// 定长顺序存储2#define MAXSIZE 2553typedef struct {4 char ch[MAXSIZE]; // 静态数组5 int length; // 当前长度6} SString;struct SString
0
1
2
3
4
5
6
7
8
9
...
int length =
0
⚠️ 定长数组:无论存多少字符,都占用 MAXSIZE 空间
1. 定长顺序串(静态数组,长度写死)
#define MAXSIZE 255 // 最大容量
typedef struct {
char ch[MAXSIZE]; // 连续空间
int length; // 当前实际长度
} SString;
2. 堆分配顺序串(动态数组,运行时可扩容)
typedef struct {
char *ch; // malloc/realloc 得到的连续空间
int length; // 已用长度
int cap; // 已分配容量
} HString;
3. 存储方式对比
| 方案 | 实现方式 | 优点 |
|---|---|---|
| 方案一 | ch[0] 充当 Length | 节省空间 |
| 方案二 | 数组下标与字符位序相同 | 访问直观 |
| 方案三 | 以 '\0' 表示结尾(无 Length 变量) | 符合 C 语言字符串规范 |
| 方案四 | 单独维护 Length 变量 | 长度获取高效 |
