顺序串算法库构建

news2025/1/11 8:41:05

学习贺利坚老师顺序串算法库

数据结构之自建算法库——顺序串_创建顺序串s1,创建顺序串s2-CSDN博客

本人详细解析博客

串的概念及操作_串的基本操作-CSDN博客

版本更新日志

V1.0: 在贺利坚老师算法库指导下, 结合本人详细解析博客思路基础上,进行测试, 加入异常弹出信息

v1.0补丁: 完善Error ,合法性检测内部,加入英语提示,并有对应函数标号

V1.0

函数功能:

//(1)将一个字符串数组赋值给顺序串
void Assignment_Sequential_string(Sequential_string &New_String, char Assign_array[]);
//(2) 复制一个串,到另一个串
void Copy_Sequential_String(Sequential_string &accept_string, Sequential_string copy_string);
//(3)判断两个串是否相等
bool Equal_Sequential_String(Sequential_string judge_string1, Sequential_string judge_string2);
//(4)求顺序串串长
int Length_Sequential_String(Sequential_string measure_string);
//(5)串连接
Sequential_string Connect_Sequential_String(Sequential_string link1, Sequential_string link2);
//(6)求子串(从begin_loation开始的number个字符)
Sequential_string Get_Sequential_Substring(Sequential_string substring, int begin_loation, int number);
//(7)插入串(从从begin_loation开始插入字符串,然后组合成新的串)
Sequential_string Insert_Sequential_String(Sequential_string old_string, int begin_loation,Sequential_string insert_string);
//(8)删除串(从begin 开始的number个字符)
Sequential_string Delete_Sequential_String(Sequential_string old_string, int begin_loation,int number);
//(9)串替换(从begin 开始的number个字符)
Sequential_string Replace_Sequential_String(Sequential_string old_string, int begin_loation,int number,Sequential_string new_string);
//(10)输出展示串
void Display_Sequential_String(Sequential_string show_String);

顺序串头函数

Sequential_string.h
#ifndef _SEQUENTIAL_STRING_H_INCLUDE
#define _SEQUENTIAL_STRING_H_INCLUDE

#include <stdio.h>
#define MaxSize 100 //最多字符个数

//顺序串数据结构
typedef struct
{
    char Sequential_string_data[MaxSize];//数组串数据
    int length;                          //实际串长
}Sequential_string;

//(1)将一个字符串数组赋值给顺序串
void Assignment_Sequential_string(Sequential_string &New_String, char Assign_array[]);
//(2) 复制一个串,到另一个串
void Copy_Sequential_String(Sequential_string &accept_string, Sequential_string copy_string);
//(3)判断两个串是否相等
bool Equal_Sequential_String(Sequential_string judge_string1, Sequential_string judge_string2);
//(4)求顺序串串长
int Length_Sequential_String(Sequential_string measure_string);
//(5)串连接
Sequential_string Connect_Sequential_String(Sequential_string link1, Sequential_string link2);
//(6)求子串(从begin_loation开始的number个字符)
Sequential_string Get_Sequential_Substring(Sequential_string substring, int begin_loation, int number);
//(7)插入串(从从begin_loation开始插入字符串,然后组合成新的串)
Sequential_string Insert_Sequential_String(Sequential_string old_string, int begin_loation,Sequential_string insert_string);
//(8)删除串(从begin 开始的number个字符)
Sequential_string Delete_Sequential_String(Sequential_string old_string, int begin_loation,int number);
//(9)串替换(从begin 开始的number个字符)
Sequential_string Replace_Sequential_String(Sequential_string old_string, int begin_loation,int number,Sequential_string new_string);
//(10)输出展示串
void Display_Sequential_String(Sequential_string show_String);
#endif

顺序串库函数

Sequential_string.cpp
#include "Sequential_string.h"

/**************************************************
(1)函数名: Assignment_Sequential_string
功  能: 将一个字符串数组赋值给顺序串
参  数: (1)Sequential_string &New_String:创建的新串
        (2)char Assign_array[]: 原始字符串数组
注  意:  顺序数组,结尾加入'\0'
返回值: 无
**************************************************/
void Assignment_Sequential_string(Sequential_string &New_String, char Assign_array[])
{
    int counter;
    for(counter = 0; Assign_array[counter] != '\0'; counter++)
    {
        New_String.Sequential_string_data[counter] = Assign_array[counter];
    }
    New_String.Sequential_string_data[counter] = '\0';
    New_String.length = counter;    //更新串最大位序
}

/**************************************************
(2)函数名: Copy_Sequential_String
功  能: 复制一个串,到另一个串
参  数: (1)Sequential_string &accept_string: 复制成的串
        (2)Sequential_string copy_string:要复制的串
注  意:  复制成的串,传回的是地址,所以不用传回参数
返回值: 无
**************************************************/
void Copy_Sequential_String(Sequential_string &accept_string, Sequential_string copy_string)
{
    int counter;
    for(counter = 0; counter < copy_string.length;counter++)
    {
        accept_string.Sequential_string_data[counter] = copy_string.Sequential_string_data[counter];
    }
    accept_string.Sequential_string_data[counter] = '\0';
    accept_string.length = copy_string.length;
}
/**************************************************
(3)函数名: Equal_Sequential_String
功  能: 判断两个串是否相等
参  数: (1)Sequential_string judge_string1:第一个串
        (2)Sequential_string judge_string2:第二个串
返回值: bool?是否相等,true:false
**************************************************/
bool Equal_Sequential_String(Sequential_string judge_string1, Sequential_string judge_string2)
{
    bool same = true;
    int counter;
    if(judge_string1.length != judge_string2.length)
    {
        same = false;
    }
    else
    {
        for(counter = 0; counter < judge_string1.length;counter++)
        {
            if(judge_string1.Sequential_string_data[counter] != judge_string2.Sequential_string_data[counter])
            {
                same = false;
                break;
            }
        }
    }
    return same;

}

/**************************************************
(4)函数名: Length_Sequential_String
功  能: 求顺序串串长
参  数: Sequential_string measure_string:要进行测量的串
返回值: int:顺序串长度信息
**************************************************/
int Length_Sequential_String(Sequential_string measure_string)
{
    return measure_string.length;
}

/**************************************************
(5)函数名: Connect_Sequential_String
功  能: 把两个串连接成一个串
参  数: Sequential_string link1, Sequential_string link2:两个要链接的串
返回值: 返回Sequential_string Connection_string: 链接成的串
**************************************************/
Sequential_string Connect_Sequential_String(Sequential_string link1, Sequential_string link2)
{
    Sequential_string Connection_string;
    int counter;
    Connection_string.length = link1.length + link2.length;
    //将第一个串加入链接的串
    for(counter = 0; counter < link1.length; counter++)
    {
        Connection_string.Sequential_string_data[counter] = link1.Sequential_string_data[counter];
    }
    //将第二个串加入链接的串
    for(counter = 0; counter < link2.length; counter++)
    {
        Connection_string.Sequential_string_data[link1.length+counter] = link2.Sequential_string_data[counter];
    }
    Connection_string.Sequential_string_data[link1.length+counter] = '\0';
    return Connection_string;
}

/**************************************************
(6)函数名: Get_Sequential_Substring
功  能: 求子串(从begin_loation开始的number个字符)
参  数: (1)Sequential_string mother_String:母串
        (2)int begin_loation:开始分割子串的位置
        (3)int number:子串的数量
返回值: Sequential_string son_String:得到的子串
**************************************************/
Sequential_string Get_Sequential_Substring(Sequential_string mother_String, int begin_loation, int number)
{
    Sequential_string son_String;
    int counter;
    son_String.length = 0;
    if(begin_loation <= 0 || begin_loation > mother_String.length || number < 0 || begin_loation+number-1>mother_String.length)
    {
        //错误:分割的子字符串的位置错误。
        printf("\nError<6>:The position of the divided substring is wrong.\n");
        return son_String; //    参数不正确返回空串
    }
    for(counter = begin_loation-1; counter < begin_loation+number-1; counter++)
    {
        son_String.Sequential_string_data[counter-begin_loation+1] = mother_String.Sequential_string_data[counter];
    }
    son_String.Sequential_string_data[counter-begin_loation+1] = '\0';
    son_String.length = number;
    return son_String;
}

/**************************************************
(7)函数名: Insert_Sequential_String
功  能: 插入串(从从begin_loation开始插入字符串,然后组合成新的串)
参  数: (1)Sequential_string old_string:在原始串的基础上插入
        (2)int begin_loation: 插入的位置
        (3)Sequential_string insert_string:插入的新串
思  路:  在原有串的基础上,割开一个口子,放上新串,然后组合成新串
返回值: Sequential_string form_string:组合成的新串
**************************************************/
Sequential_string Insert_Sequential_String(Sequential_string old_string, int begin_loation,Sequential_string insert_string)
{
    int counter;
    Sequential_string form_string;
    form_string.length = 0;
    //参数不正确, 返回空串
    if(begin_loation <= 0 || begin_loation > old_string.length+1)
    {
        //错误:插入位置错误
        printf("\nError<7>: wrong insertion position.\n");
        return form_string;
    }
    for(counter = 0; counter < begin_loation-1;counter++)
    {
        form_string.Sequential_string_data[counter] = old_string.Sequential_string_data[counter];
    }

    for(counter = 0; counter < insert_string.length;counter++)
    {
        form_string.Sequential_string_data[begin_loation-1+counter] = insert_string.Sequential_string_data[counter];
    }

    for(counter = begin_loation-1; counter<old_string.length;counter++)
    {
        form_string.Sequential_string_data[insert_string.length+counter] = old_string.Sequential_string_data[counter];
    }
    form_string.Sequential_string_data[insert_string.length+counter] = '\0';
    form_string.length = old_string.length + insert_string.length;
    return form_string;

}
/**************************************************
(8)函数名: Delete_Sequential_String
功  能: 删除串(从begin 开始的number个字符)
参  数: (1)Sequential_string old_string:在原有串的基础上删除
        (2)int begin_loation: 开始删除的位置(从逻辑1开始)
        (3)int number:删除的数量
注  意:  要判断删除的位置和数量是否正确
返回值:Sequential_string new_string:删除完后的新串
**************************************************/
Sequential_string Delete_Sequential_String(Sequential_string old_string, int begin_loation,int number)
{
    int counter;//定义计数器
    Sequential_string new_string;
    new_string.length = 0;
    //合法性判断(begin_loation理应从1开始到leng长度)
    if(begin_loation <= 0 || begin_loation > old_string.length || (begin_loation+number-1) > old_string.length)
    {
        //错误:删除的位置或数量错误。
        printf("Error<8>: Wrong location or quantity of deletion.");
        return new_string;//返回空串
    }
    //择出删除位置之前的串
    for(counter = 0; counter < begin_loation-1;counter++)
    {
        new_string.Sequential_string_data[counter] = old_string.Sequential_string_data[counter];
    }
    //择出删除位置之后的串
    for(counter = begin_loation+number-1; counter < old_string.length; counter++)
    {
        new_string.Sequential_string_data[counter-number] = old_string.Sequential_string_data[counter];
    }
    new_string.Sequential_string_data[counter-number] = '\0';
    new_string.length = old_string.length - number;
    return new_string;
}

/**************************************************
(9)函数名: Replace_Sequential_String
功  能: 串替换(从begin 开始的number个字符)
参  数: (1)Sequential_string old_string:原始串
        (2)int begin_loation:开始替换的位置
        (3)int number:替换的字符个数
        (4)Sequential_string replace_string:要替换成的字符串
思  路: 锁定old_string从begin_loation开始的number个字符,
        然后开始剪切建立新串,
        ①把begin_loation之前的字符加入新串,
        ②要替换成的串加入,
        ③锁定后的字符加入
        ④组合成新串,返回传出
注  意:  最后加'\0'
返回值: Sequential_string new_string:替换后,产生的新串
**************************************************/
Sequential_string Replace_Sequential_String(Sequential_string old_string, int begin_loation,int number,Sequential_string replace_string)
{
    int counter;
    Sequential_string new_string;
    new_string.length = 0;
    //合法性判断
    if(begin_loation <= 0 || begin_loation > old_string.length || begin_loation+number-1>old_string.length)
    {
        //错误:要替换位置出现错误
        printf("\nError<9>: There is an error in the position to be replaced.\n");
        return new_string;//返回空串
    }
    //开始复制剪切
    for(counter = 0; counter < begin_loation-1; counter++)
    {
        new_string.Sequential_string_data[counter] = old_string.Sequential_string_data[counter];
    }
    //加入要替换的串
    for(counter = 0; counter < replace_string.length; counter++)
    {
        new_string.Sequential_string_data[begin_loation-1+counter] = replace_string.Sequential_string_data[counter];
    }
    //被替换位置,后面剩余的串
    for(counter = begin_loation+number-1; counter < old_string.length; counter++)
    {
        new_string.Sequential_string_data[counter-number+replace_string.length] = old_string.Sequential_string_data[counter];
    }
    new_string.Sequential_string_data[counter-number+replace_string.length] = '\0';
    new_string.length = old_string.length - number + replace_string.length;
    return new_string;
}



/**************************************************
(10)函数名: Display_Sequential_String
功  能: 输出展示串
参  数: Sequential_string show_String:要输出展示的串
注  意: 字符串后续可以换成自定义类型
返回值: 无
**************************************************/
void Display_Sequential_String(Sequential_string show_String)
{
    int counter;
    if(show_String.length > 0)
    {
        for(counter = 0; counter < show_String.length; counter++)
        {
            printf("%c", show_String.Sequential_string_data[counter]);
        }
        printf("\n");
    }
}

main函数测试 1:

范围正常情况下测试:

主函数文件名字

main.cpp
#include <stdio.h>
#include "Sequential_string.h"

int main()
{
    Sequential_string test_string,test_string1,test_string2,test_string3,test_string4;
    char test_char1[ ] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','\0'};
    char test_char2[] = {'1','2','3','\0'};
    printf("\n顺序串的基本运算如下:\n");
    printf("\n(1)建立串test_string和test_string1\n");
    Assignment_Sequential_string(test_string, test_char1);
    printf("\n(2)输出串test_string:\n");
    Display_Sequential_String(test_string);
    Assignment_Sequential_string(test_string1, test_char2);
    printf("\n(2)输出串test_string1:\n");
    Display_Sequential_String(test_string1);
    printf("\n(3)串test_string的长度是:%d\n",Length_Sequential_String(test_string));
    printf("\n(4)在串test_string的第9个字符位置插入串test_string1,从而产生test_string2\n");

    test_string2 = Insert_Sequential_String(test_string,9,test_string1);
    printf("\n(5)输出串test_string2:\n");
    Display_Sequential_String(test_string2);

    printf("\n(6)删除串test_string2第2个字符开始的五个字符,而产生串2\n");
    test_string2 = Delete_Sequential_String(test_string2,2,5);
    printf("\n(7)输出串test_string2:\n");
    Display_Sequential_String(test_string2);
    printf("\n(8)将串2第二个字符开始的5个字符替换成串1,从而产生串2\n");
    test_string2 = Replace_Sequential_String(test_string2,2,5,test_string1);
    printf("\n(9)输出串2\n");
    Display_Sequential_String(test_string2);
    printf("\n(10)提取串2的第二个字符开始的5个字符而产生串3\n");
    test_string3 = Get_Sequential_Substring(test_string2,2,5);
    printf("\n(11)输出串3\n");
    Display_Sequential_String(test_string3);
    printf("\n(12)将串2和串3链接起来,而产生串4\n");
    test_string4 = Connect_Sequential_String(test_string2,test_string3);
    printf("\n(13)输出串4\n");
    Display_Sequential_String(test_string4);
    return 0;
}

运行结果展示:

main函数测试 2:

范围超出情况下测试:

主函数文件名字

main.cpp
#include <stdio.h>
#include "Sequential_string.h"

int main()
{
    Sequential_string test_string,test_string1,test_string2,test_string3,test_string4;
    char test_char1[ ] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','\0'};
    char test_char2[] = {'1','2','3','\0'};
    printf("\n顺序串的基本运算如下:\n");
    printf("\n(1)建立串test_string和test_string1\n");
    Assignment_Sequential_string(test_string, test_char1);
    printf("\n(2)输出串test_string:\n");
    Display_Sequential_String(test_string);
    Assignment_Sequential_string(test_string1, test_char2);
    printf("\n(2)输出串test_string1:\n");
    Display_Sequential_String(test_string1);
    printf("\n(3)串test_string的长度是:%d\n",Length_Sequential_String(test_string));
    printf("\n(4)在串test_string的第100个字符位置插入串test_string1,从而产生test_string2\n");

    test_string2 = Insert_Sequential_String(test_string,100,test_string1);
    printf("\n(5)输出串test_string2:\n");
    Display_Sequential_String(test_string2);

    printf("\n(6)删除串test_string2第99个字符开始的五个字符,而产生串2\n");
    test_string2 = Delete_Sequential_String(test_string2,99,5);
    printf("\n(7)输出串test_string2:\n");
    Display_Sequential_String(test_string2);
    printf("\n(8)将串2第88个字符开始的5个字符替换成串1,从而产生串2\n");
    test_string2 = Replace_Sequential_String(test_string2,88,5,test_string1);
    printf("\n(9)输出串2\n");
    Display_Sequential_String(test_string2);
    printf("\n(10)提取串2的第33个字符开始的5个字符而产生串3\n");
    test_string3 = Get_Sequential_Substring(test_string2,33,5);
    printf("\n(11)输出串3\n");
    Display_Sequential_String(test_string3);
    printf("\n(12)将串2和串3链接起来,而产生串4\n");
    test_string4 = Connect_Sequential_String(test_string2,test_string3);
    printf("\n(13)输出串4\n");
    Display_Sequential_String(test_string4);
    return 0;
}

运行结果展示:

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

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

相关文章

将一个程序设置为开机启动【win11】

Windows 在 Windows 系统中&#xff0c;可以通过在 “启动” 文件夹中放置程序的快捷方式来实现开机启动。 按照以下步骤操作&#xff1a; 按 Win R 打开 “运行” 对话框&#xff0c;输入 shell:startup&#xff0c;然后按回车。这将打开 “启动” 文件夹。 找到你想设置为…

动态规划——打家劫舍(C++)

好像&#xff0c;自己读的书确实有点少了。 ——2024年7月2日 198. 打家劫舍 - 力扣&#xff08;LeetCode&#xff09; 题目描述 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连…

Python特征工程 — 1.2 特征分箱

目录 1 什么是特征分箱 2 分箱的重要性及其优势 3 有监督分箱 3.1卡方分箱原理 3.2 决策树分箱 4 无监督分箱 4.1 等距分箱 4.2 等频分箱 4.3 分位数分箱 实验数据&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1yT1ct_ZM5uFLgcYsaBxnHg?pwdczum 提取码&…

JAVA期末速成库(11)第十二章

一、习题介绍 第十二章 Check Point&#xff1a;P454 12.1&#xff0c;12.9&#xff0c;12.10&#xff0c;12,12 二、习题及答案 12.1 What is the advantage of using exception handling? 12.1使用异常处理的优势是什么? 答:使用异常处理有以下优势&#xff1a; 1. 提高…

浙江建筑安全员A证2024年最新考试题库练习

46.总承包单位依法将建设工程分包给其他单位的&#xff0c;分包合同中应当明确各自的安全生产方面的权利、义务。总承包单位对分包工程的安全生产承担&#xff08;&#xff09;责任。 A.全部 B.主要 C.部分 D.连带 答案&#xff1a;D 47.实施总承报的建设工程发生事故&…

一首歌的时间 写成永远

大家好&#xff0c;我是秋意零。 就在&#xff0c;2024年6月20日。我本科毕业了&#xff0c;之前专科毕业挺有感触&#xff0c;也写了一篇文章进行记录。如今又毕业了&#xff0c;还是写一篇文章记录吧&#xff01;&#xff01; 专科毕业总结&#xff1a;大学三年总结&#xf…

编译原理1

NFA&DFA 在正规式的等价证明可以借助正规集&#xff0c;也可以通过有限自动机DFA来证明等价&#xff0c;以下例题是针对DFA证明正规式的等价&#xff0c;主要步骤是①NFA&#xff1b;②状态转换表&#xff1b; ③状态转换矩阵&#xff1b; ④化简DFA&#xff1b; 文法和语…

【关于C/C++中的scanf不能使用问题】

方法1&#xff1a;scanf_s 方法2&#xff1a;看见后面的日志了吗 CRT……&#xff1f;在第一行加上#define 日志 方法3&#xff1a;#pragma warning&#xff08;disable&#xff1a;4996&#xff09; 4996是我们的报错序号

B站、小红书崩,原因竟然是...它

B站崩&#xff01;小红书崩&#xff01; 大家好&#xff0c;我是那个在B站和小红书崩溃时&#xff0c;还在试图刷新页面的技术博主。到底是怎么一回事儿&#xff1f;今天&#xff0c;让我们一起来‘挖掘’这场技术‘灾难’的真相。 上午 10 点左右&#xff0c;微信技术群里突…

西南交通大学【算法分析与设计实验1】

实验1.4 有向图拓扑排序 实验目的 &#xff08;1&#xff09;掌握算法的自然语言描述法&#xff0c;流程图绘制方法以及伪代码描述方法。 &#xff08;2&#xff09;理解算法的执行过程。 &#xff08;3&#xff09;掌握算法的编程实现方法、调试方法及测试方法。 实验任务…

JSON JOLT常用示例整理

JSON JOLT常用示例整理 1、什么是jolt Jolt是用Java编写的JSON到JSON转换库&#xff0c;其中指示如何转换的"specification"本身就是一个JSON文档。以下文档中&#xff0c;我统一以 Spec 代替如何转换的"specification"json文档。以LHS(left hand side)代…

【AIGC X UML 落地】从UML语句到UML图形的生成,来看Agent插件的制作

上篇我们讲到如何通过多智能体实现自然语言绘制UML图。 没有看过的,可以去看下原文:《【AIGC X UML 落地】通过多智能体实现自然语言绘制UML图》 其中有一个实现重点,就是如何将 PlantUML 语句生成 UML 图片。在这里笔者是通过自定义 Agent 插件来实现这一流程。 本文,就此…

disql使用

进入bin目录&#xff1a;cd /opt/dmdbms/bin 启动disql&#xff1a;./disql&#xff0c;然后输入用户名、密码 sh文件直接使用disql&#xff1a; 临时添加路径到PATH环境变量&#xff1a;在当前会话中临时使用disql命令而无需每次都写完整路径&#xff0c;可以在执行脚本之前…

在非 antd pro 项目中使用 umi OpenAPI

大家好&#xff0c;我是松柏。自从跟着鱼皮哥使用了ant design pro中的OpenAPI插件之后&#xff0c;我已经无法忍受自己写请求后端接口的方法了&#xff0c;所以这篇文章记录一下如何在非ant design pro项目中使用OpenAPI。 安装依赖 首先我们需要安装包umijs/openapi&#x…

02归并排序——分治递归

02_归并排序_——分治_递归_ #include <stdio.h>void merge(int arr[], int l, int m, int r) {int n1 m -l 1;int n2 r -m;//创建临时数组int L[n1], R[n2];for(int i 0; i < n1; i){L[i] arr[l i];}for(int j 0; j < n2; j){R[j] arr[m 1 j];}int i …

STM32 ADC精度提升方法

STM32 ADC精度提升方法 Fang XS.1452512966qq.com如果有错误&#xff0c;希望被指出&#xff0c;学习技术的路难免会磕磕绊绊量的积累引起质的变化 硬件方法 优化布局布线&#xff0c;尽量减小其他干扰增加电源、Vref去耦电容使用低通滤波器&#xff0c;或加磁珠使用DCDC时尽…

【驱动篇】龙芯LS2K0300之红外驱动

实验目标 编写HX1838红外接收器驱动&#xff0c;根据接收的波形脉冲解码红外按键键值 模块连接 模块连接&#xff1a;VCC接Pin 2&#xff0c;GND接Pin1&#xff0c;DATA接Pin16 驱动代码 HX1838 GPIO初始化&#xff0c;申请中断&#xff0c;注意&#xff1a;GPIO48默认是给…

Spring Boot 中 PGSQL 判断打卡点是否经过轨迹优化代码,循环查询物理表修改生成临时表,向临时表插入数据后再做ST_DWithin判断

记录一下一个业务问题&#xff0c;流程是这样的&#xff0c;我现在有一个定时任务&#xff0c;5分钟执行一次&#xff0c;更新车辆打卡的情况。现在有20俩车&#xff0c;每辆车都分配了路线&#xff0c;每条路线都有打卡点&#xff0c;每个打卡点分配了不同的时间段&#xff0c…

【动态规划 前缀和】2478. 完美分割的方案数

本文涉及知识点 划分型dp 动态规划汇总 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 LeetCode 2478. 完美分割的方案数 给你一个字符串 s &#xff0c;每个字符是数字 ‘1’ 到 ‘9’ &#xff0c;再给你两个整数 k 和 minLength 。 如…

Redis---保证主从节点一致性问题 +与数据库数据保持一致性问题

保证主从节点一致性问题 Redis的同步方式默认是异步的&#xff0c;这种异步的同步方式导致了主从之间的数据存在一定的延迟&#xff0c;因此Redis默认是弱一致性的。 解决&#xff1a; 1.使用Redisson这样的工具&#xff0c;它提供了分布式锁的实现&#xff0c;确保在分布式环…