数据结构—串

155 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第14天,点击查看活动详情

前言

今天开始总结串的知识,串这个数据结构不像栈与队列或者数组,有那么多明显的应用。串的应用暗藏在每一道题目之中,比如各种字符串API,在解题时只是一小步,但必不可缺。

串的定义

由零个或多个字符组成的有限序列

串的抽象数据类型定义

ADT string {
    StrAssign(&T,chars); //串赋值,生成一个值等于chars的串T
    StrCompare(S,T); //串比较,若S>T,返回值>0……
    StrLength(S); //求串长
    Concat(&T,S1,S2); //串连接,用T返回S1+S2的新串
    SubString(&Sub,S,pos,len); //求S中pos位置起长度为len的子串 ……
    Index(S,T,pos); //返回子串T在主串S中pos字符之后首次出现的位置
    Replace(&S,T,V); //用子串V代替串S中所有的子串T
}string

串的表示和实现

顺序存储

定长顺序存储

用一组地址连续的存储单元存储串值的字符序列。

这种方式是按照定义的大小,为每个定义的串变量分配一个固定长度的存储区,可用定长数组描述。但是这种存储方式存储超长字符不方便。由此出现堆分配存储

堆分配存储

仍以一组地址连续的存储单元存放串值字符序列,但存储空间是在程序执行过程中动态分配而得。

链式存储

串的块链存储

存储密度= 串值所占的存储位/实际分配的存储位

image.png

这种方式虽然存储方便,但是有可能占据过多空间,实际运用中要根据存储密度合理规划存储方案。

串的应用

串的最主要应用就是模式匹配算法,这个虽然弄懂了,但是还不能很好的解释明白,等我再看看大佬的方案再来分享。