数据结构(C语言)中的串的首位是不是存的串的长度???

来源:百度知道 编辑:UC知道 时间:2024/05/28 18:58:50
RT
Status StrAssign(SString T,char *chars)
{ /* 生成一个其值等于chars的串T */
int i;
if(strlen(chars)>MAXSTRLEN)
return ERROR;
else
{
T[0]=strlen(chars);
for(i=1;i<=T[0];i++)
T[i]=*(chars+i-1);
return OK;
}
}

我看的书是<数据结构>(C语言版),严蔚敏著.刚看到串这一张,程序是网上下的与书配套的C原程序.后面的很多操作基于把第一位存长度的基础上的:
串连接
Status Concat(SString T,SString S1,SString S2) /* 算法4.2改 */
{ /* 用T返回S1和S2联接而成的新串。若未截断,则返回TRUE,否则FALSE */
int i;
if(S1[0]+S2[0]<=MAXSTRLEN)
{ /* 未截断 */
for(i=1;i<=S1[0];i++)
T[i]=S1[i];
for(i=1;i<=S2[0];i++)
T[S1[0]+i]=S2[i];
T[0]=S1[0]+S2[0];
return TRUE;
}
else
{ /* 截断S2 */
for(i=1;i<=S1[0];i++)
T[i]=S1[i];
for(i=1;i<=MAXSTRLEN-S1[0];i++)
T[S1[0]+i]=S2[i];

回答补充问题:
你说的串和我说的不一样.
你说的这种情况一般出现在2维哈希表首节点,在首节点标明后续节点个数.
我不知道你的参考程序来自哪里,但不得不指出,这种写法是很不规范的.

不是,一般长度会保存在一个堆结构中描述,堆结构地址一般在串地址之前一点的空间,这个堆结构会保存在一个堆管理链表中,做为一个节点