单链表交叉分离,运用头插法,尾插法(算法库应用)

原文博客链接:单链表分离(头插法和尾插法的结合,理解指针变换)_3.对任务1或者2中创建的某一个单链表{a1,b1,a2,b2,...,an,bn},编写一个算法将-CSDN博客

函数实现:

/**************************************************
函数名:separate_LinkList
功  能: 把一个链表,交叉新建成两个表,一个尾插法,一个头插法(尾插法在原表之上)
注意:① 等构建完再置空
参  数: (1)LinkList *&L:原表
        (2)LinkList *&List_tail:原表之上尾插法建立的新表
        (3)LinkList*&List_head: 另外新建的单链表(头插法)
原文链接:https://blog.csdn.net/qq_57484399/article/details/127132144
返回值:  无
**************************************************/
void separate_LinkList(LinkList *&L,LinkList *&List_tail,LinkList*&List_head)
{
        LinkList *newNode;                     //新节点
        LinkList *rearNode;                   //新节点后继信息存储
        LinkList *Tail_pointer;                //List_tail尾指针

        newNode = L->next;                      //新节点从L->next开始

        List_tail = L;                          //List_tail从L开始
        Tail_pointer = List_tail;

        List_head = (LinkList*)malloc(sizeof(LinkList));    //List_head构建新节点
        List_head->next = NULL;


        while(newNode != NULL)
        {
            Tail_pointer->next = newNode;        //List_tail尾指针指向新节点
            Tail_pointer = newNode;              //①尾指针Tail_pointer后移,构建完成

            newNode = newNode->next;              //新节点后移

            rearNode = newNode->next;               //新节点后继信息存储

            newNode->next = List_head->next;        //新节点头插法插入
            List_head->next = newNode;

            newNode = rearNode;                      //书接上回
        }
        Tail_pointer->next = NULL;
}

完整代码:

main.cpp

#include <stdio.h>
#include <malloc.h>
#include "singlelist.h"

void split(LinkList *&L,LinkList *&L1,LinkList*&L2);//分离链表
/**************************************************
函数名:separate_LinkList
功  能: 把一个链表,交叉新建成两个表,一个尾插法,一个头插法(尾插法在原表之上)
注意:① 等构建完再置空
参  数: (1)LinkList *&L:原表
        (2)LinkList *&List_tail:原表之上尾插法建立的新表
        (3)LinkList*&List_head: 另外新建的单链表(头插法)
原文链接:https://blog.csdn.net/qq_57484399/article/details/127132144
返回值:  无
**************************************************/
void separate_LinkList(LinkList *&L,LinkList *&List_tail,LinkList*&List_head)
{
        LinkList *newNode;                     //新节点
        LinkList *rearNode;                   //新节点后继信息存储
        LinkList *Tail_pointer;                //List_tail尾指针

        newNode = L->next;                      //新节点从L->next开始

        List_tail = L;                          //List_tail从L开始
        Tail_pointer = List_tail;

        List_head = (LinkList*)malloc(sizeof(LinkList));    //List_head构建新节点
        List_head->next = NULL;


        while(newNode != NULL)
        {
            Tail_pointer->next = newNode;        //List_tail尾指针指向新节点
            Tail_pointer = newNode;              //①尾指针Tail_pointer后移,构建完成

            newNode = newNode->next;              //新节点后移

            rearNode = newNode->next;               //新节点后继信息存储

            newNode->next = List_head->next;        //新节点头插法插入
            List_head->next = newNode;

            newNode = rearNode;                      //书接上回
        }
        Tail_pointer->next = NULL;
}

int main()
{
    LinkList *L1, *L2,*L;
    ElemType a[10]= {1,10,2,9,3,8,4,7,5,6};
    CreatList_Tail(L, a, 10);
	printf("输出L表结果:");
	DisplayLinkList(L);
	separate_LinkList(L,L1,L2);
    printf("L1表结果:");
    DisplayLinkList(L1);
    printf("L2结果:");
    DisplayLinkList(L2);
    return 0;


}

singlelist.cpp  单链表函数库

#include "singlelist.h"

/**************************************************
①函数名: CreatList_Head
功  能: 头插法建立单链表
参  数: (1)LinkList *&L: 传入的单链表指针地址
        (2)ElemType Array_used[]:要用来建表的数组
        (3)int Array_number: 数组的长度
返回值:    无
**************************************************/
void CreatList_Head(LinkList *&L, ElemType Array_used[], int Array_number)
{
    int counter;
    LinkList *newnode;
    L = (LinkList *)malloc(sizeof(LinkList)); //创建头结点
    L->next = NULL;
    for(counter = 0; counter < Array_number; counter++)
    {
        newnode = (LinkList *)malloc(sizeof(LinkList));  //创建新节点
        newnode->data = Array_used[counter];
        newnode->next = L->next;         //将newnode插在原开始结点之前,头结点之后
        L->next = newnode;
    }
}
/**************************************************
②函数名: CreatList_Tail
功  能: 尾插法建立单链表
参  数: (1)LinkList *&L: 传入的单链表指针地址
        (2)ElemType Array_used[]:要用来建表的数组
        (3)int Array_number:数组的长度
返回值:   无
**************************************************/
void CreatList_Tail(LinkList *&L, ElemType Array_used[], int Array_number)
{
    int counter;
    LinkList *newnode,*tailnode;
    L = (LinkList *)malloc(sizeof(LinkList));//创建头结点
    L->next = NULL;
    tailnode = L;       //尾结点tailnode始终指向终端结点,开始指向头结点
    for(counter = 0; counter < Array_number; counter++)
    {
        newnode = (LinkList *)malloc(sizeof(LinkList)); //创建新节点
        newnode->data = Array_used[counter];
        tailnode->next = newnode;   //将新节点插入到尾结点之后
        tailnode = newnode;         //更新尾结点
    }
    tailnode->next = NULL;          //终端结点next域置空
}

/**************************************************
③函数名: DisplayLinkList
功  能: 输出单链表
参  数: (1)LinkList *L:将要输出的单链表
返回值: 无
**************************************************/

void DisplayLinkList(LinkList *L)
{
    LinkList *shownode;
    shownode = L->next;
    while(shownode != NULL)
    {
        printf("%d ",shownode->data);
        shownode = shownode->next;        //一直遍历,直到指向尾->newt = NULL
    }
    printf("\n");
}
/**************************************************
④函数名: DestroyLinkList
功  能: 销毁单链表
参  数: (1)LinkList *&L:要销毁的单链表
注意:① 等到指引下一个节点的指针为Null时就跳出,避免出现野指针,此时再销毁destroyNode
    ② 避免断开联系,记录 销毁节点的下一个节点
返回值: 无
**************************************************/
void DestroyLinkList(LinkList *&L)
{
    LinkList *destoryNode,*nextNode;
    destoryNode = L;
    nextNode = destoryNode->next;
    while(nextNode != NULL)        //①
    {
        free(destoryNode);
        destoryNode = nextNode;
        nextNode = destoryNode->next;   //②
    }
    free(destoryNode);

}
/**************************************************
⑤函数名: InitLinkList
功  能: 初始化单链表
参  数: LinkList *&L:要被初始化的链表指针地址
返回值: 无
**************************************************/
void InitLinkList(LinkList *&L)
{
    L = (LinkList *)malloc(sizeof(LinkList));//创建头结点
    L->next = NULL;
}
/**************************************************
⑥函数名: LinkListEmpty
功  能: 判断单链表是否为空
参  数: (1)LinkList *L:要判断的单链表
返回值: bool: 是否为空? treu:false
**************************************************/
bool LinkListEmpty(LinkList *L)
{
    return (L->next == NULL);
}

/**************************************************
⑦函数名: LinkListLength
功  能: 返回单链表L中数据节点的个数
参  数: LinkList *L:要计算的数据节点
返回值: int: 线性表数据节点个数值
**************************************************/
int LinkListLength(LinkList *L)
{
    int counter = 0;
    LinkList *nowNode = L;
    while(nowNode->next != NULL)
    {
        counter++;
        nowNode = nowNode->next;
    }
    return counter;
}

/**************************************************
⑧函数名: GetLocateValue
功  能: 求特定位置的数据元素值
参  数: (1)LinkList *L:要找的单链表
        (2)int location:所要找的位置
        (3)ElemType &value: 传递回所要找的值
注意: ① 判断跳出的时候, 是查找成功, 还是抵达末尾
     ② counter == 要找到序号,则跳出,所以counter < location  ,
    nowNode指向的节点为空,则到末尾,则跳出
    ③④ 这两条语句, 所指向的序号和节点, 是同步的, 位置到或者此节点为空,则跳出
返回值: bool: 是否查找成功? true:false
**************************************************/
bool SpecificLocate_Value(LinkList *L,int location, ElemType &value)
{
    int counter = 0;
    LinkList *nowNode = L;
    while(counter < location && nowNode != NULL)//②
    {
        counter++;          //③  当前计数的节点
        nowNode = nowNode->next;//④当前遍历到的节点
    }
    if(nowNode == NULL)                //①
    {
        return false;
    }
    else
    {
        value = nowNode->data;
        return true;
    }

}

/**************************************************
⑨函数名:SpecificValue_Location
功  能: 查找特定数据值的节点,并返回其位置
参  数: (1)LinkList *L: 被查找的单链表(2)ElemType e:
注  意:  ①从头结点后的第一个节点开始找
         ②while循环内的两条语句是同步指向的
         ③当nowNode为空时(到达末尾仍未找到), counter作废
         ④当nowNode不为空时,跳出时, counter表示所指向节点存在,并符合所需
返回值:
**************************************************/
int SpecificValue_Location(LinkList *L, ElemType value)
{
    int counter = 1;
    LinkList *nowNode = L->next;    //①
    while(nowNode != NULL && nowNode->data != value)
    {
        nowNode = nowNode->next;
        counter++;                     //②
    }
    if(nowNode == NULL)           //③
    {
        return 0;
    }
    else                    //④
    {
        return counter;
    }

}
/**************************************************
⑩函数名: LinkList_InsertElement
功  能: 在单链表特定位置插入节点
参  数: (1)LinkList *&L:要插入的单链表
        (2)int location:要插入的位置
        (3) ElemType &value:插入的数据
思路:    先在单链表L中,找到第 i-1个节点(不算头结点),若存在这样的节点,
        将值为value的节点 插入到其后面
注意:    ① 计数器和 nowNode是同步往后移动(从L->next开始算第一个节点),
         直到 找到counter = location-1,
         ②此时 nowNode不为空,则此时nowNode指向
         要插入位置的 前一个节点
         ③ 覆盖指针前, 牢记 nowNode->next里面存放的是后继节点信息,所以要先处理
          newNode->next = nowNode->next;
          然后我们才能再把 nowNode->next指向新节点 newNode
返回值: bool: 是否存在第i-1个节点,并插入成功? true : false
**************************************************/
bool LinkList_InsertElement(LinkList *&L, int location, ElemType &value)
{
        int counter = 0;
        LinkList *nowNode = L;
        LinkList *newNode;
        while((counter < (location-1)) && (nowNode != NULL)) //①
        {
            counter++;
            nowNode = nowNode->next;
        }
        if(nowNode == NULL)//②
        {
            return false;
        }
        else
        {
            newNode = (LinkList *)malloc(sizeof(LinkList));
            newNode->data = value;
            newNode->next = nowNode->next;//③
            nowNode->next = newNode;
            return true;
        }
}
/**************************************************
(11)函数名: LinkList_Delete_Location
功  能: 删除特定位置的节点元素
参  数: (1)LinkList *&L:被删除的单链表 (2)int location:特定位置
        (3) ElemType &value:被删除的元素值
思路:    找到第location-1个元素, 存储第locataion个元素值(判断null),然后free
        链接 location-1 和 location+1
注意:    ① counter和指针节点是同步的,要么找到location-1个节点,要么到末尾
        ② 虽然可能找到location-1个元素,其可能是最后一个元素,从而导致删除失败
        需要判断一下,deleteNode是否为空,才能得出是否任务成功
        ③ 指针覆盖还是老生常谈,先存储一下deleteNode(方便free),
           然后指针交替,然后free
返回值:  bool: 是否删除成功? true:false
**************************************************/
bool LinkList_Delete_Location(LinkList *&L,int location, ElemType &value)
{
    int counter = 0;
    LinkList *nowNode = L;
    LinkList *deleteNode;
    while(counter < (location-1) && nowNode != NULL)   //①
    {
        counter++;
        nowNode = nowNode->next;
    }
    if(nowNode == NULL)
    {
        return false;
    }
    else
    {
        deleteNode = nowNode->next;
        if(deleteNode == NULL)    //②
        {
            return false;
        }
        value = deleteNode->data;
        nowNode->next = deleteNode->next;  //③
        free(deleteNode);
        return true;
    }
}

/**************************************************
(12)函数名: DeleteMaxNode
功  能: 删除单链表中最大的一个节点
参  数: (1)LinkList *&L:要删除节点的单链表
思路: 四个指针, 最大指针,最大指针前一个节点
    目前遍历的指针,遍历指针的前一个节点, 边比较,边替换,边遍历
注意:①避免只有一个头结点,造成空指针替换异常
    ②③ 顺序不能变,因为③跳出的时候, 会利用到while的非空条件,
   避免对比的时候, 出现野指针,直到为空时,即可直接跳出,非空则比较替换
返回值:是否删除成功 ? true:false
**************************************************/
bool   DeleteMaxNode(LinkList *&L)
{
    LinkList *nowNode,*preNode;
    LinkList *maxNode,*preMaxNode;
    nowNode = L->next;
    preNode = L;
    maxNode = nowNode;
    preMaxNode = preNode;
    if(nowNode == NULL) //①
    {
        return false;
    }
    while(nowNode != NULL) //直到末尾
    {
        if(nowNode->data > maxNode->data)   //②
        {
            maxNode = nowNode;
            preMaxNode = preNode;
        }
        preNode = nowNode;       //接着走下一个节点
        nowNode = nowNode->next;   //③
    }
    preMaxNode->next = maxNode->next;
    free(maxNode);
    return true;
}

/**************************************************
(13)函数名:LinkList_sorting
功  能:对单链表中元素进行排序(至少有2个数据节点)
参  数:LinkList *&L:要进行排序的单链表
注意: ① 空表,或者只有一个数据节点,则不需要排序,返回false
      ② 开始节点必须是头结点,因为我们会用到start_compare->next,
      ③ 把数据节点(第二个数据节点及以后)和原始链表(头结点+一个数据节点)
      ④ 在有序表中,一直找到比前一个节点大,比后一个节点小的空挡,
         所以时刻对比start_compare->next->data, 并且start_compare->next不能为空
         (为空代表到达末尾,交替空指针)
        ⑤ 顺序不能变, 避免丢失有序表后续信息(指针覆盖的一句话)
详细链接:https://blog.csdn.net/qq_57484399/article/details/127141307
返回值:bool: 是否符合排序标准,并排序成功  ? true: false
**************************************************/
bool LinkList_sorting(LinkList *&L)
{
    LinkList *compare,*start_compare,*Remaining_node;
    if(L->next == NULL || L->next->next == NULL)//①保证至少有2个数据节点
    {
        return false;
    }
    compare = L->next->next;
    start_compare = L;  //②开始节点必须是头结点
    Remaining_node = compare->next;
    L->next->next = NULL; //③把数据节点(第二个数据节点及以后)和原始链表(头结点+一个数据节点)

    while(compare != NULL)
    {
        Remaining_node = compare->next;
        start_compare = L;
        while((start_compare->next != NULL) && (compare->data > start_compare->next->data))
        {
            start_compare = start_compare->next;
        } //④

        compare->next = start_compare->next;
        start_compare->next = compare;     //⑤
        compare = Remaining_node;
    }
    return true;

}

singlelist.h  单链表函数库头文件

#ifndef SINGLELIST_H_INCLUDE
#define SINGLELIST_H_INCLUDE

#include <stdio.h>
#include <malloc.h>

typedef int ElemType;   //定义单链表节点类型

typedef struct LNode
{
    ElemType data;
    struct LNode *next; //指向后继节点

}LinkList;
//①头插法建立单链表
void CreatList_Head(LinkList *&L, ElemType Array_used[], int Array_number);
//②尾插法建立单链表
void CreatList_Tail(LinkList *&L, ElemType Array_used[], int Array_number);
//③输出单链表
void DisplayLinkList(LinkList *L);
//④销毁单链表
void DestroyLinkList(LinkList *&L);
//⑤ 初始化线性表
void InitLinkList(LinkList *&L);
//⑥ 判断线性表是否为空表
bool LinkListEmpty(LinkList *L);
//⑦ 返回单链表L中数据节点的个数
int LinkListLength(LinkList *L);
//⑧ 求线性表L中指定位置的某个数据元素
bool SpecificLocate_Value(LinkList *L,int location, ElemType &value);
//⑨ 按元素值查找特定元素的位置
int SpecificValue_Location(LinkList *L, ElemType value);
//⑩ 把元素插入到特定位置
bool LinkList_InsertElement(LinkList *&L, int location, ElemType &value);
//(11) 删除特定位置的节点元素
bool LinkList_Delete_Location(LinkList *&L,int location, ElemType &value);
//(12)单链表删除其中其最大节点元素
bool  DeleteMaxNode(LinkList *&L);
//(13)对单链表中元素进行排序(至少有2个数据节点)
bool LinkList_sorting(LinkList *&L);
#endif // SINGLELIST_H_INCLUDE

代码运行结果:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何在jupyter使用新建的虚拟环境以及改变jupyter启动文件路径。

对于刚刚使用jupyter的新手来说&#xff0c;经常不知道如何在其中使用新建的虚拟环境内核&#xff0c;同时&#xff0c;对于默认安装的jupyter&#xff0c;使用jupyter notebook命令启动 jupyter 以后往往默认是C盘的启动路径&#xff0c;如下图所示&#xff0c;这篇教程将告诉…

HBase的Python API操作(happybase)

一、Windows下安装Python库&#xff1a;happyhbase pip install happybase -i https://pypi.tuna.tsinghua.edu.cn/simple 二、 开启HBase的Thrift服务 想要使用Python API连接HBase&#xff0c;需要开启HBase的Thrift服务。所以&#xff0c;在Linux服务器上&#xff0c;执行…

软考数据库

目录 分值分布1. 事务管理1.1 事物的基本概念1.2 数据库的并发控制1.2.1 事务调度概念1.2.2 并发操作带来的问题1.2.3 并发控制技术1.2.4 隔离级别&#xff1a; 1.3 数据库的备份和恢复1.3.1 故障种类1.3.2 备份方法1.3.3 日志文件1.3.4 恢复 SQL语言 分值分布 1. 事务管理 1.…

读所罗门的密码笔记04_社会信用

1. 人工智能 1.1. 人工智能可以帮助人们处理复杂的大气问题&#xff0c;完善现有的气候变化模拟&#xff0c;帮助我们更好地了解人类活动对环境造成的危害&#xff0c;以及如何减少这种危害 1.2. 人工智能也有助于减少森林退化和非法砍伐 1.3. 人工智能甚至可以将我们从枯燥…

【数据结构】树、二叉树与堆(长期维护)

下面是关于树、二叉树、堆的一些知识分享&#xff0c;有需要借鉴即可。 一、初识树&#xff08;了解即可&#xff09; 1.树的概念 概念&#xff1a;一种非线性数据结构&#xff0c;逻辑形态上类似倒挂的树 树的构成&#xff1a;由一个根左子树右子树构成&#xff0c;其中子树…

springboot使用com.github.binarywang 包实现微信网页上的支付和退款

前提 微信小程序中实现微信支付是从小程序中调去微信支付的界面直接进行支付&#xff0c;那么在pc端需要实现微信的支付呢&#xff0c;是需要出现一个二维码让用户使用扫码支付的。 注意&#xff1a; 需要实现pc端的微信支付&#xff0c;需要在微信商户平台开通native支付&…

CUDA版本支持的pytorch版本

PyTorch 1.0.x - 支持 CUDA 7.5 PyTorch 1.1.x - 支持 CUDA 8.0 PyTorch 1.2.x - 支持 CUDA 9.0 PyTorch 1.3.x - 支持 CUDA 9.2 PyTorch 1.4.x - 支持 CUDA 10.1 PyTorch 1.5.x - 支持 CUDA 10.2 PyTorch 1.6.x - 支持 CUDA 11.0 PyTorch 1.7.x - 支持 CUDA 11.0/11.1 PyTorch…

QtCreator调试时无法显示std::string的内容

在银河麒麟V10或Ubuntu下使用QtCreator调试代码时&#xff0c;std::string类型变量在大多数情况下不显示实际内容&#xff0c;而是显示"<无法访问>"字样&#xff0c;鼠标点击进去也是看不见任何有用信息&#xff0c;这样非常影响调试效率&#xff0c;为此&…

Android-Handler详解_使用篇

本文我将从Handler是什么、有什么、怎们用、啥原理&#xff0c;四个方面去分析。才疏学浅&#xff0c;如有错误&#xff0c;欢迎指正&#xff0c;多谢。 1.是什么 因为Android系统不允许在子线程访问UI组件&#xff0c;否则就会抛出异常。所以咱们平实用的最多的可能是在子线…

国际伦敦金行情分析中的趋势分析方法

国际伦敦金行情走势复杂多变。近期&#xff0c;金价曾经一度刷新历史的新高点至2222&#xff0c;但就在当天&#xff0c;金价又快速下跌跌超过30美元。不过这么多变的伦敦金行情也为我们的交易创造了空间&#xff0c;有空间就等于有机会&#xff0c;只要我们能够掌握国际伦敦金…

AWS SES发送邮件时常见的错误及解决方法?

AWS SES发送邮件如何做配置&#xff1f;使用AWS SES发信的限制&#xff1f; 在使用AWS SES发送邮件时&#xff0c;可能会遇到一些常见的错误。AokSend将介绍一些常见的AWS SES发送邮件错误及其相应的解决方法&#xff0c;帮助用户更好地利用AWS SES进行邮件发送。 AWS SES发送…

在 Windows 11 上安装 MongoDB

MongoDB 是一个流行的 NoSQL 数据库&#xff0c;它提供了灵活的数据存储方案&#xff0c;而 MongoDB Compass 则是一个可视化管理工具&#xff0c;可以更轻松地与 MongoDB 数据库交互和管理。在本文中&#xff0c;我们将介绍如何在 Windows 11 上安装 MongoDB&#xff0c;并配置…

手机短信验证码自动转发到服务器

今天写一个自动化处理程序&#xff0c;需要验证码登录&#xff0c;怎么样把手机收到的短信自动转发到服务器接口呢&#xff1f; 利用ios手机快捷指令的功能 打开快捷指令点击中间自动化点击右上角号选择信息信息包含选取&#xff0c;输入验证码选择立即执行点击下一步按下图配…

JavaWeb解压缩漏洞之ZipSlip与Zip炸弹

前言 前面一篇博文《Android Zip解压缩目录穿越导致文件覆盖漏洞》介绍过 Android 系统 Zip 文件解压缩场景下的目录穿越漏洞&#xff0c;近期在学习 JavaWeb 代码审计的时候从 github 看到《OpenHarmony-Java-secure-coding-guide.md》中“从 ZipInputStream 中解压文件必须进…

搭建机器人产业发展重要展示平台“2024南京国际机器人展览会”

2024南京国际智能机器人展览会 2024 Nanjing Intelligent Robot Expo 时间:2024年11月22-24日 地点:南京国际博览中心 南京&#xff0c;这座历史悠久的文化名城&#xff0c;如今正站在机器人产业发展的前沿。随着全球科技的飞速进步&#xff0c;机器人产业已经成为推动经济社…

记一次由gzip引起的nginx转发事故

故事背景 书接前几篇文章&#xff0c;仍然是交付甲方遇到的一个特殊诉求&#xff0c;从而引发了本期的事故。甲方的诉求是前端的请求过来&#xff0c;需要加密&#xff0c;但是要经过waf&#xff0c;必须要求是请求明文&#xff0c;那就要在waf和nginx之间做一个解密前置应用处…

网络链路层之(2)PPP协议

网络链路层之(2)PPP协议 Author: Once Day Date: 2024年3月27日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章可参考专栏: 通信网络技术_Once-Day的博客-CSDN…

pt-archiver的实践分享,及为何要用 ob-archiver 归档数据的探讨

作者简介&#xff1a;肖杨&#xff0c;软件开发工程师 在数据密集型业务场景中&#xff0c;数据管理策略是否有效至关重要&#xff0c;它直接关系到系统性能与存储效率的提升。数据归档作为该策略的关键环节&#xff0c;不仅有助于优化数据库性能&#xff0c;还能有效降低存储成…

(一)基于IDEA的JAVA基础9

循环结构及特点 while循环 do while循环 for 循环 特点:有循环条件 循环起始值 循环自增量(每次自增的量) 循环操作 while循环 语法: 初始部分//定义变量的地方&#xff0c;声明变量 while(循环条件){ 循环操作&#xff1b; 迭代部分&#xff1b; } 流程图: 练习:打…

Rust编程(三)生命周期与异常处理

生命周期 生命周期&#xff0c;简而言之就是引用的有效作用域。在大多数时候&#xff0c;我们无需手动的声明生命周期&#xff0c;因为编译器可以自动进行推导。生命周期的主要作用是避免悬垂引用&#xff0c;它会导致程序引用了本不该引用的数据&#xff1a; {let r;{let x …