数据结构---三--字符串

Posted dagailun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构---三--字符串相关的知识,希望对你有一定的参考价值。

  数据结构中,字符串要单独用一种存储结构来存储,称为串存储结构。这里的串指的就是字符串。

  严格意义上讲,串存储结构也是一种线性存储结构,因为字符串中的字符之间也具有一对一的逻辑关系,只不过,与之前所学的线性存储结构不同,串结构只用于存储字符类型的数据。

====串存储结构的具体实现

  存储一个字符串,数据结构包含以下3中具体存储结构;

    1.定长顺序存储:实际上就是用普通数组(又称静态数组)存储。

    2. 堆分配存储:用动态数组存储字符串。

    3.块链存储:用链表存储字符串。

===

  静态数组:长度是固定的。

  动态数组:使用malloc 和free函数动态申请和释放空间,动态数组的长度是可变的。

  串的定长顺序存储结构:可以简单地理解为采用固定长度的顺序存储结构来存储字符串,因此限定了其底层实现只能使用静态数组。

===

  串的堆分配存储,其具体实现方式是采用动态数组存储字符串。

  通常,编程语言会将程序占有的内存空间分成多个不同的区域,程序包含的数据会被分门别类存储到对应的区域。拿C语言来说,程序会将内存分为4个区域,分别为堆区,栈区、数据区、代码区。

  与其他区域不同,堆区的内存空间需要程序员手动使用malloc 函数申请,并且在不用后要手动通过free 函数将其释放。

  C语言中使用malloc 函数最多的场景是给数组分配空间,这类数组称为动态数组。

  例如:char *a = (char*) malloc(5*sizeof(char));

  此行代码创建了一个动态数组a,通过malloc 申请了5个char 类型大小的堆存储空间。

  动态数组相比普通数组(静态数组)的优势是长度可变,换句话说,根据需要动态数组可额外申请更多的堆空间。

===串的块链存储结构===

  串的块链存储,指的是使用链表结构存储字符串。

  本节实现串的块链存储使用的是无头节点的单链表。我们知道,单链表中的单强调的仅仅是链表各个节点只能有一个指针,并没有限制数据域中存储数据的具体个数。因此在设计链表节点的结构时,可以令各节点存储多个数据。

  使用链表存储字符串,其最后一个节点的数据域不一定会被字符串全部占满,对于这种情况,通常会用‘#’或其他特殊字符将最后一个节点填满。

 

以上是关于数据结构---三--字符串的主要内容,如果未能解决你的问题,请参考以下文章

数据结构与算法系列研究三——字符串

使用 isTransaction 在 FMDB 数据库中插入三千个字符串数据

MySQL 数据表优化设计(三):CHAR 和 VARCHAR 怎么选?

数据结构和算法学习笔记三:KMP算法

python3基础二——基本的数据类型三

Redis系列三 Redis数据类型