• 本文记录顺序串的数据结构定义及基本操作的算法描述,并对算法进行简单应用。
  • 采用C语言实现。

源程序

//SString.c#include #include /* 状态码 */#define TRUE        1   // 真/是#define FALSE       0   // 假/否#define OK          1   // 通过/成功#define ERROR       0   // 错误/失败/* 状态码类型 */typedef int Status;/* 宏定义 */#define MAXSTRLEN 10                                 // 顺序串的最大串长/* 串的顺序存储类型定义 */typedef unsigned char SString[MAXSTRLEN + 1];         // 0号单元存放串的长度/* 函数声明 */Status StrAssign(SString T, const char* chars);       //构造一个值为chars的串TStatus Concat(SString T, SString S1, SString S2);  //用T返回由S1和S2联结而成的新串。若未截断,则返回TRUE,否则返回FALSEvoid PrintElem(SString S);                      // 测试函数,打印字符串/* 函数定义 */void PrintElem(SString S) {    int i;        for(i = 1; i  MAXSTRLEN) {        return ERROR;    }        T[0] = len;    for(i = 1; i <= len; i++) {        T[i] = chars[i - 1];    }        return OK;}Status Concat(SString T, SString S1, SString S2) {    int i;    int uncut;  // 新串是否完整        // 完全不需要裁剪    if(S1[0] + S2[0] <= MAXSTRLEN) {        // 复制S1到T中        for(i = 1; i <= S1[0]; i++) {            T[i] = S1[i];        }                // 复制S2到T中        for(i = S1[0] + 1; i <= S1[0] + S2[0]; i++) {            T[i] = S2[i - S1[0]];        }                // 设置新长度        T[0] = S1[0] + S2[0];                // 未裁剪,完整        uncut = TRUE;                // 需要裁剪S2    } else if(S1[0] <= MAXSTRLEN) {        // 复制S1到T中        for(i = 1; i <= S1[0]; i++) {            T[i] = S1[i];        }                // 将S2的一部分复制到T中        for(i = S1[0] + 1; i <= MAXSTRLEN; i++) {            T[i] = S2[i - S1[0]];        }                // 设置新长度        T[0] = MAXSTRLEN;                uncut = FALSE;                // 只需要复制S1的一部分    } else {        // 连同长度信息一起复制        for(i = 0; i <= MAXSTRLEN; i++) {            T[i] = S1[i];        }                uncut = FALSE;    }        return uncut;}int main() {    printf("████████ Concat \n");    {        SString Tmp1, Tmp2, Tmp3, Tmp4, S1, S2, S3, S4, S5, S6, S7, S8;                StrAssign(S1, "+++++");        StrAssign(S2, "-----");                printf("█ 联接S1和S2形成 Tmp1 ...\n");        Concat(Tmp1, S1, S2);        printf("█ Tmp1 = ");        PrintElem(Tmp1);StrAssign(S3, "+++++++");        StrAssign(S4, "-----");                printf("█ 联接S3和S4形成 Tmp2 ...\n");        Concat(Tmp2, S3, S4);        printf("█ Tmp2 = ");        PrintElem(Tmp2);StrAssign(S5, "+++++");        StrAssign(S6, "-------");                printf("█ 联接S5和S6形成 Tmp3 ...\n");        Concat(Tmp3, S5, S6);        printf("█ Tmp3 = ");        PrintElem(Tmp3);StrAssign(S7, "+++++++");        StrAssign(S8, "-------");                printf("█ 联接S7和S8形成 Tmp4 ...\n");        Concat(Tmp4, S7, S8);        printf("█ Tmp4 = ");        PrintElem(Tmp4);    }        return 0;}

运行结果

████████ Concat█ 联接S1和S2形成 Tmp1 ...█ Tmp1 = +++++-----█ 联接S3和S4形成 Tmp2 ...█ Tmp2 = +++++++---█ 联接S5和S6形成 Tmp3 ...█ Tmp3 = +++++-----█ 联接S7和S8形成 Tmp4 ...█ Tmp4 = +++++++---