串的存储结构(堆串)
一、堆串简介
串的堆存储结构,与定长顺序串的存储结构类似,都是用一维数组地址连续的存储单元存储串的字符序列,不同的是堆串的存储空间是在程序执行过程中动态分配的。 在系统中存在一个称为“堆”的自由存储区,每当建立一个新串时,可以通过动态分配函数从这个空间中分配一块实际串所需的存储空间,来存储新的串值。只要空间能分配成功,则在操作的过程中就不会发生“截断”的情况。C语言采用malloc()、free()等函数完成动态存储管理。
二、堆串存储结构
代码语言:javascript复制typedef struct {
char *ch;//若是非空串,则是指向串的起始地址;否则为空
int len;//字符串的长度
}HString;
为了便于理解和讨论,这里在给串分配存储空间时,在实际串长的基础上多分配一个存储空间,且连续空间的第0号单元不使用。
三、堆串基本操作的实现(VS2017开发环境)
这里也包含了KMP和BF模式匹配部分的代码,头文件如下:
代码语言:javascript复制#pragma once
#include<windows.h>
typedef struct {
char *ch;//若是非空串,则是指向串的起始地址;否则为空
int len;//字符串的长度
}HString;
//串初始化函数
void HStrInit(HString *S) {
S->ch = NULL;
S->len = 0;
}
//串赋值函数
int HStrAssign(HString *S, const char *chars) {
int i = 0;
if (NULL == chars || NULL == S) {
return 0;
}
else {
while (chars[i] != '