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){
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){
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){
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){
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.块链存储表示 略