2024-11-16 串的存储结构

一、顺序存储。

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

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

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

方案二:ch[0]充当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循环在主串中从头取出与子串相同大小的子串,再依次比较两个子串是否相同,相同则返回,不同则取出下一个大小相同的子串,再进行比较。

总结:

相关推荐
XuanRanDev4 小时前
【数据结构】树的基本:结点、度、高度与计算
数据结构
苦 涩7 小时前
考研408笔记之数据结构(七)——排序
数据结构
Victoria.a9 小时前
顺序表和链表(详解)
数据结构·链表
笔耕不辍cj10 小时前
两两交换链表中的节点
数据结构·windows·链表
csj5011 小时前
数据结构基础之《(16)—链表题目》
数据结构
謓泽11 小时前
【数据结构】二分查找
数据结构·算法
攻城狮7号11 小时前
【10.2】队列-设计循环队列
数据结构·c++·算法
写代码超菜的12 小时前
数据结构(四) B树/跳表
数据结构
小小志爱学习13 小时前
提升 Go 开发效率的利器:calc_util 工具库
数据结构·算法·golang
egoist202313 小时前
数据结构之堆排序
c语言·开发语言·数据结构·算法·学习方法·堆排序·复杂度