复习——线性结构之串

定义

字符串一般简称为串
串是由零个或多个字符组成的有限序列
一般记为 s=‘a1a2a3…an’(n>=0)

串中的字符数目n为串的长度。
零个字符的串称为空串(用Ø 表示),而全是空格的串称为空格串注意区分

串相等<==>两个串长度相等,且相对应的位置的字符都相等

串和线性表的区别在于
1.串的数据对象约束于字符集。
2.串的基本操作和线性表有差别
线性表多以单个元素为操作对象
而串通常以串的整体为操作对象

表示与实现

定长顺序存储

使用一组地址连续的存储单元存储串值的字符序列
表示

const int Max_len=255;
typedef unsigned char SString[Max_len+1]; //0号位置存放串的长度

0号位置存放串的长度

串的实际长度可在此范围内任意取,但若超出预定最长长度,则超出部分的串值就会被舍去,即发生截断
因此在进行对串的操作时,要考虑截断因素。

串连接操作
在这里插入图片描述
求子串操作
在这里插入图片描述

堆分配存储表示

即动态分布串的存储空间
可以解决截断的问题

typedef struct{
        char *char_head;
        int length;
}Hstring;

其操作仍是以“字符序列的复制”为基础进行的

堆分配的串既有顺序存储的优点,又无串长限制,因此更常被使用

块链存储表示

使用链表存储串,但每个结点可以存储串中n个字符,当串长不是n的整数倍时,最后一个结点的剩余位置补上#号等非串值符号
在这里插入图片描述
其数据结构表示为

int const Chunksize=80;
typedef struct Chunk{
      char ch[Chunksize];
      struct Chunk* next;
}Chunk;
typedef struct{
       Chunk* head, *tail;
       int curlen;
}Lstring;

一般情况下,对串操作时只需要从前往后扫描即可,所以不需要建立双向链表。
且为了方便进行联结操作,才设立了尾指针。

结点大小的选择与顺序存储方式的格式选择一样都很重要,它直接影响着串处理的效率

存储密度=串值所占的存储位 ÷ 实际分配的存储位

存储密度较小时,运算方便,但存储占用量大
另外字符集越小,字符的机内编码越短,这也影响串值存储方式的选取。

总体来说
块链存储结构对于部分串操作(联接)等有一定的方便之处,但总体来说没有顺序结构灵活。
它占用存储量大且操作复杂

串的模式匹配

串中寻找子串(模式串)的位置就叫做模式匹配

详细内容以前已经写过了,大家也可以在网上找很多优质解答,就溜了…
优质解答

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值