类似于线性表的顺序存储结构,用一组地址连续的存储单元存储串值的字符序列.
#define MAXSTRLEN 255
typedef unsigned char SString[MAXSTRLEN+1] //0号单元存放串长
串的实际长度可在这予定义长度的范围内随意,超过予定义长度的串值则被舍去
串长可用下标为0的数组元素存储,也可在串值后设特殊标记
a[0]
a[1]
a[2]
a[3]
a[4]
a[5]
...
a[n]
3
a
b
c
pascal
a
b
c
\0
c
1串联接的实现Concat(&T,S1,S2)
假设S1,S2和T都是SString型的串变量,且串T是由串S1联结串S2得到的,即串T的值的前一段和串S1的值相等,串T的值的后一段和串S2的值相等,则只要进行相应的"串值复制"操作即可,对超长部分实施"截断"操作
以下是串联接可能出现的三种情况:
S1
S2
T
4
2
6
a
d
a
b
e
b
c
c
d
d
e
f
S1,S2串长和小于最大值
S1
S2
T
6
6
8
a
g
a
b
h
b
c
i
c
d
j
d
e
k
e
f
l
f
g
h
S1,S2串长和超过最大串长
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串长已等于最大串长
算法描述如下:
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;
}
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;
}
上一篇:数据结构教程 第十八课 数组的顺序表示与实现
下一篇:数据结构教程 第十四课 串的定义