笔记:C#_数据结构_串存储结构:字符串

简介:串存储结构(Character string)

码头:

副官:
船长,接下来我们上船出海,探索一下这片海域,开拓一条新航线吧!
参考书架:
1 解学武:字符串 2 简明魔法

扬帆启航码头上岸

海域等级 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种结构:顺序存储,链表存储,堆存储
顺序表示
链式表示
堆表示
顺序存储结构
链式存储结构
堆存储结构
紧缩存储
非紧缩存储
紧缩存储2
非紧缩存储2
顺序表示链式表示堆表示
特点:字编址特点:插入、删除操作效率高;存储空间的利用率低屏蔽顺序与链式的缺点
顺序表示
串的定长顺序存储结构:实际是普通数组存储(即静态数组)
有些计算机采用的字编址方式,即数组元素的分量占4个字节。由此产生紧缩和非紧缩存储区别。
紧缩存储:  一个字的存储单元中存放4个字符;
特点:  节省空间,需要二次寻址,牺牲了CPU时间。
非紧缩存储: 一个字的存储单元中只存放1个字符。
特点:  寻址快,浪费空间,存储密度低。
链式表示
串的链块存储结构:实际是链表存储
与顺序存储结构类似也有紧缩和非紧缩存储结构的区别。插入、删除操作效率高;存储空间的利用率低;
对于紧缩存储 存储利用率是 50% (data 域4个字节,指针域也4个字节);
对于非紧缩存储 存储利用率是20% (8个字节只存放一个字符)。
堆表示
堆存储结构:实际是动态数组存储
串的顺序存储和链表存储各有利弊,在实际应用中常采用一种动态存储结构,称其为堆结构。定义一个很大的连续空间和相应的指针结构。指针用来指示串在堆中的位置;
例如,设有 a=‘BEI’,b=‘ JING’,c=‘’,d=‘SHANGHAI’;
返航

海域等级 Lv4:深海域

任务:
目前全新的航线已经就在眼前,坚持向前。
四星任务:☆ ☆ ☆ ☆ 新航线
程序分区
通常,编程语言会将程序占有的内存空间分成多个不同的区域,
程序包含的数据会被分门别类并存储到对应的区域。
拿 C 语言来说,程序会将内存分为 4 个区域,
分别为 堆区、栈区、数据区和代码区
堆存储:使用动态数组实现
其核心特点是动态扩容
链式存储:链表存储实现
根据实际需要,你也可以自行决定所用链表的结构(双向链表还是单链表,有无头节点)
这里已无头节点为例
单链表
单链表中的 “单” 强调的仅仅是链表各个节点只能有一个指针,并没有限制数据域中存储数据的具体个数。因此在设计链表节点的结构时,可以令各节点存储多个数据。
在这里插入图片描述
从图 2 可以看到,使用链表存储字符串,其最后一个节点的数据域不一定会被字符串全部占满,对于这种情况,通常会用 ‘#’ 或其他特殊字符(能与字符串区分开就行)将最后一个节点填满。
初学者
可能会问,使用块链结构存储字符串时,怎样确定链表中节点存储数据的个数呢?
链表各节点存储数据个数的多少可参考以下几个因素:
串的长度和存储空间的大小:若串包含数据量很大,且链表申请的存储空间有限,此时应尽可能的让各节点存储更多的数据,提高空间的利用率(每多一个节点,就要多申请一个指针域的空间);反之,如果串不是特别长,或者存储空间足够,就需要再结合其他因素综合考虑;
程序实现的功能:
如果实际场景中需要对存储的串做大量的插入或删除操作,则应尽可能减少各节点存储数据的数量;反之,就需要再结合其他因素。
综上
以上两点仅是目前想到影响节点存储数据个数的因素,在实际场景中,还需结合实现环境综合分析。

恭喜:新航线建立

请您运用刻意练习,开启巡航模式!
需要探索更深的海域,请关注航线的拓展。
返航
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值