玖叶教程网

前端编程开发入门

数据结构学习笔记(十三)——顺序串

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");

}

}

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言