目录
一、串的基本概念
1、串是特定结构的线性表
串是由单字符组成的线性表;每个数据元素就是一个单字符。
二、串的顺序存储结构
2.1定长顺序串
1、串的定长顺序存储定义
#define MAXLEN 20
typedef struct{
char ch[MAXLEN];
int len;
}SString;
2 、串的插入
将串由插入前的AB变为ACB(插入部分为C)。
3、串的模式匹配
算法思想:
/*求串t在串s中的位置*/
int StrIndex(SString s,int pos,SString t)
{
int i,j;
/*t空串*/
if(t.len == 0)return 0;
i = pos;
j = 0;
while(j<s.len && j<t.len){
/*相等指针均往后移*/
if(s.ch[i] == t.ch[j]){
i++;
j++;
}else{
/*不相等s的指针向后移一位,t的指针初始化*/
i = i-j+1;
j = 0;
}
}
if(j >= t.len)return(i-j);//找到了
else
return -1;//没找到
}
2.2堆串
堆:系统将一个地址连续、容量很大的存储空间作为字符串的可用空间。
每建立新串时,需提供串值的起始位置指针和串长度,系统从堆串区分配空间。
1、堆串的存储表示
typedef struct
{
char *ch;
int len;
}HString;
其中len指示串的长度;ch域指示串的起始地址。
三、串的链式存储及串的应用
定义:串的链式存储
单个结点称为块,包括两个域:data、next
结点大小:data域存放字符的个数
链域大小:next域占用字符个数
块链结构:是一个链表,需要头尾指针
块链结构可定义为如下:
#define BLOCK_SIZE 4
typedef struct Block{
char ch[BLOCK_SIZE];
struct Block *next;
}Block;
typedef struct{
Block *head;
Block *tail;
int len;
}BLString;
3.1串的应用