简介:串存储结构(Character string)
码头:
扬帆启航 | 码头上岸 |
---|
海域等级 Lv1:浅水湾
-
任务:
- 我们在这里只需要初步了解到串存储结构的概念即可
一星任务:☆ 初步了解到 串存储结构 的概念 |
---|
-
串存储结构
- 也是一种线性存储结构,因为字符串中的字符之间也具有"一对一"的逻辑关系。 优点
- 专门用于存储字符串的数据结构,拥有众多的字符操作方法。 描述
- 串结构只用于存储字符类型的数据。
HadesNyx:线性表是基本功,每天坚持做回顾练习。
返航 |
---|
海域等级 Lv2:深水湾
-
任务:
- 到了这里就需要回顾一下
二星任务:☆ ☆ 回顾 |
---|
-
回顾
- 线性表 体现的是数据元素之间的唯一性,连续性(如英文字母表)。 清醒认识
- 字符串本质上还是使用了线性表的方式来实现的,串实际上是线性表的一个特殊应用。 特殊性
-
无论学习哪种编程语言,操作最多的总是字符串。
数据结构中,根据串中存储字符的数量及特点,对一些特殊的串进行了命名
命名:
-
空串:存储 0 个字符的串,例如 S = “”(
双引号紧挨着);
空格串:只包含空格字符的串,例如 S = " "( 双引号包含 5 个空格);
子串和主串:类似 视频剪辑,主串拥有完整视频,子串剪切其中一段。
子串和主串:
-
假设有两个串 sun 和 moon,
如果 sun 中可以找到几个连续字符组成的串与 moon 完全相同,则称 sun 是 moon 的主串,moon 是 sun 的子串。
例如,若 sun = “HelloWorld”,moon = “Hello”,由于 sun 中也包含 “Hello”,因此串 sun 和串 moon 是主串和子串的关系;
返航 |
---|
海域等级 Lv3:浅海域
-
任务:
- 能来到这里说明你对线性表有比较全面的了解了,接下来就是继续深入探索。
三星任务:☆ ☆ ☆ 深入探索结构 |
---|
-
存储结构
- 串有3种结构:顺序存储,链表存储,堆存储
顺序表示 | 链式表示 | 堆表示 |
---|---|---|
特点:字编址 | 特点:插入、删除操作效率高;存储空间的利用率低 | 屏蔽顺序与链式的缺点 |
-
顺序表示
-
串的定长顺序存储结构:实际是普通数组存储(即静态数组)
有些计算机采用的字编址方式,即数组元素的分量占4个字节。由此产生紧缩和非紧缩存储区别。
紧缩存储: 一个字的存储单元中存放4个字符;
特点: 节省空间,需要二次寻址,牺牲了CPU时间。
非紧缩存储: 一个字的存储单元中只存放1个字符。
特点: 寻址快,浪费空间,存储密度低。
链式表示
-
串的链块存储结构:实际是链表存储
与顺序存储结构类似也有紧缩和非紧缩存储结构的区别。插入、删除操作效率高;存储空间的利用率低;
对于紧缩存储 存储利用率是 50% (data 域4个字节,指针域也4个字节);
对于非紧缩存储 存储利用率是20% (8个字节只存放一个字符)。
堆表示
-
堆存储结构:实际是动态数组存储
串的顺序存储和链表存储各有利弊,在实际应用中常采用一种动态存储结构,称其为堆结构。定义一个很大的连续空间和相应的指针结构。指针用来指示串在堆中的位置;
例如,设有 a=‘BEI’,b=‘ JING’,c=‘’,d=‘SHANGHAI’;
返航 |
---|
海域等级 Lv4:深海域
-
任务:
- 目前全新的航线已经就在眼前,坚持向前。
四星任务:☆ ☆ ☆ ☆ 新航线 |
---|
-
程序分区
-
通常,编程语言会将程序占有的内存空间分成多个不同的区域,
程序包含的数据会被分门别类并存储到对应的区域。
拿 C 语言来说,程序会将内存分为 4 个区域,
分别为 堆区、栈区、数据区和代码区
堆存储:使用动态数组实现
- 其核心特点是动态扩容 链式存储:链表存储实现
-
根据实际需要,你也可以自行决定所用链表的结构(双向链表还是单链表,有无头节点)
这里已无头节点为例
单链表
-
单链表中的 “单” 强调的仅仅是链表各个节点只能有一个指针,并没有限制数据域中存储数据的具体个数。因此在设计链表节点的结构时,可以令各节点存储多个数据。
从图 2 可以看到,使用链表存储字符串,其最后一个节点的数据域不一定会被字符串全部占满,对于这种情况,通常会用 ‘#’ 或其他特殊字符(能与字符串区分开就行)将最后一个节点填满。
初学者
- 可能会问,使用块链结构存储字符串时,怎样确定链表中节点存储数据的个数呢? 链表各节点存储数据个数的多少可参考以下几个因素:
- 串的长度和存储空间的大小:若串包含数据量很大,且链表申请的存储空间有限,此时应尽可能的让各节点存储更多的数据,提高空间的利用率(每多一个节点,就要多申请一个指针域的空间);反之,如果串不是特别长,或者存储空间足够,就需要再结合其他因素综合考虑; 程序实现的功能:
- 如果实际场景中需要对存储的串做大量的插入或删除操作,则应尽可能减少各节点存储数据的数量;反之,就需要再结合其他因素。 综上
- 以上两点仅是目前想到影响节点存储数据个数的因素,在实际场景中,还需结合实现环境综合分析。
恭喜:新航线建立
-
请您运用刻意练习,开启巡航模式!
- 需要探索更深的海域,请关注航线的拓展。
返航 |
---|