42串的存储结构 串的顺序存储结构 用一组地址连续的存储单元依次存放串中的字 符序列,称为顺序串。 串的链式存储结构 ·链串
11 • 串的顺序存储结构 • 用一组地址连续的存储单元依次存放串中的字 符序列,称为顺序串。 • 串的链式存储结构 • 链串 4.2 串的存储结构
42.1串的顺序存储结构-顺序串 顺序存储采用一般顺序表的存储结构,其类型定义 如下: typedef struct char data MaxSize l; int length ) Astring; data域存储字符串; length域存储字符串的当前长度; Maxsize常量表示允许存储字符串的最大长度; C语言中每个字符串以‘0标志结束 Astring s, 12
12 • 顺序存储采用一般顺序表的存储结构,其类型定义 如下: typedef struct { char data[MaxSize]; int length; } SqString; data域存储字符串;length域存储字符串的当前长度; MaxSize常量表示允许存储字符串的最大长度; C语言中每个字符串以‘\0’标志结束。 • SqString s; 4.2.1 串的顺序存储结构----顺序串
串的顺序存储结构 定长顺序存储表示:事先定义字符串的最大长度 # define maX string255∥用户可能达到的最大串长 typedef unsigned char StringMAX STRING+I; ∥0号单元存放串的长度,字符从1号单元开始存放 “堆”分配存储表示:在程序执行过程中,利用标准函数 malloc和fre动态地分配或释放存储字符串的存储单元,并 以一个特殊的字符(例如’W0)作为字符串的结束标志 称串值共享的存储空间为“堆” typedef struct { char *str;若是非空串,则按串长分配存储区,否则str为NULL int length;/串长度,不包括’W0 aSTring
13 串的顺序存储结构 • 定长顺序存储表示:事先定义字符串的最大长度 #defineMAX_STRING 255 ∥用户可能达到的最大串长 typedef unsigned char String[MAX_STRING+1]; ∥0号单元存放串的长度,字符从1号单元开始存放 • “堆”分配存储表示:在程序执行过程中,利用标准函数 malloc和free动态地分配或释放存储字符串的存储单元,并 以一个特殊的字符(例如’\0’)作为字符串的结束标志 • 称串值共享的存储空间为“堆” typedef struct { char *str; //若是非空串,则按串长分配存储区,否则str为NULL int length; //串长度,不包括’\0’ }HString;
(1) StrAssign(, cstr) 将一个字符串常量赋给串s,即生成一个其值等于 cstr的串S。 void StrAssign(sqstring &s, char cstr int for(i=0; cstr!=10; i++) Sdata=cstr; s.eng otha
14 (1) StrAssign(s,cstr) 将一个字符串常量赋给串s,即生成一个其值等于 cstr的串s。 void StrAssign(SqString &s,char cstr[]) { int i; for (i=0;cstr[i]!='\0';i++) s.data[i]=cstr[i]; s.length=i; }
(2)StrCopy(s, t) 将串复制给串S void StrCopy( Astring&s, Astring t)/s为引用型参数 i int i; for(i=0; i<t length; i++) Sdata i=tdata; s length=t length; 15
15 (2) StrCopy(s,t) 将串t复制给串s。 void StrCopy(SqString &s,SqString t) //s为引用型参数 { int i; for (i=0;i<t.length;i++) s.data[i]=t.data[i]; s.length=t.length; }