数据结构15-串的表示和实现.
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
S1,S2 串长和小于 最大值
算法描述如下:
Status Concat(SString &T,SString S1,SString S2){
if(S1[0]+S2[0]<=MAXSTRLEN){
T[1..S1[0]]=S1[1..S1[0]]; T[S1[0]+1..S1[0]+S2[0]]=S2[1..S2[0]]; T[0]=S1[0]+S2[0]uncut=TRUE; }
exit(OVERFLOW);
for(i=S.length-1;i>=pos-1;--i) S.ch[i+T.length]=S.ch[i]; S.ch[pos-1..pos+T.lenght-2]=T.ch[0..T.length-1]; S.length+=T.length; } return OK;
else if(S1[0]<MAXSTRSIZE){ T[1..S1[0]]=S1[1..S1[0]]; T[S1[0]+1..MAXSTRLEN]=S2[1..MAXSTRLEN-S1[0]]; T[0]=MAXSTRLEN;uncut=FALSE; } else{ T[0..MAXSTRLEN]=S1[0..MAXSTRLEN]; uncut=FALSE; } return uncut; }
typedef struct{ char *ch;//若是非空串,则按串长分配存储区,否则ch为NULL int length; //串长度 }HString
Status StrInsert(HString &S,int pos,HString T){ if(pox<1||pos>S.length+1) return ERROR; if(T.length){ if(!(S.ch=(char *)realloc(S.ch,(S.length+T.length)*sizeof(char))))
数
据
结
构
第十五课 串的表示和实现
第十六课 串的表示和实现
本课主题: 串的表示和实现 教学目的: 掌握串的几种实现方法 教学重点: 定长顺序存储表示法堆分配存储表示法 教学难点: 堆分配存储表示法
授课内容:
复习串的定义
一、定长顺序存储表示
类似于线性表的顺序存储结构,用一组地址连续的存 储单元存储串值的字符序列.
s1 4 a b c d s2 2 e f T 6 a b c d e f T 8 a b c d e f g h S1,S2 串长和超过 最大串长 s1 6 a b c d e f s2 6 g h i j k l s1 s2 T 8 2 8 a i a b j b c c d d e e f f g g h h S1 串长已等于最 大串长
二、堆分配存储表示
这种存储表示的特点是,仍以一组地址连续的存储 单元存放串值字符序列,但它们的存储空间是在程序执 行过程中动态分配而得 堆分配存储结构有顺序顺序存储结构的特点,处 理方便,且操作中对串长没有限制。
在C语言中,存在一个称之为堆的自由存储区,并由C语 言的动态分配函数malloc()和free()来管理.利用函数 malloc()为每个新产生的串分配一块实际串长所需存储空 间,为处理方便,约定串长也作为存储结构的一部分
1.串联接的实现Concat(&T,S1,S2) 假设S1,S2和T都是SString型的串变量,且串T是由 串S1联结串S2得到的,即串T的值的前一段和串S1的 值相等,串T的值的后一段和串S2的值相等,则只要进行 相应的"串值复制"操作即可,对超长部分实施"截断"操 作
以下是串联接可能出现的三种情况:
}Chunk;
typedef struct{
Chunk *head, *tail;
int curlen;
}Lstring; 存储密度=串值所占的存储位/实际分配的存储位。
四、总结
思考两种存储表示方法的优缺点 回目录 上一课 下一课
}
三﹑串的块链存储表示
用链表方式存储串值,每个结点可以存放一个字符,也可以存放多
个字符。
串值在链式存储结构时操作的实现和线性表类似,对连接操作方 便。 #DEFINE typedef struct Chunk{ char ch[CHUNKSIZE]; struct Chunk *next; CHUNKSIZE 80
#define MAXSTRLEN 255 typedef unsigned char SString[MAXSTRLEN+1]
//0号单元存放串长
a[0] 3 a
a[1] a b
a[2] b c
a[3] c \0
a[4]Fra Baidu bibliotek
a[5]
...
a[n] pascal c
串的实际长度可在这予定义长度的范围内随意,超过 予定义长度的串值则被舍去 串长可用下标为0的数组元素存储,也可在串值后设 特殊标记