04-4.1.2 串的存储结构

  • 👋 Hi, I’m @Beast Cheng
  • 👀 I’m interested in photography, hiking, landscape…
  • 🌱 I’m currently learning python, javascript, kotlin…
  • 📫 How to reach me --> 458290771@qq.com

喜欢《数据结构》部分笔记的小伙伴可以订阅专栏,今后还会不断更新。🧑‍💻
此外,《程序员必备技能》专栏日后会逐步更新,感兴趣的小伙伴可以点一下订阅、收藏、关注!🚀
谢谢大家!🙏

顺序存储

// 静态数组实现
#define MAXLEN 255    // 预定义最大串长为255
typedef struct{char ch[MAXLEN];  // 每个分量存储一个字符int length;       // 串的实际长度
}SString;// 动态数组实现
typedef struct{char *ch;    // 按串长分配存储区,ch指向串的基地址int length;  // 串的长度
}HString;HString S;
S.ch = (char *) malloc (MAXLEN * sizeof(char));
S.length = 0;

考试过程中如果有提问优缺点,可以结合顺序表的知识思考优缺点[[2.2.1 顺序表的定义#顺序表的特点]]

串长的两种方案

  1. char ch[10] 变量 length 在最后
  2. char ch[0] 充当 length
    • 优点:字符的位序和数组下标相同
    • 缺点:字符串长度不能超过 255
  3. 没有length 变量,以字符 '\0' 表示结尾(对应 ASCII 码的 0)
    • 缺点:每次都需要遍历,如果经常需要使用到这个参数,这个方案不适合
  4. 教材采用的方案ch[0] 废弃不用,但是仍然在结尾处 int length;

链式存储

typedef struct StringNode{char ch;                  // 每个结点存一个字符struct StringNode *next;
}StringNode, *String;

用这种存储方式,存储密度低,每个字符 1B,每个指针要用 4B 来存储,要解决这种问题,可以使每个结点存储多个字符

typedef struct StringNode{char ch[4];      // 每个节点存储4个字符,实际上还能更多struct StringNode *next;
}StringNode, *String;

基于顺序存储实现基本操作

SubString(&Sub, S, pos, len) 求子串

S.ch = "wangdao";
S.length = 7;// 求子串
bool SubString(SString &Sub, SString S, int pos, int len){// 子串范围越界if(pos+len-1 > S.length)return false;for(int i = pos; i < pos+len; i++)Sub.ch[i-pos+1] = S.ch[i];Sub.length = len;return true;
}

StrCompare(S, T) 比较两个串

// 比较
int StrCompare(SString S, SString T){for(int i = 1; i <= S.length && i <= T.length; i++){if(S.ch[i] != T.ch[i])return S.ch[i] - T.ch[i];}// 扫描过的所有字符都相同,则长度长的串更大return S.length-T.length;
}

Index(S, T) 定位

int Index(SString S, SString T){int i = 1, n = StrLength(S), m = StrLength(T);SString sub;          // 用于暂存子串while(i <= n-m+1){SubString(sub, S, i, m);if(StrCompare(sub, T) != 0)++i;elsereturn i;     // 返回子串在主串中的位置}return 0;             // S中不存在与T相等的子串
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/25247.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构(C):二叉树前中后序和层序详解及代码实现及深度刨析

目录 &#x1f31e;0.前言 &#x1f688;1.二叉树链式结构的代码是实现 &#x1f688;2.二叉树的遍历及代码实现和深度刨析代码 &#x1f69d;2.1前序遍历 ✈️2.1.1前序遍历的理解 ✈️2.1.2前序代码的实现 ✈️2.1.3前序代码的深度解剖 &#x1f69d;2.2中序遍历 ✈…

Spring boot SSL证书路径配置

SSL证书路径配置: 1、打包到resouce下&#xff1a; server:port: 443ssl:enabled: truekey-store: classpath:XX.XX.com.p12key-store-password: your-passwordkeyStoreType: PKCS12keyAlias: your-alias 2、放到windows类型服务器硬盘上 Windows系统中&#xff0c;由于路径…

一些常用的frida脚本

这里整理一些常用的frida脚本&#xff0c;和ghidra 一起食用风味更佳&#xff5e; Trace RegisterNatives 注意到从java到c的绑定中&#xff0c;可能会在JNI_OnLoad动态的执行RegisterNatives方法来绑定java层的函数到c行数&#xff0c;可以通过这个方法&#xff0c;来吧运行…

VSCode 1.90版本 升级需谨慎~(Python)

由于再次出现justMyCode的问题&#xff0c;请使用Python的小伙伴要谨慎将Visual Studio Code升级到1.90版本&#xff08;两天前官方刚发布的&#xff09; 若已经升级到1.90的小伙伴&#xff0c;可以从这里下载1.89版本进行“补救“&#xff1a; 1.89.1版本下载链接&#xff1a;…

Android 14.0 修改wifi信号强度和信号等级

1.前言 在14.0的系统rom产品定制化开发中,在进行产品开发中,对应系统定制会有各种各样的需求,对纯wifi产品而言,对于wifi要求也是越来越高,因此有客户要求对wifi信号强度做定制,修改信号强度来增强显示wifi信号,所以要对wifi显示信号强度的相关代码做修改 2.修改wifi信…

计算机网络:数据链路层 - 扩展的以太网

计算机网络&#xff1a;数据链路层 - 扩展的以太网 集线器交换机自学习算法单点故障 集线器 这是以前常见的总线型以太网&#xff0c;他最初使用粗铜轴电缆作为传输媒体&#xff0c;后来演进到使用价格相对便宜的细铜轴电缆。 后来&#xff0c;以太网发展出来了一种使用大规模…

AI菜鸟向前飞 — LangChain系列之十七 - 剖析AgentExecutor

AgentExecutor 顾名思义&#xff0c;Agent执行器&#xff0c;本篇先简单看看LangChain是如何实现的。 先回顾 AI菜鸟向前飞 — LangChain系列之十四 - Agent系列&#xff1a;从现象看机制&#xff08;上篇&#xff09; AI菜鸟向前飞 — LangChain系列之十五 - Agent系列&#…

Springboot使用webupload大文件分片上传(包含前后端源码)

Springboot使用webupload大文件分片上传&#xff08;包含源码&#xff09; 1. 实现效果1.1 分片上传效果图1.2 分片上传技术介绍 2. 分片上传前端实现2.1 什么是WebUploader&#xff1f;功能特点接口说明事件APIHook 机制 2.2 前端代码实现2.2.1&#xff08;不推荐&#xff09;…

词向量对模型performance的影响

因为自己搭建了一个4层的transformer网络&#xff0c;然后词向量的维度是96(attention is all you need里面transformer block的dim512)&#xff0c;这里设置96是为了后续我需要做一些attack的任务。 然后使用transformer4对YELP(5分类)分类的时候&#xff0c;performance一直…

【深度学习基础】池化层

池化层&#xff08;Pooling Layer&#xff09;在卷积神经网络&#xff08;CNN&#xff09;中常用于计算机视觉任务&#xff0c;但在自然语言处理&#xff08;NLP&#xff09;任务中也有广泛的应用。池化层在NLP任务中可以帮助提取重要特征&#xff0c;降低数据维度&#xff0c;…

计算机组成原理之计算机系统层次结构

目录 计算机系统层次结构 复习提示 1.计算机系统的组成 2.计算机硬件 2.1冯诺依曼机基本思想 2.1.1冯诺依曼计算机的特点 2.2计算机的功能部件 2.2.1MAR 和 MDR 位数的概念和计算 3.计算机软件 3.1系统软件和应用软件 3.2三个级别的语言 3.2.1三种机器语言的特点 3…

★pwn 24.04环境搭建保姆级教程★

★pwn 24.04环境搭建保姆级教程★ &#x1f338;前言&#x1f33a;Ubuntu 24.04虚拟机&#x1f337;VM&#x1f337;Ubuntu 24.04镜像 &#x1f33a;工具&#x1f337;可能出现的git clone错误&#x1f337;复制粘贴问题&#x1f337;攻击&#x1f337;编题 &#x1f33a;美化&…

【AI大模型】Transformers大模型库(五):AutoModel、Model Head及查看模型结构

目录​​​​​​​ 一、引言 二、自动模型类&#xff08;AutoModel&#xff09; 2.1 概述 2.2 Model Head&#xff08;模型头&#xff09; 2.3 代码示例 三、总结 一、引言 这里的Transformers指的是huggingface开发的大模型库&#xff0c;为huggingface上数以万计的预…

使用 Keras 的 Stable Diffusion 实现高性能文生图

前言 在本文中&#xff0c;我们将使用基于 KerasCV 实现的 [Stable Diffusion] 模型进行图像生成&#xff0c;这是由 stable.ai 开发的文本生成图像的多模态模型。 Stable Diffusion 是一种功能强大的开源的文本到图像生成模型。虽然市场上存在多种开源实现可以让用户根据文本…

【会议征稿,IEEE出版】第三届能源与电力系统国际学术会议 (ICEEPS 2024,7月14-16)

如今&#xff0c;全球能源行业正面临着前所未有的挑战。一方面&#xff0c;加快向清洁、可再生能源转型是遏制能源环境污染问题的最佳途径之一&#xff1b;另一方面&#xff0c;电力系统中新能源发电、人工智能技术、电力电子装备等被广泛应用和期待&#xff0c;以提高能源可持…

transformer - 注意力机制

Transformer 的注意力机制 Transformer 是一种用于自然语言处理任务的模型架构&#xff0c;依赖于注意力机制来实现高效的序列建模。注意力机制允许模型在处理一个位置的表示时&#xff0c;考虑输入序列中所有其他位置的信息&#xff0c;而不仅仅是前面的几个位置。这种机制能…

oracle常用经典SQL查询

oracle常用经典SQL查询(转贴) oracle常用经典SQL查询 常用SQL查询&#xff1a; 1、查看表空间的名称及大小 select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size from dba_tablespaces t, dba_data_files d where t.tablespace_name d.tablespace_name grou…

ATTCK红队评估(五)

环境搭建 靶场拓扑图&#xff1a; 靶机下载地址: 漏洞详情 外网信息收集 确定目标靶机地址&#xff1a; 发现主机192.168.135.150主机是本次攻击的目标地址。探测靶机开放的端口信息&#xff1a; 目标靶机开放了两个端口&#xff1a;80、3306&#xff0c;那没什么意外的话就是…

每天壁纸不重样~下载必应每日图片

下载必应每日图片 必应不知道你用过没有你下载过必应的图片没有你又没搜索过桌面图片你是不是安装过桌面图片软件你是不是为找一个好看的图片下载过很多桌面软件 必应每日图片 必应每天都会有一张不同的风景图片&#xff0c;画质清晰&#xff0c;而且不收费可以下载使用 但…

出现 FUNCTION xx.JSON_OBJECT does not exist 解决方法

目录 1. 问题所示2. 原理分析3. 解决方法3.1 升级版本3.2 更换函数1. 问题所示 MYSQL执行语句的时候 SELECT JSON_OBJECT(categories, JSON_ARRAYAGG(subquery.date),series, JSON_ARRAY(JSON_OBJECT(name, 修理订单数量,data&