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