串(1)--基本概念

2024-09-05 09:08
文章标签 基本概念

本文主要是介绍串(1)--基本概念,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一:基本概念:

           串是字符线性的有限集合,记作a=′a1…an ′ (n≥0)。其中:a是串名,用双引号括起来的字符序列是为串的值,双引号不是串内的成份,其作用是为了避免与变量名或常量混淆。ai(1≤i≤n)或是字母数据,或是其它字符称为串的元素,是构成串的基本单位。n为串的长度,且n≥0,如果n=0,则称a为空串(Null String),记作:a= ′′,其长度为0。而a= ′  ′称为空白串(Blank String),由于空格本身就是一个字符,它的长度不为0。因此,它可以出现在其它字符中间。为了表示清楚下文中的空格符用′Φ′。

二.串的存储结构:

 1.顺序结构

   串的存储分配是在编译时完成的,是静态的,串中的字符依次存放在一组连续的存储空间中

    typedef struct{char ch[MAXLEN+1];int length;/*串的实际长度*/}SString; 

  2.堆存储结构

     存储空间是在程序执行过程中动态分配的

typedef struct{  char  *ch;/*若是非空串,则按串长分配存储区,否则ch为NULL */int  length;  /* 串长度 */}HString;
 3.块链结构

       每个结点既可以存放一个字符,也可以存放多个字符。每个结点称为块,整个链表称为块链结构,为了便于操作,再增加一个尾指针。结点大小为数据域中存放字符的个数,当结点大小大于1时,由于串长不一定是结点大小的整倍数,则链表中的最后一个结点不一定全被串值占满,此时通常补上〞#〞或其他的非串值字符。

#define  CHUNKSIZE  <长度>  /*可由用户定义的块大小*/
typedef  struct Chunk
{  char  ch[CHUNKSIZE];struct Chunk  *next;
}Chunk;
typedef struct
{  Chunk *head,  *tail; /* 串的头和尾指针 */int    curlen;            /*串的当前长度*/}LString;

三.串的基本操作:

           虽从逻辑结构来看,串是特殊的线性表,串的存贮结构和线性表不同,串的基本操作和线性表也不同。一是它们的基本操作子集不同。二是线性表的操作通常以“数据元素”为操作对象。而串的操作主要以“串整体”为操作对象。因此,实现串的基本操作有其自己的处理方法。

1.串的联接

假设T、S1、S2都是SString类型串,基于对串S1、S2长度的不同情况,串T值的产生可能有三种情况:

1). S1.length+S2.length≤MAXLEN

2).S1.length+S2.length>MAXLEN而S1.length<MAXLEN

3).S1.length=MAXLEN

int Concat(SString *T,SString S1,SString S2) /*用T返回由S1和S2联接的新串。成功返TRUE,否则FALSE。*/
{if (S1.length+S2.length<=MAXLEN)         /*未截断*///S1.length+S2.length≤MAXLEN{T->ch[1..S1.length]=S1.ch[1..S1.length];T->ch[S1.length+1..S1.length+S2.length]=S2.ch[1..S2.length];T->length=S1.length+S2.length;return TRUE;}elseif  (S1.length<MAXLEN)              /*截断*///S1.length+S2.length>MAXLEN而S1.length<MAXLEN{T->ch[1..S1.length]=S1.ch[1..S1.length];T->ch[S1.length+1..MAXLEN]=S2.ch[1..MAXLEN-S1.length];T->length =MAXLEN;retuen FALSE;}else                                /*截断(仅取S1)*///.S1.length=MAXLEN{  T[0..MAXLEN]=S1[0..MAXLEN];return FALSE;}
} 
2.串的插入:

 int StrInsert(SString *s,int pos,SString t)  /*在串s中第pos之前插入串t */
{if (pos<0 || pos>s->length) return FALSE;  /*插入位置不合法*/if (s->length+t.length<=MAXLEN)                /*插入后串长≤MAXLEN*/{  for (i=s->length;i>=pos;--i)    s->ch[t.length+i]=s->ch[i];for (i=1,i<=t.length,++i)         s->ch[pos+i-1]=t.ch[i];s->length+=t.length;}else if (pos+t.length-1<=MAXLEN)/*插入后串长>MAXLEN,但串t可全部插入,串s被截断*/{for (i=MAXLEN-t.length;i>=pos;--i)s->ch[i+t.length]=s->ch[i];for (i=1;i<=t.length;++i)s->ch[pos+i-1]=t.ch[i];s->length=MAXLEN;}else                                                  /*串t部分或全部被截断*/{ for (i=1;i<=MAXLEN-pos+1;++i)s->ch[pos+i-1]=t.ch[i];s->length=MAXLEN;}return TRUE;
}
3.串的删除

int StrDelete(SString *s,int pos,int len)/* 在串s中删除从序号pos起len个字符*/
{ if (pos<0 || pos>s->length-len+1)return FALSE;for (i=pos+len;i<=s->length;++i)s->ch[i-len]=s->ch[i];s->length-=len;
}



这篇关于串(1)--基本概念的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1138532

相关文章

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【机器学习】高斯网络的基本概念和应用领域

引言 高斯网络(Gaussian Network)通常指的是一个概率图模型,其中所有的随机变量(或节点)都遵循高斯分布 文章目录 引言一、高斯网络(Gaussian Network)1.1 高斯过程(Gaussian Process)1.2 高斯混合模型(Gaussian Mixture Model)1.3 应用1.4 总结 二、高斯网络的应用2.1 机器学习2.2 统计学2.3

【Rocketmq入门-基本概念】

Rocketmq入门-基本概念 名词解释名称服务器(NameServer)消息队列(Message Queue)主题(Topic)标签(Tag)生产者(Producer)消费者(Consumer)拉取模式(Pull)推送模式(Push)消息模型(Message Model) 关键组件Broker消息存储工作流程 名词解释 名称服务器(NameServer) 定义: 名称服务器

数据结构的基本概念和术语的一些介绍

数据:是客观事物的符号表示,包括两种:                  数值型(整数,实数)和非数值型(文字,图形,声音 数据元素:是数据的基本单位,通常作为一个整体进行表示。                  与数据的关系:是数据集合的个体 数据项:组成数据元素的不可分割的最小单位。 以上三者的关系:数据>数据元素>数据项                  例如:学生表>个人记录>

【DL--05】深度学习基本概念—函数式模型

函数式模型 函数式模型算是本文档比较原创的词汇了,所以这里要说一下 在Keras 0.x中,模型其实有两种,一种叫Sequential,称为序贯模型,也就是单输入单输出,一条路通到底,层与层之间只有相邻关系,跨层连接统统没有。这种模型编译速度快,操作上也比较简单。第二种模型称为Graph,即图模型,这个模型支持多输入多输出,层与层之间想怎么连怎么连,但是编译速度慢。可以看到,Sequentia

【DL--04】深度学习基本概念—data_format

data_format 这是一个无可奈何的问题,在如何表示一组彩色图片的问题上,Theano和TensorFlow发生了分歧,’th’模式,也即Theano模式会把100张RGB三通道的16×32(高为16宽为32)彩色图表示为下面这种形式(100,3,16,32),Caffe采取的也是这种方式。第0个维度是样本维,代表样本的数目,第1个维度是通道维,代表颜色通道数。后面两个就是高和宽了。这种t

【DL--03】深度学习基本概念—张量

张量 TensorFlow中的中心数据单位是张量。张量由一组成形为任意数量的数组的原始值组成。张量的等级是其维数。以下是张量的一些例子: 3 # a rank 0 tensor; this is a scalar with shape [][1. ,2., 3.] # a rank 1 tensor; this is a vector with shape [3][[1., 2., 3.]

【DL--02】深度学习基本概念--符号计算

符号计算 Keras的底层库使用Theano或TensorFlow,这两个库也称为Keras的后端。无论是Theano还是TensorFlow,都是一个“符号式”的库。 因此,这也使得Keras的编程与传统的Python代码有所差别。笼统的说,符号主义的计算首先定义各种变量,然后建立一个“计算图”,计算图规定了各个变量之间的计算关系。建立好的计算图需要编译以确定其内部细节,然而,此时的计算图还

数据结构 基本概念和述语

数据结构 基本概念和述语数据(data)数据元素(data element)数据项(data item)数据对象(data object)数据结构(data structure)逻辑结构与物理结构逻辑结构物理结构 抽象数据类型(Abstract Data Type, ADT):数据类型:抽象数据类型三元组的定义:抽象数据类型的表示与实现抽象数据类型Triplet的表示和实现: 算法和算法分析

分布式系统的一些基本概念

GitHub:https://github.com/wangzhiwubigdata/God-Of-BigData 关注公众号,内推,面试,资源下载,关注更多大数据技术~大数据成神之路~预计更新500+篇文章,已经更新50+篇~ 分布式 来自csdn,作者:陆小凤 进阶篇来自:bangerlee 作者对部分地方做了订正 目前这系列文章是网络上分布式