【串的相关概念】

1.前情回顾:

在这里插入图片描述

2.串的定义

在这里插入图片描述
注意这里的字符是任意字符:包括特殊字符和空格

在这里插入图片描述

2.1串的相关术语

在这里插入图片描述

2.2分析如下:

  • 子串与主串 可以类比 子集与集合的关系
    空串也是子串的一种

在这里插入图片描述

  • 注意空格串空串的区别

  • 位置是从1开始设定的(第一个位置开始)

  • 案例剖析
    在这里插入图片描述
    在这里插入图片描述

2.3串相等

在这里插入图片描述
在这里插入图片描述
注意
在这里插入图片描述

3. 串的类型定义

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1.这里注意:index:即字符串的定位操作十分重要
    (若主串S存在与串T值相同的子串,则返回它在主串S中第一次出现的位置

4.串的 顺序存储 与 链式存储

4.1串的顺序存储

一般分为静态数组存储,动态数组存储;两者都可以,但静态数组更加常见,所以本篇着重介绍静态数组的存储方式。

4.1.1三种顺序存储的方法:
  • 由于一个char类型8bit,如果使用一个char变量来表示数组长度,则只能表示0~256这个区间
    在这里插入图片描述
    方案四较为常用
    代码如下:
 //1.串的顺序存储:
#define  MAXSIZE 255//预定义最大串长为255

//1.串类型定义(静态数组)
typedef struct 
{
	char ch[MAXSIZE+1];//每个空间存储一个字符
	//这里加1的目的是,串的有效元素要从下标1开始存起,方便管理,长度最大仍然为255
	int length;//串的实际长度
}sstring;
//sstring:结构体别名,用来定义串

4.2串的链式存储

  • 第一种方案:每个结点存1个字符,不建议使用,存储密度太低
//2.串的链式存储(每个结点存1个字符)
//存储密度低,不建议使用
typedef struct StringNode
{
	char ch;//每个数据域存储一个字符
	struct StringNode * next;//串的指针域
}stringNode,*string;
//stringNode:结构体别名,用来定义串结点
//string:结构体指针别名,用来定义串结点指针

在这里插入图片描述

  • 优化后的方案:块链结构,即一个数据域可以存储多个字符,其中块的大小可以自己定义,提高了存储密度
//2.串的链式存储(每个结点存多个字符)
#define CHUNKSIZE 80//块的大小可由用户定义
//<1>串的结点结构定义
typedef struct Chunk 
{
	char ch[CHUNKSIZE];//块中存储的字符数组
	struct Chunk* next;
}Chunk;

//<2>串的定义
typedef struct 
{ 
	Chunk* head, * tail; //串的头指针和尾指针
	int curlen; //串的当前长度
}LString; // 字符串的块链结构
//LString:用来定义一个整串

由于80个空间的块链不好表示,故以四个char来表示:
在这里插入图片描述

  • 18
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值