#define MAX_STRLEN  256

typedef  struct

         char  str[MAX_STRLEN] ;

         int  length;

} StringType ;  

 

1  串的联结操作

Status  StrConcat ( StringType  s, StringType t)

/*  将串t联结到串s之后,结果仍然保存在s中  */

         int i,  j ;

         if ((s.length+t.length)>MAX_STRLEN)  Return ERROR ;   /*  联结后长度超出范围  */

        for (i=0 ; i

                   s.str[s.length+i]=t.str[i] ;   /*  串t联结到串s之后  */

         s.length=s.length+t.length ;  /* 修改联结后的串长度 */

         return OK ;

}

 

2   求子串操作

Status SubString (StringType s, int pos, int len, StringType *sub)

         int k,  j ;

         if (pos<1||pos>s.length||len<0||len>(s.length-pos+1))  return ERROR ;   /*  参数非法  */

         sub->length=len-pos+1 ;   /*  求得子串长度  */

         for (j=0, k=pos ; k<=leng ; k++, j++)

                   sub->str[j]=s.str[i] ;   /*  逐个字符复制求得子串  */

         return OK ;

}

 

串的堆分配存储表示

typedef  struct

         char *ch;    /*  若非空,按长度分配,否则为NULL */

         int length;      /*  串的长度  */

} HString ;

 

1  串的联结操作

Status  Hstring  *StrConcat(HString  *T, HString *s1, HString *s2)

/*  用T返回由s1和s2联结而成的串  */ 

{  

         int k,  j , t_len ;

         if (T.ch)  free(T);     /*  释放旧空间   */

         t_len=s1->length+s2->length ;

         if ((p=(char *)malloc(sizeof((char)*t_len))==NULL)

         {  

                   printf(“系统空间不够,申请空间失败 !\n”) ;

                   return ERROR  ;    

         }

         for (j=0 ; jlength; j++)

                   T->ch[j]=s1->ch[j] ;    /*  将串s复制到串T中 */

         for (k=s1->length, j=0 ; jlength; k++, j++)

                   T->ch[j]=s1->ch[j] ;    /*  将串s2复制到串T中 */

         free(s1->ch) ;

         free(s2->ch) ;

         return OK ;  

}

 

串的链式存储表示

⑴ 块结点的类型定义

#define BLOCK_SIZE  4

typedef  struct  Blstrtype

         char  data[BLOCK_SIZE] ;

         struct  Blstrtype  *next;

}BNODE ;

 

(2)  块链串的类型定义

typedef  struct

         BNODE  *head;     /*  头指针  */

    int  Strlen ;        /*  当前长度  */

} Blstring ;

 

你可能感兴趣的:(数据结构,算法分析与设计,struct,null,存储)