2024-11-16 串的存储结构

一、顺序存储。

1.首先定一个静态数组,然后定义i记录串的实际长度。(缺点:长度不可变)

2.使用malloc申请动态空间,定义指针指向串的地址。(需手动ferr)

方案一: 数组末尾记录长度

方案二:ch0充当length。首位置记录(字符的位序与数组下标相同)

方案三:末尾放/0,

二、链式存储。

1.每个结点存一个字符,然后用指针指向下一个结点。(存储密度低。改良方法,每个结点存储多个字符。若存不满,用特殊字符来补充)

三、基于顺序存储实现的基本操作

1.StrAssign(&T,chars):赋值操作。把串T赋值为chars。

StrCopy(&TS):复制操作。由串S复制得到串T。

StrEmpty(S):判空操作。若S为空串,则返回TRUE,否则返回

FALSE.StrLength(s):求串长。返回串S的元素个数。

ClearString(&s):清空操作。将S清为空串。

DestroyString(&s):销毁串。将串S销毁(回收存储空间)

Concat(&TS1,S2):串联接。用T返回由S1和S2联接而成的新串

2.求字串,

串SubString(&Sub,S,pos,len)求子串。用Sub返回串S的第pos个字符起长度为len的子串.

首先判断子串的长度是否越界。然后使i等于要返回的子串的首位序,利用循环,依次遍历,找到位序为字串首位序加子串的长度的字母。存放至新串中,并使新串长度等于子串的长度,返回新串。

3.比较两个串的大小。

StrCompare(s,T):比较操作。若S>T,则返回值>0;若S=T,则返回值=0;若S<T,则返回值<0。

利用循环,依次遍历两个串的每一个字符,并比较。如果字符不相等,则相减,根据返回值来判断大小。如果相等,则比较下一个字符。如果所有字符都相等,则长度大的串更大。如果长度也相等,则两个字符串相同。

4.在主串中找到子串的位置。

Index(S,T):定位操作。若主串S中存在与串T值相同的子串,则返回它在主串S中第一次出现的位置;否则函数值为0。

利用前两个操作,利用while循环在主串中从头取出与子串相同大小的子串,再依次比较两个子串是否相同,相同则返回,不同则取出下一个大小相同的子串,再进行比较。

总结:

相关推荐
Darling噜啦啦17 小时前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
小小工匠2 天前
Redis - 事务机制:能实现 ACID 属性吗
数据结构·redis·性能优化·并发·持久化
玖玥拾2 天前
C/C++ 数据结构(七)栈、容器适配器
c语言·数据结构·c++··容器适配器
Qres8212 天前
算法复键——树状数组
数据结构·算法
牛油果子哥q2 天前
并查集(DSU)超精讲,路径压缩、按秩合并、万能模板、连通性判定、最小生成树与刷题实战全解
数据结构·c++·最小生成树·并查集
凌波粒2 天前
LeetCode--491.递增子序列(回溯算法)
数据结构·算法·leetcode
WL学习笔记2 天前
单项不带头不循环链表
数据结构·链表
小糯米6012 天前
JS 数组
数据结构·算法·排序算法
小欣加油2 天前
leetcode3612 用特殊操作处理字符串I
数据结构·c++·算法·leetcode·职场和发展
凌波粒2 天前
LeetCode--90.子集II(回溯算法)
数据结构·算法·leetcode