数据结构——串的定义及存储结构

devtools/2024/11/15 0:40:50/

串的定义

  • 串(string)——零个或多个任意字符组成的有限序列
  • 串是内容受限的线性表

串的几个术语

  • 子串:串中任意几个连续字符组成的子序列称为该串的子串(真子串是指不包含自身的所有子串)
  • 主串:包含子串的串相应地称为主串
  • 字符位置:字符在序列中的序号为该字符在串中的位置
  • 子串位置:子串第一个字符在主串中的位置
  • 空格串:由一个或多个空格组成的串  与空串不同

  •  串相等:当且仅当两个串的长度相等并且各个对应位置上的字符都相同时,这两个串才时相等的。

        串的应用非常广泛,计算机上的非数值处理的对象大部分是字符串数据,例如:文字编辑、符号处理、各种信息处理系统等等。

串的类型定义、存储结构

串的抽象类型定义
串的抽象类型定义
ADT String{
数据对象:D={ ai | ai ∈ CharacterSet,i=1,2,…,n,n≥0}
数据关系:R1={ < a(i-1),ai > | a(i-1),ai ∈ D,i=2,…,n }
基本操作:
StrAssign(&T,chars)    
// 生成一个其值等于chars的串T(chars是字符串常量)
StrCopy(&T,S)    
// 由串S复制得T
StrEmpty(S)    
// 若S为空串,返回true,否则返回false
StrCompare(S,T)    
// 若S>T,则返回值>0;若S=T,则返回值=0;若S<T,则返回值<0
StrLength(S)    
// 返回S的元素个数,称为串的长度
ClearString(&S)    
// 将S清为空串
Concat(&T,S1,S2)    
// 用T返回由S1和S2联接而成的新串
SubString(&Sub,S,pos,len)    
// 用Sub返回串S的第pos个字符起长度为len的子串
Index(S,T,pos)    
// 若主串S中存在和串T值相同的子串,则返回它在主串S中第pos个字符之后第一次出现的位置;否则函数值为0
Replace(&S,T,V)    
// 用V替换主串S中出现的所有与T相等的不重叠的子串
StrInsert(&S,pos,T)    
// 在串S的第pos个字符之前插入串T
StrDelete(&S,pos,len)    
// 从串S中删除第pos个字符起长度为len的子串
DestroyString(&S)    
// 销毁串S
}ADT String

串的存储结构

        串中元素逻辑关系与线性表的相同,串可以采用与线性表相同的存储结构。

 

串的顺序存储

        串的定长顺序存储结构,可以简单地理解为采用 “固定长度的顺序存储结构” 来存储字符串,因此限定了其底层实现只能使用静态数组。使用定长顺序存储结构存储字符串时,需结合目标字符串的长度,预先申请足够大的内存空间。

//------串的定长顺序存储结构-------
#define MAXLEN 255       //串的最大长度
typedef struct{char ch[MAXLEN+1];   //存储串的一维数组int length;          //串的当前长度
}SString; 
串的链式存储 

 想要方便,又想要提高存储密度,可以在一个结点存储多个字符,以克服缺点

 这种存储结构称为块链存储结构

//-------串的链式存储结构---------
#define CHUNKSIZE 80       //可由用户定义的块大小
typedef struct Chunk{char ch[CHUNKSIZE];struct Chunk*next;
}Chunk;
typedef struct{Chunk *head,*tail;    //串的头和尾指针int length;           //串的当前长度
}LString;                  //字符串的块链结构


http://www.ppmy.cn/devtools/113150.html

相关文章

图算法 | 图算法的分类有哪些?(下)

图算法的分类有哪些&#xff1f;综合当前学术界和工业界图计算领域目前最新的发展情况&#xff0c;把图算法划分为了以下六大类&#xff1a; ❑中心性(Centrality)算法&#xff1a;如节点出入度、全图出入度、接近中心性、中介中心性、图中心性、调和中心性等。 ❑相似度(Simil…

结构体初始和嵌套

1.介绍了各种基本类型(如整型、实型、字符型)、构造数据类型(如数组)和指针类型。但是,在解决一些较复杂的实际问题时,只使用这些数据类型是不够的。例如,在描述一本图书的信息时,图书编号、书名、专业领域、作者、出版社、单价等都是和图书相关的基本信息,这些信息是作为一个整…

【 前端优化】Vue 3 性能优化技巧

Vue 3 性能优化技巧&#xff1a;让你的应用飞起来&#xff01; 大家好&#xff01;今天我想跟大家分享一些关于Vue 3性能优化的实用技巧。Vue 3带来了很多新的特性和改进&#xff0c;但只有了解并应用这些优化技巧&#xff0c;我们才能真正发挥它们的优势&#xff0c;打造更高…

Java企业面试题3

1. break和continue的作用(智*图) break&#xff1a;用于完全退出一个循环&#xff08;如 for, while&#xff09;或一个 switch 语句。当在循环体内遇到 break 语句时&#xff0c;程序会立即跳出当前循环体&#xff0c;继续执行循环之后的代码。continue&#xff1a;用于跳过…

《论软件需求管理》写作框架,软考高级系统架构设计师

论文真题 软件需求管理是一个对系统需求变更了解和控制的过程。需求管理过程与需求开发过程相互关联&#xff0c;初始需求导出的同时就要形成需求管理规划&#xff0c;一旦启动了软件开发过程&#xff0c;需求管理活动就紧密相伴。 需求管理过程中主要包含变更控制、版本控制、…

【PostgreSQL】安装及使用(Navicat/Arcgis),连接(C#)

简介 PostgreSQL 是一个功能强大的开源对象关系数据库系统 下载地址 PostgreSQL: Downloads 由于我电脑上安装的是arcgispro3.1所以需要下载对应的postgresql版本 PostgreSQL 12 对应的 PostGIS 版本主要是 3.5.0 或更高版本。 安装 一般设置为postgresql 安装扩展插件 此…

Linux下的gcc与gdb

目录 Linux下的gcc与gdb 代码编译与链接 函数库 gdb介绍和安装 gdb基本使用指令 示例代码 debug模式和release模式 基本指令 进入gdb调试与显示调试代码 创建断点与删除断点 启用和禁用断点 执行代码 逐语句和逐过程调试 断点跳转 显示指定变量以及对应内容 打印变量的值 执行到…

《论负载均衡技术在Web系统中的应用》写作框架,软考高级系统架构设计师

论文真题 负载均衡技术是提升Web系统性能的重要方法。利用负载均衡技术&#xff0c; 可将负载(工作任务) 进行平衡、分摊到多个操作单元上执行&#xff0c; 从而协同完成工作任务&#xff0c; 达到提升Web系统性能的目的。 请围绕“负载均衡技术在Web系统中的应用”论题&…