特殊的线性表-串-顺序存储

本文详细介绍了串的存储结构,包括顺序串的概念及其两种存储方式:静态存储分配和动态存储分配。并阐述了每种存储方式的特点及应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  因为串是特殊的线性表,故其存储结构与线性表的存储结构类似。只不过由于组成串的结点是单个字符,所以存储时有一些特殊的技巧。

串的顺序存储

1 、顺序串
 串的顺序存储结构简称为顺序串。
 与顺序表类似,顺序串是用一组地址连续的存储单元来存储串中的字符序列。因此可用高级语言的字符数组来实现,按其存储分配的不同可将顺序串分为如下两类:
 (1)静态存储分配的顺序串
 (2)动态存储分配的顺序串

2、静态存储分配的顺序串
(1)直接使用定长的字符数组来定义
 该种方法顺序串的具体描述:
#define MaxStrSize 256 //该值依赖于应用,由用户定义
typedef char SeqString[MaxStrSize]; //SeqString是顺序串类型
SeqString S; //S是一个可容纳255个字符的顺序串
注意:
 ①串值空间的大小在编译时刻就已确定,是静态的。难以适应插入、链接等操作
 ②直接使用定长的字符数组存放串内容外,一般可使用一个不会出现在串中的特殊字符放在串值的末尾来表示串的结束。所以串空间最大值为MaxStrSize时,最多只能放MaxStrSize-1个字符。

  【例】C语言中以字符'\0'表示串值的终结。


(2)类似顺序表的定义
 直接使用定长的字符数组存放串内容外,可用一个整数来表示串的长度。此时顺序串的类型定义完全和顺序表类似:
typedef struct{
char ch[MaxStrSize]; //可容纳256个字符,并依次存储在ch[0..n]中
int length;
}SeqString;

注意:
 ①串的长度减1的位置就是串值的最后一个字符的位置。
  ②这种表示的优点是涉及串长的操作速度快。

3、动态存储分配的顺序串
 顺序串的字符数组空间可使用C语言的malloc和free等动态存储管理函数,来根据实际需要动态地分配和释放。
 这样定义的顺序串类型亦有两种形式。
(1)较简单的定义
 typedef char *string; //C中的串库<string.h>相当于使用此类型定义串

(2)复杂定义
typedef struct{
char *ch;// 若串非空,则按实际的串长分配存储区,否则ch为NULL
int length;
}HString;
串的顺序存储操作【参见动画演示】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值