串的存储结构 --王道

简介: 目录一、串的顺序存储1、静态数组实现(定长顺序存储)2、动态数组实现(堆分配存储) 3、存储方案​编辑 4、串的链式存储5、基本操作的实现6、求子串的实现方式7、比较俩个串的大小8、定位操作

目录

一、串的顺序存储

1、静态数组实现(定长顺序存储)

2、动态数组实现(堆分配存储) 

3、存储方案编辑

4、串的链式存储

5、基本操作的实现

6、求子串的实现方式

7、比较俩个串的大小

8、定位操作


一、串的顺序存储

1、静态数组实现(定长顺序存储)

#define MAXLEN 255    //预定义最大长串为255 
typedef struct{
  char ch[MAXLEN];   //每个分量存储一个字符 
  int length;       //串的实际长度 
}SString;

2、动态数组实现(堆分配存储)

typedef struct{
  char *ch;   //按串长分配存储区,ch指向串的基地址
  int length; //串的长度 
}HString;
//用完需要手动free 
HString S;
S.ch = (char *) malloc(MAXLEN * sizeof(char));
S.length = 0; 

3、存储方案

image.png

4、串的链式存储

(一)

typedef struct StringNode{
  char ch;
  struct StringLNode *next; 
}StringNode,*String;

image.png

缺点:存储密度低,每个字符1B,每个指针4B

(二)

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

image.png

存储密度提高


5、基本操作的实现

StrAssign(&T, chars): 赋值操作,把串T赋值为chars;



StrCopy(&T, S): 复制操作,把串S复制得到串T



StrEmpty(S): 判空操作,若S为空串,则返回TRUE,否则返回False;



StrLength(S): 求串长,返回串S的元素个数;



ClearString(&S): 清空操作,将S清为空串;



DestroyString(&S): 销毁串,将串S销毁——回收存储空间;



Concat(&T, S1, S2): 串联联接,用T返回由S1和S2联接而成的新串———可能会导致存储空间的扩展;


6、求子串的实现方式

//求子串
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 false;
 } 

7、比较俩个串的大小

StrCompare(S,T):比较操作。若S>T,则返回值>0;若S=T,则返回值 = 0;若S< T则返回值<0.

 int StrCompare(SString S,SString T)
 {
  for(int i = 0;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; 
 }

8、定位操作

Index(S,T) :定位操作。若主串S中存在与串T值相同的子串,则返回它与主串S中第一次出现的位置;否则函数值为0

// 3. 定位操作
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;
        else 
            return i;    // 返回子串在主串中的位置
    }
    return 0;            //S中不存在与T相等的子串
}


相关文章
|
机器学习/深度学习 存储 人工智能
深度学习经典网络解析图像分类篇(五):VGG
 VGGNet是在ImageNet Challenge 2014在定位和分类过程中分别获得了第一名和第二名的神经网络架构。VGGNet是牛津大学计算机视觉组和DeepMind公司的研究员一起研发的深度卷积神经网络。VGG主要探究了卷积神经网络的深度和其性能之间的关系,通过反复堆叠3×3的小卷积核和2×2的最大池化层,VGGNet成功的搭建了16-19层的深度卷积神经网络。
1219 0
|
7天前
|
Shell API 开发工具
Claude Code 快速上手指南(新手友好版)
AI编程工具卷疯啦!Claude Code凭借任务驱动+终端原生的特性,成了开发者的效率搭子。本文从安装、登录、切换国产模型到常用命令,手把手带新手快速上手,全程避坑,30分钟独立用起来。
2308 13
|
20天前
|
人工智能 JSON 供应链
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
LucianaiB分享零成本畅用JVS Claw教程(学生认证享7个月使用权),并开源GeoMind项目——将JVS改造为科研与产业地理情报可视化AI助手,支持飞书文档解析、地理编码与腾讯地图可视化,助力产业关系图谱构建。
23545 13
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
|
4天前
|
人工智能 开发工具 iOS开发
Claude Code 新手完全上手指南:安装、国产模型配置与常用命令全解
Claude Code 是一款运行在终端环境中的 AI 编程助手,能够直接在命令行中完成代码生成、项目分析、文件修改、命令执行、Git 管理等开发全流程工作。它最大的特点是**任务驱动、终端原生、轻量高效、多模型兼容**,无需图形界面、不依赖 IDE 插件,能够深度融入开发者日常工作流。
1713 3
|
6天前
|
人工智能 JSON BI
DeepSeek V4-Pro 接入 Claude Code 完全实战:体验、测试与关键避坑指南
Claude Code 作为当前主流的 AI 编程辅助工具,凭借强大的代码理解、工程执行与自动化能力深受开发者喜爱,但原生模型的使用成本相对较高。为了在保持能力的同时进一步降低开销,不少开发者开始寻找兼容度高、价格更友好的替代模型。DeepSeek V4 系列的发布带来了新的选择,该系列包含 V4-Pro 与 V4-Flash 两款模型,并提供了与 Anthropic 完全兼容的 API 接口,理论上只需简单修改配置,即可让 Claude Code 无缝切换为 DeepSeek 引擎。
1643 0
|
4天前
|
人工智能 JSON BI
Claude Code 搭配 DeepSeek V4-Pro 完整测评:超越 Claude Sonnet 4.5,低成本高效能背后的真实表现
Claude Code 凭借强大的代码理解、工程执行与自动化任务能力,成为开发者广泛使用的 AI 编程工具。但原生模型的调用成本较高,长期高频使用会带来明显开销。DeepSeek V4 系列模型发布后,凭借优秀的代码能力与兼容 Anthropic 协议的 API 接口,成为替代原生模型的高性价比选择。本文完整记录将 Claude Code 对接 DeepSeek V4-Pro 的配置流程、真实任务测试效果、优势亮点与必须注意的使用限制,为开发者提供可直接落地的参考方案。
1123 2
|
13天前
|
人工智能 缓存 Shell
Claude Code 全攻略:命令大全 + 实战工作流(完整版)
Claude Code 是一款运行在终端环境下的 AI 编码助手,能够直接在项目目录中理解代码结构、编辑文件、执行命令、执行开发计划,并支持持久化记忆、上下文压缩、后台任务、多模型切换等专业能力。对于日常开发、项目维护、快速重构、代码审查等场景,它可以大幅减少手动操作、提升编码效率。本文从常用命令、界面模式、核心指令、记忆机制、图片处理、进阶工作流等维度完整说明,帮助开发者快速上手并稳定使用。
3136 4

热门文章

最新文章