概述
目录
- 串的顺序存储结构——顺序串
- 类型声明(非紧缩格式)
- 分析
- 生成串—StrAssign(&s, cstr)
- 销毁串— DestroyStr(&s)
- 分析
- 串的复制—StrCopy(&s,t)
- 判断串相等—StrEqual(s,t)
- 分析
- 求串长—StrLength(s)
- 分析
- 串的连接—Concat(s,t)
- 分析
- 求子串—SubStr(s,i,j)
- 分析
- 子串的插入—InsStr(s1,i,s2)
- 子串的删除—DelStr(s,i,j)
- 子串的替换—RepStr(s,i,j,t)
- 输出串—DispStr(s)
- 主函数验证
- 分析
- 完整代码
- 分析
数据结构-串(第四章)的整理笔记,若有错误,欢迎指正。
可以参考和对比一下C语言里面的字符串:C语言 字符串
串的基本概念:
- 串(string)是由零个或多个字符组成的有限序列。
- 两个串相等当且仅当这两个串的长度相等并且对应位置的字符都相同。
- 一个串中任意个连续字符组成的序列称为该串的子串(substring)。
- 含零个字符的串称为空串,用∅表示。空串是不包含任何字符的串,其长度为0,空串是任何串的子串。
设S为一个长度为n的字符串,其中的字符各不相同,则S中子串的个数为
n
(
n
+
1
)
2
+
1
frac{n(n+1)}{2}+1
2n(n+1)+1;
互异非平凡子串(非空且不同于S本身)的个数为
n
(
n
+
1
)
2
+
1
−
2
frac{n(n+1)}{2}+1-2
2n(n+1)+1−2(减去空串和等于自身的两种情况)=
n
(
n
+
1
)
2
−
1
frac{n(n+1)}{2}-1
2n(n+1)−1
串 的 基 本 操 作 { S t r A s s i g n ( & s , c s t r ) — 生 成 串 D e s t r o y S t r ( & s ) — 销 毁 串 S t r C o p y ( & s , t ) — 串 的 复 制 S t r E q u a l ( s , t ) — 判 断 串 相 等 S t r L e n g t h ( s ) — 求 串 长 C o n c a t ( s , t ) — 串 的 连 接 S u b S t r ( s , i , j ) — 求 子 串 I n s S t r ( s 1 , i , s 2 ) — 子 串 的 插 入 D e l S t r ( s , i , j ) — 子 串 的 删 除 R e p S t r ( s , i , j , t ) — 子 串 的 替 换 D i s p S t r ( s ) — 输 出 串 串的基本操作begin{cases} StrAssign(&s, cstr)—生成串\ DestroyStr(&s)—销毁串\ StrCopy(&s,t)—串的复制\ StrEqual(s,t)—判断串相等\ StrLength(s)—求串长\ Concat(s,t)—串的连接\ SubStr(s,i,j)—求子串\ InsStr(s1,i,s2)—子串的插入\ DelStr(s,i,j)—子串的删除\ RepStr(s,i,j,t)—子串的替换\ DispStr(s)—输出串\ end{cases} 串的基本操作⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧StrAssign(&s,cstr)—生成串DestroyStr(&s)—销毁串StrCopy(&s,t)—串的复制StrEqual(s,t)—判断串相等StrLength(s)—求串长Concat(s,t)—串的连接SubStr(s,i,j)—求子串InsStr(s1,i,s2)—子串的插入DelStr(s,i,j)—子串的删除RepStr(s,i,j,t)—子串的替换DispStr(s)—输出串
串的顺序存储结构——顺序串
- 顺序串中的字符被依次存放在一组连续的存储单元里。一般来说,一个字节(8位)可以表示一个字符(存放其ASCII码)。而计算机内存是按字编址的,即以字为存储单位,一个存储单元指的是一个字。而一个字可能包含多个字节,其所包含的字节数随机器而异。
- 顺序串的存储方式有两种:
一种是每个字只存一个字符(假设一个字包含4个字节),这称为非紧缩格式(其存储密度小)。
另ー种是每个字存放多个字符,这称为紧缩格式(其存储密度大)。
- 其中,灰色方块代表字节为空闲。
- 串的紧缩式节省存储空间,但处理单个字符不太方便,运算效率低,因为需要花费时间从同一个字中分离字符;相反,非紧缩式比较浪费存储空间,但处理单个字符或者一组连续字符方便。
一. 静态分配
类型声明(非紧缩格式)
typedef struct
{
char data[MaxSize]; //存放字符串字符
int length; //存放串长
}SqString; //顺序串类型
分析
- 串的实际长度只能小于等于MaxSize,超过预定义长度的串值会被舍去,称为載断。
- 串长有两种表示方法:一是如上述定义描述的那样,用一个额外的变量length来存放串的长度;二是在串值后面加一个不计入串长的结東标记字符“ ”,此时的串长为隐含值。
生成串—StrAssign(&s, cstr)
- 将一个C/C++字符串常量cstr(以"