今天复习了字符串,这一应用日益广泛的数据结构。KMP啥的还都没看,就遇到不少问题,十分感谢期间求助的舍友和好友们。
(一)字符串及其基础操作的实现
1.首先当然是定义字符串结构体(堆分配存储表示)
typedef struct{
char *ch;
int length;
}HString;
还有另一种(块链存储)表示方法:
#define CHUNKSIZE 80 //可由用户定义块的大小
typedef struct Chunk{
char ch[CHUNKSIZE];
struct Chunk *next;
}Chunk;
typedef struct{
Chunk *head,*tail; //串的头尾指针
int curlen; //串的当前长度
}LString;
2.StrAssign——字符串赋值
//为串分配空间、赋值
int StrAssign(HString &T,char *chars){
int i;
// if(T.ch)free(T.ch); //释放T原有空间 【1】
char *c=chars;
for(i=0;*c!='\0';++i,++c); //求chars的长度i
if(!i){
T.ch=NULL;
T.length=0;
}else{
if(!(T.ch=(char*)malloc(i*sizeof(char))))return 0; //分配空间的同时判断是否成功分配
for(int j=0;j<i;j++)
T.ch[j]=chars[j];
T.length=i;
}
return 1;
}
3. StrLength——求字符串长度
//求长度
int StrLength(HString S){
ret