数据结构基础之串

来源:互联网 发布:乔治格文2k数据 编辑:程序博客网 时间:2024/06/05 03:28

串是由零个或多个字符组成的有限序列,可以认为是由字符组成的线性表

基本操作如下:

#define MaxLen 80typedef struct{//定义串的数据结构char str[MaxLen];int length;}SeqString;void StrAssign(SeqString *s,char cstr[]){//串的赋值int i;for(i=0;cstr[i]!='\0';i++){s->str[i]=sctr[i]; //常量cstr中的字符赋给s中}s->length=i;}int StrEmpty(SeqString s){//串为空返回1,if(s.length==0)return 1;elsereturn 0;}int StrLength(SeqString s){return s.length;//在StrAssign中已经记录了length的值}void StrCopy(SeqString *T,SeqString s){//串的复制操作int i;for(i=0;i<s.length;i++)T->str[i]=s.str[i];T->length=s.length;//字符串cstr及length都复制}int StrCompare(SeqString s,SeqString T){int i;for(i=0;(i<s.length)&&(i<T.length);i++)//取两者中的最小值if(s.str[i]!=T.str[i])return (s.str[i]-T.str[i])//若有不同,返回两个字符的差值return (s.length-T.length);//T为s的子串,返回相差的字母数}int StrInsert(SeqString *s,int pos,SeqString T){//串的插入,在s中插入T分为三种情况int i;if(pos<0||pos-1>s->length){printf("插入的位置不对");return 0;}if(s->length+T.length<=MaxLen)//情况1,子串插入后,总串长小于等于Maxlen{       //在插入之前,s中pos后的字符向后移动len个位置for(i=s->length+T.length-1;i>=pos+T.length-1;i--){s->str[i]=s->str[i-length];}//将T插入到s中for(i=0;i<T.length;i++){s->str[pos+i-1]=T.str[i];}s->length=s->length+T.length;return 0;}else if(pos+T.length<=MaxLen)//情况2,子串可以插入到s中,但s中的字符会被截掉{  //pos以后的后移for(i=MaxLen-1;i>T.length+pos-1;i--)s->str[i]=s->str[i-T.length];for(i=0;i<T.length;i++)s->str[pos+i-1]=T.str[i];s->length=MaxLen;return 0;}//情况3,子串T不能被完全插入到s中else{for(i=0;i<MaxLen-pos;i++)s->str[i+pos-1]=T.str[i];s->length=MaxLen;return 0;}}int StrDelete(SeqString *s,int pos,int len){//s中删除pos开始的len个字符int i;if(pos<0||len<0||pos+len-1>length){printf("删除位置不正确");return 0;}else//这里也可以根据位置细分{for(i=pos+len;i<=s->length-1;i++)s->str[i-len]=s->str[i];s->length=s->length-len;return 1;}}int StrConcat(SeqString *T,SeqString s){//串s接在串T的末尾int i ,flag;//情况1,连接后的总长度小于等于Maxlenif(T->length+s.length<=MaxLen){for(i=T->length;i<T->length+s->length;i++)T->str[i]=s.str[i-T->length];T->length=T->length+s.length;flag=1;}//情况2,连接后串长大于Maxlen,s部分连接在串T末尾else if(T->length<MaxLen){for(i=T->length;i<MaxLen;i++)T->str[i]=s.str[i-T->length];T->length=MaxLen;flag=0;}return flag;}void StrClear(SeqString *s){//清空串s->length=0;}

0 0
原创粉丝点击