字符串(String)

串是什么

串(String)(或字符串)是由零个或者多个字符组成地有限虚空序列,一般记为

s = “ a 1 a 2 ⋅ ⋅ ⋅ a n a_1a_2···a_n a1a2an” (n>=0)

  • 其中s是串的名,双引号里面的是串的值;
  • a i a_i ai(1<=i<=n)可以是字母、数字或者其他区字符
  • 串字符数目n为串的长度
  • 零个字符的串称为空串,其长度为
  • 串中任意连续的字符组成的子序列称为该串的子串,包含字串的串相应的称为主串
  • 字符串大小比较的是各个字符ACILL码值大小

串的存储结构

1、串的顺序存储结构

类似于线性表的顺序存储结构,用一组地址连续的存储单元存储串值的字符序列。按照预定的大小,为每一个定义的串变量分配一个固定长度的存储区,可以用定义数组的放视描述串。

#define MAXLEN 225      //串的最大长度
typedef struct {
    char ch [MAXLEN+1];   //存储串的一维数组
    int length;           //串的当前长度
}SString;

这种定义方式是静态的,在编译时可就确定了串空间的大小。

串的堆式顺序存储(解决数组串需要预分配空间的问题)

为每一个新产生的串动态分配一块实际串长度所需的存储空间

typedef struct {
    char *ch;       //只要串非空,则按串长度分配存储区,否则ch指向NULL
    int length;     //串的当前长度
}HString;

2、串的链式存储

#define CHUNKSIZE 80          //用户定义的块大小
typedef struct Chunk{
    char ch[CHUNKSIZE];
    struct Chunk *next;
}Chunk;
typedef struct {
    Chunk *head,*tail;      //串的头指针和尾指针
    int length;             //串的当前长度
}LString;

在链式存储方式中,结点的大小直接影响到串处理的效率。
串的链式存储结构对某些串操作,例如联结操作等,有一定的方便之处,但总的来说,不如顺序结构来的灵活,链式占用存储空间大且操作复杂。
因为串在日常使用中还是想用多长就预分配多少空间的情况较多,链式串仅了解就行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值