目录
串的抽象数据类型
Data:
串数据集合表示为{ a0,a1,… ai-1,ai,ai+1,…an-1} ,每个数据元素的数据类型为char 。
Operation:
(1) StrAssign(T, chars):chars是字符串常量,生成一个其值等于chars的串T。
(2) StrCopy(T , S):由串S复制得串T。
(3) StrEmpty(S):若S为空,返回True,否则返回False。
(4) StrCompare(S, T):串S和T存在,若S>T,返回值>0;若S=T,返回值=0;若S<T,返回值<0。
(5) SStrLength(S):返回串S元素的个数,称为串的长度。
(6) ClearString(S):将S清为空串。
(7) Concat(T, S1, S2):串S1,S2存在,用T返回由S1,S2联接而成的新串。
(8)SubString(Sub, S, pos, len):串S存在,1<=pos<=StrLength(S)且0<=len<=StrLength(S)-pos+1。用Sub返回串S的第pos个字符起长度为len的子串。
(9) Index(S, T, pos):串S,T存在,T为非空串,1<=pos<=StrLength(S)。若主串S中存在和串T值相同的子串,则返回它在主串S中第pos个字符之后第一次出现的位置;否则函数返回0。
(10) Replace(S, T, V):串S,T,V存在,T是非空串。用V替换主串S中出现的所有与T相等的不重叠的子串。
(11) StrInsert(S, pos, T):串S,T存在,1<=pos<=StrLength(S)+1。在串S的第pos个字符之前插入串T。
(12) StrDelete(S, pos, len):串S存在,1<=pos<=StrLength(S)-len+1。从串S中删除第pos个字符起长度为len的子串。
(13) DestroyString(S):串S被销毁。
串的表示和实现
串有两种机内表示方法:
顺序存储
- 定长顺序存储表示(静态数组结构) 用一组地址连续的存储单元存储串值的字符序列,属静态存储方式。
- 堆分配存储表示(动态数组结构) 用一组地址连续的存储单元存储串值的字符序列,但存储空间是在程序执行过程中动态分配而得。
链式存储
串的链式存储结构
实现:
定长顺序存储特点:
用一组连续的存储单元来存放串,直接使用定长的字符数组来定义,数组的上界预先给出,故称为静态存储分配。
结构体声明:
typedef struct
{
char ch[MaxSize];
int len;
}String;
串的联接操作:
原来的串为S,长度为LS,待联接的串为T,长度为LT,有 以下三种情况