文档详情

数据结构C语言版串的定长顺序存储表示和实现.doc

发布:2016-11-02约4.38千字共6页下载文档
文本预览下载声明
#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{// 指针后退重新开始匹配
显示全部
相似文档