数据结构C语言版串的定长顺序存储表示和实现.doc
文本预览下载声明
#includestdio.h
#includestdlib.h
#includestring.h
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW -2
#define MAXSTRLEN 255
typedef int ElemType;
typedef int Status;
typedef unsigned char SString[MAXSTRLEN+1];
//串赋值操作
Status StrAssign(SString T,char chars[]){
// 生成一个其值等于chars的串T
int i;
if(strlen(chars)MAXSTRLEN)
return ERROR;
T[0]=strlen(chars);
for(i=0;i=T[0];i++){
T[i+1]=chars[i];}
return OK;
}//StrAssign
//输出串
void StrPrint(SString S){
int i;
for(i=1;i=S[0];i++){
printf(%c,S[i]);
}
printf(\n);
}//PrnStr
//串复制操作
Status StrCopy(SString T,SString S){
// 由串S复制得串T
int i;
for(i=1;i=S[0];i++)
T[i]=S[i];
T[0]=S[0];
return OK;
}//StrCopy
//判空操作
Status StrEmpty(SString S){
if(S[0]==0)
return OK;
else
return ERROR;
}//StrEmpty
//串比较操作
int StrCompare(SString S,SString T){
int i;
for(i=1;i=S[0]i=T[0];++i)
if(S[i]!=T[i])
return S[i]-T[i];
return S[0]-T[0];
}//StrCompare
//求长度操作
int StrLength(SString S){
return S[0];
}//StrLength
//串连接操作
Status Concat(SString T,SString S1,SString S2){
int i;
Status uncut;
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];
uncut=TRUE;
}
else if(S1[0]MAXSTRLEN){
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];}
T[0]=MAXSTRLEN;
uncut=FALSE;
}
else{
for(i=0;i=MAXSTRLEN;i++){
T[i]=S1[i];}
uncut=FALSE;
}
return uncut;
}//Concat
//取子串操作
Status SubString(SString Sub,SString S,int pos,int len){
int i;
if(pos1||posS[0]||len0||lenS[0]-pos+1)
return ERROR;
for(i=1;i=len;i++){
Sub[i]=S[pos+i-1];}
Sub[0]=len;
return OK;
}//SubString
//求子串位置操作
int Index(SString S,SString T,int pos){
int i,j;
i=pos;
j=1;
while(i=S[0]j=T[0]){
if(S[i]==T[j]) {
++i;
++j;
}
else{// 指针后退重新开始匹配
显示全部