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

总结:

相关推荐
棋子入局30 分钟前
移除元素(leetcode 27)
数据结构·算法·leetcode
2401_8582861133 分钟前
L11.【LeetCode笔记】有效的括号
c语言·开发语言·数据结构·笔记·算法·leetcode·
我叫汪枫39 分钟前
吉林大学 超星慕课 高级语言程序设计 学习通部分题目极其答案
数据结构·学习·算法
丫头,冲鸭!!!2 小时前
内部排序和外部排序以及常见算法和时间复杂度
数据结构·算法·排序算法
Dola_Pan2 小时前
十大经典排序算法-希尔排序与归并排序
数据结构·算法·排序算法
未知陨落3 小时前
数据结构——AVL树
开发语言·数据结构·c++·avl树
誓约酱3 小时前
排序算法 -计数排序
数据结构·c++·算法·排序算法
Fms_Sa4 小时前
分别写出在散列表中插入和删除关键字为K的一个记录的算法,设散列函数为H,解决冲突的方法为链地址法。
c语言·数据结构·算法·哈希算法·散列表
Repeat7155 小时前
Dijstra和Bellman_ford
数据结构·图论·dijstra·bellman_ford