数据结构-串的复习
2011-05-15 23:04
190 查看
先简单介绍一下串,其实串就是我们一般所说字符串,是由多个字符组成的有限序列,‘aasddsfasdggsa',就是一个字符串,串的逻辑结构和线性表很类似,仅仅是串的数据对象限制为字符,然而,串的操作与线性表差别很大,串,想象也知道,是对一串字符操作,而线性表,大都对一个,单个字符进行插入,查询,查找的操作。
下面我将定义串的类型,其实平常我们用数组存储一段字符,就是串的存储,不过我们重新定义了
typedef unsigned char SString[Maxsize+1];
Maxsize为最大长度,可任意定义,而且串的大小也可以随意,不过超过长度的将不会被存储,这是静态存储最大的弊端,不过静态存储的速度很快,
还有一种对串的存储方法,动态存储,动态分配内存,串无限长,没有限制,虽然速度慢些,但实际还是主要使用它,因此我们着重介绍他。
首先定义类型
typedef struct{
char *data;
int length;
}HString;
然后生成串,
对串的操作主要有求串的长度,串的就比较,清空串,连接串,插入子串,下面我将完成这些函数
还有一个链表储存的串,
typedef struct chunk{
char ch[Maxsize];
struct chunk *next;
}Chunk;
太麻烦,实用性太低,这里就不介绍了,有兴趣的可以自己查查资料,ok,串的复习到此结束,明天再继续,我要继续研究我的MFC了...
下面我将定义串的类型,其实平常我们用数组存储一段字符,就是串的存储,不过我们重新定义了
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了...
相关文章推荐
- 数据结构复习笔记— —堆
- 面试复习-------算法与数据结构------字符串
- 数据结构之堆的复习
- 【数据结构机试复习11】 soj-1021.Couples 栈
- 数据结构复习之C语言指针与结构体
- 数据结构复习笔记二:栈与队列
- 数据结构复习笔记:C++程序设计(一)
- 【数据结构复习】(1)绪论
- 数据结构复习笔记 1
- 【NOIp复习】数据结构复习列表
- 数据结构排序复习 OC实现
- 数据结构复习1——链表反转
- 数据结构考研复习--线性表2
- 复习数据结构:排序算法(五)——快速排序的各种版本
- 数据结构复习(重写某些重要数据结构API) ------------队列
- 数据结构复习计划(考研)
- 数据结构常用算法复习---快速排序
- 好久没有复习数据结构了 简单复习树转双链表
- 复习(数据结构):线性表 : C
- 数据结构复习之串