因为串是特殊的线性表,故其存储结构与线性表的存储结构类似。只不过由于组成串的结点是单个字符,所以存储时有一些特殊的技巧。
串的顺序存储
1 、顺序串
串的顺序存储结构简称为顺序串。
与顺序表类似,顺序串是用一组地址连续的存储单元来存储串中的字符序列。因此可用高级语言的字符数组来实现,按其存储分配的不同可将顺序串分为如下两类:
(1)静态存储分配的顺序串
(2)动态存储分配的顺序串
2、静态存储分配的顺序串
(1)直接使用定长的字符数组来定义
该种方法顺序串的具体描述:
#define MaxStrSize 256 //该值依赖于应用,由用户定义
typedef char SeqString[MaxStrSize]; //SeqString是顺序串类型
SeqString S; //S是一个可容纳255个字符的顺序串
注意:
①串值空间的大小在编译时刻就已确定,是静态的。难以适应插入、链接等操作
②直接使用定长的字符数组存放串内容外,一般可使用一个不会出现在串中的特殊字符放在串值的末尾来表示串的结束。所以串空间最大值为MaxStrSize时,最多只能放MaxStrSize-1个字符。
串的顺序存储
1 、顺序串
串的顺序存储结构简称为顺序串。
与顺序表类似,顺序串是用一组地址连续的存储单元来存储串中的字符序列。因此可用高级语言的字符数组来实现,按其存储分配的不同可将顺序串分为如下两类:
(1)静态存储分配的顺序串
(2)动态存储分配的顺序串
2、静态存储分配的顺序串
(1)直接使用定长的字符数组来定义
该种方法顺序串的具体描述:
#define MaxStrSize 256 //该值依赖于应用,由用户定义
typedef char SeqString[MaxStrSize]; //SeqString是顺序串类型
SeqString S; //S是一个可容纳255个字符的顺序串
注意:
①串值空间的大小在编译时刻就已确定,是静态的。难以适应插入、链接等操作
②直接使用定长的字符数组存放串内容外,一般可使用一个不会出现在串中的特殊字符放在串值的末尾来表示串的结束。所以串空间最大值为MaxStrSize时,最多只能放MaxStrSize-1个字符。
【例】C语言中以字符'\0'表示串值的终结。
(2)类似顺序表的定义
直接使用定长的字符数组存放串内容外,可用一个整数来表示串的长度。此时顺序串的类型定义完全和顺序表类似:
typedef struct{
char ch[MaxStrSize]; //可容纳256个字符,并依次存储在ch[0..n]中
int length;
}SeqString;
注意:
①串的长度减1的位置就是串值的最后一个字符的位置。
②这种表示的优点是涉及串长的操作速度快。
3、动态存储分配的顺序串
顺序串的字符数组空间可使用C语言的malloc和free等动态存储管理函数,来根据实际需要动态地分配和释放。
这样定义的顺序串类型亦有两种形式。
(1)较简单的定义
typedef char *string; //C中的串库<string.h>相当于使用此类型定义串
(2)复杂定义
typedef struct{
char *ch;// 若串非空,则按实际的串长分配存储区,否则ch为NULL
int length;
}HString;
串的顺序存储操作【参见动画演示】