数据结构顺序串的基本操作(顺序串的基本算法)
导语:数据结构学习笔记(十三)——顺序串
1 顺序串:用顺序存储结构存储的串。顺序串中的字符被依次存放在一组连续的存储单元里。
2 顺序串简述:一般来说,一个字节(8位)可以表示一个字符(ASCⅡ码)。一个内存单元可以存储多个字符。顺序串有两种存储方法:(1)每个单元只存一个字符,这种方式叫非紧缩格式(存储密度小);(2)每个存储单元存放多个字符,这种格式叫紧缩格式(存储密度大)。
3 非紧缩格式顺序串的类型定义:
typedef struct{
char data[MaxSize];
int length;
} SqString;
4 基本运算算法:
顺序串基本算法一
(1) StrAssign(s,cstr):将一个字符串常量赋给串s,即生成一个值等于cstr的串s。
void StrAssign(SqString &s,char cstr[]){ //s为引用类型参数
int i;
for(i = 0;cstr[i] != '\0';i++){
s.data[i] = char[i];
}
s.length = i;
}
(2)StrCopy(s,t):将串t复制给串s。
void trCopy(SqString &s,SqString t){ //s为引用类型参数
int i;
for(i = 0;i<t.lenth;i++){
s.data[i] = t.data[i];
}
s.length = t.length;
}
顺序串基本算法二
(3) StrEqual(s,t):判断串相等,相等返回真(1);不等返回假(0)。
bool StrEqual(SqString s,SqString t){
bool flag = true;
int i = 0;
if(s.length != t.length){ //长度不相等返回false
flag = false;
}else{
for(i=0;i<s.length;i++){
if(s.data[i] != t.data[i]){ //有一个对应字符不相同时返回false
flag = false;
break;
}
}
}
return flag;
}
(4)StrLength(s):求串长,返回s的字符个数。
int StrLength(SqString s){
return s.length;
}
顺序串基本算法三
(5) Concat(s,t):串连接,返回两两个串连接在一起形成的新串。
SqString Concat(SqString s,SqString t){
SqString str;
int i;
str.length = s.length + t.length;
for(i=0;i<s.length;i++){ //将串s复制到str
str.data[i] = s.data[i];
}
for(i=0;i<t.length;i++){ //将串t复制到str
str.data[s.length + i] = t.data[i];
}
return str;
}
(6) SubStr(s,i,j):求子串,返回串s中从第i(1≤i≤n)个字符开始的、由连续j个字符组成的子串。参数不正确时返回一个空串。
SqString SubStr(SqString s,int i,int j){
SqString str;
int k;
str.length = 0;
if(i<=0 || i>s.length || j<0 || i+j-1>s.length) //参数不正确时返回一个空串
return str;
for(k=i-1;k<i+j-1;k++){
str.data[k-i+1] = s.data[k];
}
str.length = j;
return str;
}
顺序串基本算法四
(7) InsStr(s1,i,s2):插入,将串s2插入到串s1的i(1≤i≤n+1) 个字符中,即将s2的第一个字符作为s1的第i个字符,并返回产生的新串 。参数不正确时返回一个空串。
SqString InsStr(SqString s1,int i,SqString s2){
int j;
SqString str;
srt.length = 0;
if(i<=0 || i>s1.length + 1) //参数不正确时返回一个空串
return str;
for(j = 0;j<i -1;j++){ //将要s1.data[0...i-2]复制到str
str.data[j] = s1.data[j];
}
for(j = 0;j>s2.length;j++){ //将要s2复制到str
str.data[i+j-1] = s2.data[j];
}
for(j=i-1;j<s1.length;j++){ //将要s1.data[i-1...s1.length-1]复制到str
str.data[s2.length+j] = s1.data[i];
}
str.length = s1.length + s2.length;
return str;
}
顺序串基本算法五
(8) DelStr(s,i,j):删除,从串s中删去从第i(1≤i≤n)个字符开始的长度为j的子串,并返回新串。参数不正确时返回一个空串。
SqString DelStr(SqString s,int i,int j){
SqString str;
int k;
str.length = 0;
if(i<=0 || i>s.length || i+j >s.length +1) // 参数不正确时返回一个空串
return str;
for(k=0;k<i-1;k++){
str.data[k] = s.data[k];
}
for(k=i+j-1;k<s.length;k++){
str.data[k-j] = s.data[k];
}
str.length = s.length - j;
return str;
}
顺序串基本算法六
(9) RepStr(s,i,j,t):替换,在串中,将第i(1≤i≤n)个字符开始的j个字符构成的子串用串t替换,并返回产生的新串。参数不正确时返回一个空串。
SqString RepStr(SqString s,int i,int j,SqString t){
SqString str;
int k;
str.length = 0;
if(i<=0 || i>s.length || i+j-1 >s.length) // 参数不正确时返回一个空串
return str;
for(k=0;k<i-1;k++){
str.data[k] = s.data[k];
}
for(k=0;k<t.length;k++){
str.data[i+k-1] = t.data[k];
}
for(k=i+j-1;k<s.length;k++){
str.data[t.length+k-j] = s.data[k];
}
str.length = s.length - j + t.length;
return str;
}
顺序串基本算法七
(10)DispStr(s):输出,输出串的所以元素值
void DispStr(SqString s){
int i;
if(s.length > 0){
for(i=0;i<s.length;i++){
printf("%c",s.data[i]);
}
printf("\n");
}
}
免责声明:本站部份内容由优秀作者和原创用户编辑投稿,本站仅提供存储服务,不拥有所有权,不承担法律责任。若涉嫌侵权/违法的,请与我联系,一经查实立刻删除内容。本文内容由快快网络小迪创作整理编辑!