数据结构-字符串

1.堆分配存储表示

#include<iostream>
#include<malloc.h>
#define error 0
#define ok    1
using namespace std;
typedef struct{
    char *ch;
    int length;
}HString;
int StrAssign(HString &T,char *chars){     /// 生成一个只等于 chars 的串
    if(T.ch) free(T.ch);
    int i;
    char *c;
    for(i=0,c=chars;*c;i++,c++);
    if(!i){
        T.ch=NULL;
        T.length=0;
    }
    else{
        if(!(T.ch=new char[i])) exit(error);
        for(int j=0;j<i;j++) T.ch[j]=chars[j];
        T.length=i;
    }
    return ok;
}
int StrLength(HString S){return S.length;}     /// 返回串的长度
int StrCompare(HString S,HString T){          /// 比较串 S 和 T 的大小
    for(int i=0;i<S.length&&i<T.length;i++){
        if(S.ch[i]!=T.ch[i]) return S.ch[i]-T.ch[i];
    }
    return S.length-T.length;
}
int CleaerString(HString &S){        /// 清空串
    if(S.ch) {
        free(S.ch);
        S.ch=NULL;
    }
    S.length=0;
    return ok;
}
int Concat(HString &T,HString S1,HString S2){   /// 返回一个由 S1 和 S2 连接成的新串
    if(T.ch) free(T.ch);
    if(!(T.ch=new char[S1.length+S2.length])) exit(error);
    for(int i=0;i<S1.length;i++) T.ch[i]=S1.ch[i];
    T.length=S1.length;
    for(int i=0;i<S2.length;i++) T.ch[T.length++]=S2.ch[i];
    return ok;
}
int SubString(HString &Sub,HString S,int pos,int len){  ///  返回 pos + len 的子串
    if(pos<1||pos>S.length||len<0||len>S.length-pos+1) return error;
    if(Sub.ch) free(Sub.ch);
    if(!len){Sub.ch=NULL;Sub.length=0;}
    else{
        Sub.ch=new char[len];
        for(int i=pos-1;i<pos+len-1;i++){
            Sub.ch[i-pos+1]=S.ch[i];
        }
        Sub.length=len;
    }
    return ok;
}
int main(){
    HString S;
    return 0;
}

2.块链存储表示 略

猜你喜欢

转载自blog.csdn.net/W_m_3743/article/details/84949637