前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >线性表--堆串(十五)

线性表--堆串(十五)

作者头像
花狗Fdog
发布2020-10-28 09:48:07
4430
发布2020-10-28 09:48:07
举报
文章被收录于专栏:花狗在Qt

1.串的概念

1.串的基本概念 串,也就是字符串,是由零个字符或多个字符组成的有限序列。记为S = ‘a1 a2 a3…an’(n >= 0), 其中,S是串的名字,用单引号括起来的字符序列是串的值,每一个a都可以是字母,数字或其他字符,n是串中字符的个数,称为串的长度,n = 0时的串成为空串。

需要特别指出的是,串值必须使用一对单引号括起来(C语言的串是用双引号括起来的),但引号是界限符,他不属于串,只是作为一个标志,避免和其他变量相互混淆。

子串:串中任意个连续的字符组成的子序列称为该串的子串。

主串:包含子串的串称为主串,可以理解为高中学的集合,子串是主串的子集。

子串在主串中的位置:通常将字符在串中的序号称为该字符串在串中的位置,子串在主串中的位置则以子串的第一个字符在主串中的位置来表示。

例如:串A = ‘huagoufdog2506897252’ , 串B = ‘huagou’ , 串C = ‘fdog’

A的长度是20,B是6,C是4,而B在A的位置是1,C在A的位置是7。

串相等:当且仅当两个串的值相等时,才称这两个串相等,即只有两个的数值相等,且对应位置的字符都相等。 空串和空格串的的区别是空格串由一个或者多个空格,而空串是无任何字符。

2.堆串

字符串包括串名与串值两部分,而串值采用堆串存储方法存储,串名用符号表存储。

堆串存储方法:以一组地址连续的存储单元顺序存放串中的字符,但他们的存储空间是在程序执行过程中动态分配的。系统将一个地址连续,容量很大的存储空间作为字符串的可用空间,每当建立一个新串时,系统就从这个空间中分配一个大小和字符串长度相同的空间用于存储新串的串值。

串名符号表:所有串名的存储映像像构成一个符号表。借助此结构可以在串名和串值之间建立一个对应关系,称为串名的存储映像。

3.代码实现

(1)定义堆串

代码语言:javascript
复制
typedef struct
{
 char * ch;
 int len;
}HString;

(2)插入函数

代码语言:javascript
复制
int StrInsert(HString * s, int pos, HString * t)
{
 int i;
 char * temp;
 if (pos<0 || pos>s->len || s->len == 0)return 0;
 temp = (char *)malloc(sizeof(s->len + t->len));
 if (temp == NULL)return 0;
 for (i = 0; i < pos; i++)temp[i] = s->ch[i];
 for (i = 0; i < t->len; i++)temp[i + pos] = t->ch[i];
 for (i = pos; i < s->len; i++)temp[i + t->len] = s->ch[i];
 s->len += t->len;
 free(s->ch);
 s->ch = temp;
 return 0;
}

(3)赋值函数

代码语言:javascript
复制
int StrAssign(HString * s, char * tval)
{
 //将字符串常量tval的值赋给堆串
 int len, i = 0;
 if (s->ch != NULL)free(s->ch);
 while (tval[i] != '\0')i++;
 len = i;
 if (len)
 {
  s->ch = (char *)malloc(sizeof(len));
  if (s->ch == NULL)return 0;
  for (i = 0; i < len; i++)
  {
   s->ch[i] = tval[i];
  }
 }
 else
 {
  s->ch = NULL;
  s->len = len;
 }
 return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/02/06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.串的概念
  • 2.堆串
  • 3.代码实现
    • (1)定义堆串
      • (2)插入函数
        • (3)赋值函数
        相关产品与服务
        对象存储
        对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档