您的位置:首页 > 理论基础 > 数据结构算法

数据结构-串的复习

2011-05-15 23:04 190 查看
先简单介绍一下串,其实串就是我们一般所说字符串,是由多个字符组成的有限序列,‘aasddsfasdggsa',就是一个字符串,串的逻辑结构和线性表很类似,仅仅是串的数据对象限制为字符,然而,串的操作与线性表差别很大,串,想象也知道,是对一串字符操作,而线性表,大都对一个,单个字符进行插入,查询,查找的操作。

下面我将定义串的类型,其实平常我们用数组存储一段字符,就是串的存储,不过我们重新定义了

typedef unsigned char SString[Maxsize+1];

Maxsize为最大长度,可任意定义,而且串的大小也可以随意,不过超过长度的将不会被存储,这是静态存储最大的弊端,不过静态存储的速度很快,

还有一种对串的存储方法,动态存储,动态分配内存,串无限长,没有限制,虽然速度慢些,但实际还是主要使用它,因此我们着重介绍他。

首先定义类型

typedef struct{
char *data;
int length;
}HString;

然后生成串,
void StrAssign(HString &t,char *c){
int i=0,j=0;
if(t.data)
free(t.data);
for(;c!='/0';c++){
i++;
}
i=i-1;//因为i包括了'/0'结束符,要减去
if(!i){
t.data=NULL;
t.length=0;
}
else{
if(!(t.data=(char *)malloc(i*sizeof(char))))
exit(0);//判断是否产出分配内存范围,并重新分配内存,若分配不成功则退出
for(;j<=i;j++){
t.data[j]=c[j];
}
t.length=i;
}
}//create a HString as string c


对串的操作主要有求串的长度,串的就比较,清空串,连接串,插入子串,下面我将完成这些函数

int StrLength(HString t){
return t.length;
}//return the length of the string

bool StrCompare(HString a,HString b){
int i=0;
for(;i<a.length&&a/i<b.length){
if(a.data[i]!=b.data[i])
return 0;
}
return 1;
}//Compare two string ,if equal ,return 1,if not, return 0

void ClearString(HString &t){
if(t.data){
free(t.data);
t.data=NULL;
}
t.length=0;
}//clear the string

void Concat(HString &t,HString a,HString b){
int i=0;
if(t.data)
free(t.data);
if(!(t.data=(char *)malloc((a.length+b.length)*sizeof(char))))
exit(0);
for(i=0;i<a.length;i++){
t.data[i]=a.data[i];
}
t.length=a.length+b.length;
for(i=0;i<b.length;i++){
t.data[i]=b.data[i];
}
}//cat a string and b string to string t

void SubString(HString &t,HString a,int pos,int len){
int i=0;
if(pos<1||pos>a.length||len<0||len>a.length-pos+1)
exit(0);
if(t.data)
free(t.data);
if(!len){
t.data=NULL;
t.length=0;
}
else{
for(i=0;i<len;i++){
t.data[i]=a.data[pos+i-1];
}
t.length=len;
}
}//return a string of string a that length is len ,begin from pos


还有一个链表储存的串,

typedef struct chunk{

char ch[Maxsize];

struct chunk *next;

}Chunk;

太麻烦,实用性太低,这里就不介绍了,有兴趣的可以自己查查资料,ok,串的复习到此结束,明天再继续,我要继续研究我的MFC了...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: