1、串的基本概念
串(字符串):是零个或多个字符组成的有限序列。记作: S=“a1a2a3…”,其中S是串名,ai(1≦i≦n)是单个,可以是字母、数字或其它字符。
串值:双引号括起来的字符序列是串值。
串长:串中所包含的字符个数称为该串的长度。
空串(空的字符串):长度为零的串称为空串,它不包含任何字符。
空格串(空白串):构成串的所有字符都是空格的串称为空白串。
注意:空串和空白串的不同,例如“ ”和“”分别表示长度为1的空白串和长度为0的空串。
2、串的存储表示与表现
串是一种特殊的线性表,其存储表示和线性表类似,但又不完全相同。串的存储方式取决于将要对串所进行的操作。串在计算机中有3种表示方式:
◆ 定长顺序存储表示:将串定义成字符数组,利用串名可以直接访问串值。用这种表示方式,串的存储空间在编译时确定,其大小不能改变。
◆ 堆分配存储方式:仍然用一组地址连续的存储单元来依次存储串中的字符序列,但串的存储空间是在程序运行时根据串的实际长度动态分配的。
◆ 块链存储方式:是一种链式存储结构表示。
//串的定长顺序存储表示
#define MAX_STRLEN 256
typedef struct{
char str[MAX_STRLEN] ;
int length;
} StringType ;
//串的堆分配存储表示
typedef struct{
char *ch; /* 若非空,按长度分配,否则为NULL */
int length; /* 串的长度 */
} HString ;
//串的链式存储表示
//⑴ 块结点的类型定义
#define BLOCK_SIZE 4
typedef struct Blstrtype{
char data[BLOCK_SIZE] ;
struct Blstrtype *next;
}BNODE ;
//(2) 块链串的类型定义
typedef struct{
BNODE head; /* 头指针 */
int Strlen ; /* 当前长度 */
} Blstring ;
/*
在这种存储结构下,结点的分配总是完整的结点为单位,因此,为使一
个串能存放在整数个结点中,在串的末尾填上不属于串值的特殊字符,以表示串的终结。
当一个块(结点)内存放多个字符时,往往会使操作过程变得较为复杂,
如在串中插入或删除字符操作时通常需要在块间移动字符。
*/