C语言数据结构学习(clion版本)

【实战】CLion集成Git全流程:从Fork数据结构源码到本地调试 本文详细介绍了如何在CLion中集成Git进行完整开发工作流,从Fork数据结构源码仓库到本地配置、克隆、编译与调试的全过程。内容涵盖环境准备、Git与Cygwin工具链配置、加速访问GitHub的技巧,以及分支管理、提交推送等进阶操作,帮助C/C++开发者高效管理项目代码并进行调试。 阅读详情

栈的应用(就近匹配,逆波兰表达式)

先放一张clion设置截图,用于分割不同作用的文件,以及怎么定义路径和引用。
在这里插入图片描述
需要在main.c同级的CMakeLists.txt中定义source_file和header_file。
在CMakeLists.txt加入设置:

include_directories("source_file")
include_directories("header_file")

在这里插入图片描述
在source_file中对header_file中的文件进行实现,在头文件那里,可以通过相对路径引入,也可以通过CMakeLists.txt文件,设置。
在这里插入图片描述
这样就让clion中的C语言工程和visual studio中的一样了。注意,clion中,尽量不要用中文定义文件夹,容易出现路径寻找不到的问题。

括号匹配

#include <stdio.h>
#include "stackFinishByArray.h"

int isLeft(char ch){
   return ch=='(';
}

int isRight(char ch){
    return ch==')';
}

void printError(char *str,char *errMsg,const char *pos){
    printf("错误的信息:%s\n",errMsg);
    printf("%s\n",str);

    //计算打印空格的数量
    long long num = pos-str; //char型指针地址(占一个字节)相减
    for (int i = 0; i < num; ++i) {
        printf(" ");
    }
    printf("|\n");
}
void test01()
{
    char *str = "5+5*(6)+*/3*1-(1+3(";
    char *p =str;   //定义一个指针指向字符串的头地址
    seqStack myStack = init_Stack();
    while (*p!='\0'){ //没有到字符串的终止符的时候

        //判断是不是左括号
        if(isLeft(*p)){ //
            push_SeqStack(myStack,p);
        }

        //判断是不是右括号
        if(isRight(*p)){
            if(size_SeqStack(myStack)>0){  //栈不为空,弹出栈
                pop_SeqStack(myStack);
            } else{  //栈为空,直接报错,打印错误信息
                printError(str,"右括号没有匹配到左括号",p);
                break;
            }
        }
        p++;
    }

    //判断是否为空栈
    while (size_SeqStack(myStack)>0){

        printError(str,"左括号没有匹配到右括号", top_SeqStack(myStack));
        pop_SeqStack(myStack);
    }

}
int main() {
    test01();
    //printf("Hello, World!\n");
    return 0;
}

在这里插入图片描述

中缀转后缀表达式

算法流程

在这里插入图片描述
在这里插入图片描述

中缀表达式 转后缀表达式

可以利用自己已经实现的栈

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//#define MAX 1024
//
////定义栈的结构体
//struct SStack{
//    void * data[MAX]; //数组
//    int m_Size;
//};

typedef void* seqStack;
//开始编写stack的接口

//初始化栈
seqStack init_Stack();

//入栈
void push_SeqStack(seqStack stack,void * data);

//出栈
void pop_SeqStack(seqStack stack);
//获取栈顶元素
void* top_SeqStack(seqStack stack);

//返回栈大小
int size_SeqStack(seqStack stack);

//判断栈是否为空(0为空,1非空)
int isEmpty(seqStack stack);


//销毁栈
void destroy_SeqStack(seqStack stack);
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "stackFinishByArray.h" //(1)../header_file/通过相对路径引入  (2)通过CMakeLists.txt 定义路径
#define MAX 1024

//定义栈的结构体
struct SStack{
    void * data[MAX]; //数组
    int m_Size;
};

typedef void* seqStack;
//开始编写stack的接口

//初始化栈
seqStack init_Stack(){

    struct SStack *myStack=malloc(sizeof (struct SStack)); //先给管理栈的结构体开辟空间
    if(myStack==NULL){
        return NULL;
    }

    //清空数组中的每个元素
    memset(myStack->data,0, sizeof(void*)*MAX); //将数组中的每个元素赋值为0

    myStack->m_Size=0;

    return myStack;
}

//入栈
void push_SeqStack(seqStack stack,void * data){
    if(stack==NULL){
        return;
    }

    //判断栈是否已经满了,如果满了,不能入栈
    struct SStack *myStack = stack;
    if(myStack->m_Size==MAX){
        return;
    }

    myStack->data[myStack->m_Size]=data; //入栈插入
    myStack->m_Size++; //更新栈大小
}

//出栈
void pop_SeqStack(seqStack stack){
    if(stack==NULL){
        return ;
    }

    //如果是空栈,不执行出栈
    struct SStack *myStack = stack;
    if(myStack->m_Size==0){
        return ;
    }

//    void *data = myStack->data[myStack->m_Size-1];
//    memset(myStack->data[myStack->m_Size-1],0,sizeof(void *));
    myStack->data[myStack->m_Size-1]=NULL;
    myStack->m_Size--;
}
//获取栈顶元素
void* top_SeqStack(seqStack stack){
    if(stack==NULL){
        return NULL;
    }

    struct SStack *myStack=stack;
    if(myStack->m_Size<=0){
        return NULL;
    }

    return myStack->data[myStack->m_Size-1];
}

//返回栈大小
int size_SeqStack(seqStack stack){
    if(stack==NULL){
        return -1;
    }

    struct SStack *myStack=stack;
    return myStack->m_Size;
}

//判断栈是否为空(0为空,1非空)
int isEmpty(seqStack stack){
    if(stack==NULL){
        return -1; //真
    }

    struct SStack *myStack=stack;
    if(myStack->m_Size<=0){
        return 1; //真
    } else{
        return 0; //假
    }
}

//销毁栈
void destroy_SeqStack(seqStack stack){
    if(stack==NULL){
        return;
    }

    free(stack);
    stack=NULL;
}

中缀转后缀是可以正常实现的,但是还有问题,就是对数字和字符的转换有问题,同时通过后缀去计算大表达式的值也有点问题,先记录在这里,有空来解一下bug。

#include <stdio.h>
#include "stackFinishByArray.h"

//我的这种写法不对//很多清空不符合(表达式中的数字提取就有问题)
//遍历后缀表达式计算结果
float calculate(seqStack stack, char *arr){
    if(arr ==NULL){
        return -1;
    }
    char *myArr = arr; //数组的首地址

    //开始入栈
    while (*myArr!='\0'){
        if(*myArr!='+' &&  *myArr!='-' &&  *myArr!='*' &&  *myArr!='/'){
            //这里就应该将其转化成数字,压入栈中
            push_SeqStack(stack,myArr);  //这样压入栈中的就全是数字了
            myArr++;
        } else{

            int element = size_SeqStack(stack);
            //弹出第一个数
            char *temp_first = top_SeqStack(stack); //这里由于是由数组实现,char *temp_first相当于指向了一个字符串,我们只需要提取首地址即可
            int first = *temp_first-'0';
            pop_SeqStack(stack);


            //弹出第二个数
            char *temp_second = top_SeqStack(stack);
            int second = *temp_second-'0';
            pop_SeqStack(stack);

            if(*myArr=='+'){
                int result = first + second;
                push_SeqStack(stack,&result);
                myArr++;
            } else if(*myArr=='-'){
                int result = second - first;
                push_SeqStack(stack,result);
                myArr++;
            } else if(*myArr=='*'){
                int result = second * first;
                push_SeqStack(stack,&result);
                myArr++;
            } else{
                float result = second / first;
                push_SeqStack(stack,&result);
                myArr++;
            }

        }
    }
    float *result = top_SeqStack(stack);
    return *result;
}
//利用返回值比较优先级
int priority(const char *ch){
    if(*ch=='*' || *ch=='/'){
        return 1;
    } else if(*ch=='+' || *ch=='-') {
        return 0;
    }
    return -1;
}
//中缀转后缀表达式
void test02(){

    char *str = "8+(3-1)*5"; //该表达式可以通过键盘输入
    seqStack myStack = init_Stack(); //初始化一个栈
    char temp[10];
    int index=0;
    char *pStr = str; //获取首元素地址
    while (*pStr!='\0'){

        if( *pStr!='+' && *pStr!='-' && *pStr!='*' && *pStr!='/' && *pStr!='(' && *pStr!=')'){
            temp[index++]=*pStr; //将数字交给字符数组存储
            pStr++;
            continue; //结束此次循环,进入下一次
        }
        if(*pStr=='('){
            push_SeqStack(myStack,pStr);
            pStr++;
            continue;
        }
        if(*pStr=='+' || *pStr=='-' || *pStr=='*' || *pStr=='/'){
            if(isEmpty(myStack)){ //若栈为空,直接入栈
                push_SeqStack(myStack,pStr);
                pStr++;
                continue;
            } else{ //栈不为空就需要比较优先级
                if(priority(pStr) > priority(top_SeqStack(myStack))){
                    push_SeqStack(myStack,pStr);
                    pStr++;
                    continue;
                } else{
                    char *tempChar = top_SeqStack(myStack);
                    temp[index++]=*tempChar; //将栈顶元素给数组,并弹出栈
                    pop_SeqStack(myStack); //栈顶元素出栈
                    push_SeqStack(myStack,pStr); //进栈
                    pStr++;
                    continue;
                }
            }
        }

        if(*pStr==')'){
            while (size_SeqStack(myStack)>0){
                char *tempChar = top_SeqStack(myStack); //先获取栈顶元素
                if(*tempChar=='('){
                    pop_SeqStack(myStack);
                    pStr++;
                    break;
                } else{
                    temp[index++]=*tempChar;
                    pop_SeqStack(myStack);
                }
            }
        }

    }

    if(!isEmpty(myStack)){  //栈不为空,依次把剩余的元素加入到字符数组中
        while (size_SeqStack(myStack)>0){
            char *tempChar = top_SeqStack(myStack); //先获取栈顶元素
            temp[index++]=*tempChar;
            pop_SeqStack(myStack);
        }
    }

    //printf("%d", size_SeqStack(myStack)); //说明到这里的时候就是空栈了
    //字符数组剩余的未赋值的空间,是‘\0’
    for (int i = 0; i < strlen(str); ++i) {
        printf("%c  ",temp[i]);
    }

    //此时计算完后缀表达式的栈是空的,可以重复利用
    printf("%.1f",calculate(myStack,temp));
}



int main() {
    test02();
    //printf("Hello, World!\n");
    return 0;
}

二叉树(遍历,树高,叶子数,拷贝二叉树,释放二叉树)(递归法实现)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct BinaryNode{
    char ch; //数据域
    struct BinaryNode *lChild; //左孩子
    struct BinaryNode *rChild; //右孩子
};

//遍历二叉树
void recursion(struct BinaryNode *root){
    if(root==NULL){
        return;
    }

    //前序遍历 根左右
    printf("当前节点的值为:%c\n",root->ch); //打印当前节点的值
    if(root->lChild!=NULL){
        recursion(root->lChild);
    }

    if(root->rChild!=NULL){
        recursion(root->rChild);
    }

    //中序遍历
//    recursion(root->lChild);
//    printf("当前节点的值为:%c\n",root->ch); //打印当前节点的值
//    recursion(root->rChild);
}

//二叉树的计算
void calculateLeafNum(struct BinaryNode *root,int *num){
    if(root==NULL){
       return ;
    }

    if(root->lChild==NULL && root->rChild==NULL){
        (*num)++;
    }
    calculateLeafNum(root->lChild,num);
    calculateLeafNum(root->rChild,num);
}

//树高
int getTreeHeight(struct BinaryNode *root){
    if(root==NULL){
        return 0;
    }

    int lHeight = getTreeHeight(root->lChild);
    int rHeight = getTreeHeight(root->rChild);

    int height = lHeight>rHeight? lHeight+1 : rHeight+1;
    return height;
}

struct BinaryNode *copyBinaryTree(struct BinaryNode * root){
    if(root==NULL){
        return NULL;
    }

    //先拷贝左子树
    struct BinaryNode *lchild = copyBinaryTree(root->lChild);

    //再拷贝右子树
    struct BinaryNode *rchild = copyBinaryTree(root->rChild);
    //创建新的节点
    struct BinaryNode *newNode = malloc(sizeof(struct BinaryNode)); //在堆空间中,开辟一个空间,存储节点

    newNode->ch=root->ch;
    newNode->lChild=lchild;
    newNode->rChild=rchild;

    //返回给用户
    return newNode;
}

void freeBinaryTree(struct BinaryNode *root){
    if(root==NULL){
        return;
    }

    //先释放左子树
    freeBinaryTree(root->lChild);
    //先释放右子树
    freeBinaryTree(root->rChild);
   //释放根节点
    free(root);
}

void test01(){

    struct BinaryNode NodeA={'A',NULL,NULL}; //初始化一个节点
    struct BinaryNode NodeB={'B',NULL,NULL}; //初始化一个节点
    struct BinaryNode NodeC={'C',NULL,NULL}; //初始化一个节点
    struct BinaryNode NodeD={'D',NULL,NULL}; //初始化一个节点
    struct BinaryNode NodeE={'E',NULL,NULL}; //初始化一个节点
    struct BinaryNode NodeF={'F',NULL,NULL}; //初始化一个节点
    struct BinaryNode NodeH={'H',NULL,NULL}; //初始化一个节点
    struct BinaryNode NodeG={'G',NULL,NULL}; //初始化一个节点

    //构建关系
    NodeA.lChild=&NodeB;
    NodeA.rChild=&NodeF;

    NodeB.rChild=&NodeC;

    NodeC.lChild=&NodeD;
    NodeC.rChild=&NodeE;

    NodeF.rChild=&NodeG;

    NodeG.lChild=&NodeH;

    //遍历节点
    //recursion(&NodeA);

    //统计二叉树中的叶子的数量
    int num=0; //局部遍历必须赋初值,只有全局,结构体这些,再堆空间或者常量池的中的,可以不用赋初值
    calculateLeafNum(&NodeA,&num);
    printf("%d\n",num);

    //获得树的高度
    int height=getTreeHeight(&NodeA);
    printf("%d\n",height);

    //拷贝一个二叉树
    printf("------------------------\n");
    struct BinaryNode * newNode = copyBinaryTree(&NodeA);
    recursion(newNode);

    //释放二叉树
    freeBinaryTree(newNode);
}


int main(){

    test01();
    printf("hello,world!");
    return 0;
}

非递归法,利用栈实现对二叉树的遍历

clion中,对多行进行编辑,同时按住alt+shift对多行进行编辑
在这里插入图片描述

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "stackFinishByArray.h" //利用数组实现的栈来对二叉树进行遍历

struct BinaryNode{
    char ch; //数据域
    struct BinaryNode *lChild; //左孩子
    struct BinaryNode *rChild; //右孩子
    int flag;
};

void nonRecursionBinaryTree(struct BinaryNode *root){
    if(root==NULL){
        return;
    }

    seqStack myStack = init_Stack(); //先初始化一个空栈
    //将根节点压入栈中
    push_SeqStack(myStack,root);
    //当栈中元素大于0时,执行循环
    while (size_SeqStack(myStack)>0){
        //首先拿出栈顶元素
        struct BinaryNode *topNewNode = top_SeqStack(myStack);
        pop_SeqStack(myStack);
        //栈顶元素为真,直接输出
        if(topNewNode->flag==1){
            printf("输出的元素为:%c\n",topNewNode->ch);
            continue;
        }
        //如果栈顶元素为假,则改为真
        topNewNode->flag=1;
        //并将该节点的右子树,左子树,根压入栈中
        if(topNewNode->rChild!=NULL){
            push_SeqStack(myStack,topNewNode->rChild);
        }
        if(topNewNode->lChild!=NULL){
            push_SeqStack(myStack, topNewNode->lChild);
        }
        push_SeqStack(myStack,topNewNode);

    }

    //销毁这个栈
    destroy_SeqStack(myStack);
    myStack=NULL;
}

void test03(){
    struct BinaryNode NodeA={'A',NULL,NULL,0}; //初始化一个节点
    struct BinaryNode NodeB={'B',NULL,NULL,0}; //初始化一个节点
    struct BinaryNode NodeC={'C',NULL,NULL,0}; //初始化一个节点
    struct BinaryNode NodeD={'D',NULL,NULL,0}; //初始化一个节点
    struct BinaryNode NodeE={'E',NULL,NULL,0}; //初始化一个节点
    struct BinaryNode NodeF={'F',NULL,NULL,0}; //初始化一个节点
    struct BinaryNode NodeH={'H',NULL,NULL,0}; //初始化一个节点
    struct BinaryNode NodeG={'G',NULL,NULL,0}; //初始化一个节点

    //构建关系
    NodeA.lChild=&NodeB;
    NodeA.rChild=&NodeF;

    NodeB.rChild=&NodeC;

    NodeC.lChild=&NodeD;
    NodeC.rChild=&NodeE;

    NodeF.rChild=&NodeG;

    NodeG.lChild=&NodeH;

    nonRecursionBinaryTree(&NodeA);

}
int main(){
    test03();
    return 0;
}

在这里插入图片描述

更改文件的输出编码格式

在这里插入图片描述

数据结构c语言版严蔚敏第二版课后答案 数据结构c语言版第二版课后答案严蔚敏 1.自学编程,难免思路阻塞,收集更新了严蔚敏,吴伟民版《数据结构-C语言版》各章节的课本源码和配套习题集答案解析,目的是为了整理数据结构中的知识点,并与网友交流意见,集思广益,共同进步。这里是所有的源码和课后习题实现目录: 这些源码和答案还有 数据结构 严蔚敏(c语言)第二版PDF书籍 下载地址在文章最下方: 02.本源码与解析涵盖了《数据结构》课本和习题集... 阅读详情

相关推荐

【Clion】Clion如何创建并运行C/C++文件

本篇文章: ​ 主要帮助大家解决如何在Clion中创建并运行C/C++文件的问题。其中解决了创建C/C++文件报错问题。 .

qq_44366571的博客 5万+

Clion如何添加头文件?

超简单!如何在clion中添加头文件?

weixin_43356770的博客 1万+

windows配置Clion进行C语言开发

0x01.首先去官网下载clion,并运行下载的.exe文件按步骤安装 安装的时候有个需要勾选的窗口是配置环境变量和快捷方式的,直接全勾上吧! 0x02.接下来下载MinGW,并添加到环境变量. 0x03.打开Clion,链接minGW配置. 0x04.配置完成,创建c工程 0x05.接下来就可以写代码了.如下图点击运行即可. ...

一个兴趣使然CVer的博客 2461

在Clion中如何添加头文件?

在Clion中如何头文件

进击的扛把子 2万+

使用 Clion + MSYS2 配置 C 语言编程环境

使用 CLion + MSYS2 配置 C 语言编程环境 0x01 开始之前 Q1:什么是 CLion ? A1: CLion 是一款专为开发 C 及 C++ 所设计的跨平台 IDE。它是以 IntelliJ 为基础设计的,包含了许多智能功能来提高开发人员的生产力。 可以参考: 1. 搜狗百科 https://baike.sogou.com/v101463648.htm?fro...

Wali_00的博客 5897

CLion常用插件及c文件模板配置

其实我们还可以将这些模版开发成插件上传到插件市场(Java就可以开发),这些留给以后折腾吧,感兴趣的可以自行先研究一下。

逍遥游的博客 1万+

CLion使用相对路径读入文件

CLion使用相对路径读入文件 CLion中的工程会自带 cmake-build-debug 文件夹,将自定义的文件夹放到 这个文件夹里面,就可以使用相对路径了 点击 Run->Edit Configurations,修改 Working directory,将这里的路径改成工程的路径,同样可以使用相对路径了 ...

努力搬砖的打工人 2937

告别臃肿VS!仅用Visual Studio 2022 Build Tools为Qt 5.12.12配置MSVC2017开发环境

本文详细介绍了如何仅使用Visual Studio 2022 Build Tools为Qt 5.12.12配置MSVC2017开发环境,避免安装臃肿的完整VS。通过精准选择组件、配置Qt Creator编译器和优化Kit设置,实现高效、精简的Windows平台Qt开发环境搭建,特别适合追求性能和资源优化的开发者。

weixin_30340617的博客 350

clion共享库开发及引用

共享库开发 项目创建过程省略,头文件在include中 cmake_minimum_required(VERSION 2.8.4) project(shared11) set(CMAKE_CXX_STANDARD 14) SET(ROOT_DIR /leo-build/lib/loc/shared) add_library(shared11 SHARED library.cpp include/library.h) #设置库文件的输出目录 SET(LIBRARY_OUTPUT_PATH ${ROOT_D

qq_39049011的博客 584

单细胞测序流程(五)t-sne聚类分析和寻找marker基因

系列文章目录 单细胞测序流程(一)简介与数据下载 单细胞测序流程(二)数据整理 单细胞测序流程(三)质控和数据过滤——Seurat包分析,小提琴图和基因离差散点图 单细胞测序流程(四)主成分分析——PCA 本期主讲内容——t-sne聚类分析和寻找marker基因 介绍:T-SNE是一种用于探索高维数据的非线性降维算法。它将多维数据映射到适合于人类观察的两个或多个维度。 一、课前准备 之前所使用的数据 R语言的IDE 二、过程 聚类分析的目的是根据细胞的差别所进行细胞分群,两个..

qq_45478665的博客 2万+

UVM自学笔记3——项目之三——从零开始搭建ahb_sramc验证平台

创建如下所示的目录结构: 2.在tb的文件下:顶层的testbench如下:在tb中,第24行的代码将uvm宏相关的内容include进来,第26行的代码把uvm_pkg包导入进来,然后将agent相关的包(ahb_pkg/sram_pkg),testcase相关的包(uvm_ahb_sram_test_pkg)以及env相关的包(uvm_ahb_sram_env_pkg)都导入进来,在第38行和39行将接口以virtual interface的形式配置给ahb_agent和sramc_agent下

ZhangShuHuai11的博客 9474

C语言学习记录

千里之行,始于足下。种一棵树最好的时间是十年前,其次就是现在。加油!

qq_52537524的博客 327

LwIP在国产MCU的落地实践:从协议栈优化到网络稳定性实战

本文详细介绍了LwIP协议栈在国产GD32F407 MCU上的移植与优化实践,涵盖硬件平台选择、驱动适配、协议栈调优和网络稳定性提升策略。通过内存管理优化、实时操作系统集成和性能测试,为工业物联网应用提供高可靠性网络通信解决方案,显著提升数据传输效率和系统稳定性。

m2n3b4v5c6的博客 270

用cLion编写运行c语言程序

用CLion编写运行c语言程序 朝闻道,夕可死矣! 哈哈哈哈

weixin_45766044的博客 2万+

NVIDIA Jetson Orin DLA架构解析与AI推理优化实践

深度学习加速器(DLA)作为专用AI推理芯片,通过固定功能架构实现卷积、池化等神经网络操作的高效能比处理。其核心原理在于硬件级优化计算单元与数据流,相比通用GPU可提升3-5倍能效。在边缘计算场景中,DLA与GPU的异构协同成为关键,特别适合自动驾驶感知、机器人视觉等实时性要求高的应用。NVIDIA Jetson Orin平台通过结构化稀疏技术,在ResNet50等模型上实现近2倍性能提升。开发实践中需注意算子支持、精度校准等关键点,结合TensorRT工具链可充分发挥DLA在低功耗场景的独特优势。

weixin_32999557的博客 397

STM32CubeMX之定时器输入捕获

上一章介绍了STM32定时器的PWM输出功能,定时器的几个通道除了有输出功能外,还可以做输入用,可捕获信号的上升沿或下降沿,可以用于测量信号的频率、周期、占空比等。本篇文章将介绍用STM3...

zhang062061的专栏 1339

clion以及cygwin的安装与配置

背景 需要学习数据结构,而数据结构的书籍又是基于C语言的. C语言基础不咋地, 所以得多动手, 动手又得有工具。平时用IDEA用的比较多,jetbrains这家公司的全家桶的确非常好用,所以就考虑到了Clion. 安装完clion, 还需要安装Toolchiains. 搜索半天, 都是推荐安装MinGw, 结果下载了之后只是一个下载工具, 还有一堆其他依赖需要安装. 安装过程也是纠结, 过一会报...

树洞 1万+

SMART200如何实现多次调用子程序带定时器功能

1、西门子200PLC的子程序由于很多限制条件,如果希望建立一个可以多次调用的子程序,那么这个子程序里是不能含有定时器指令的,所以我们只能退而求其次了。建议将沿指令(上升沿、下降沿)放在多次调用子程序的外面。 2、可以提供不同的时基,提供不同时间的定时 3、实现秒定时 5、子程序内部: STL代码: 1、时基信号由外部提供、 可以提供不同的时基信号 2、实现循环定时开关 LD #Start:L0....

RXXW_Dor的博客 1万+

使用CLion的C语言开发环境配置

一、MinGW的配置 浏览器搜索框输入MinGW进行搜索, 选择MinGW的下载地址进入,网址:https://sourceforge.net/projects/mingw-w64/ 进入网站,点击Windows栏的Files 向下拉动网页到MinGW-W64 GCC-8.1.0栏,选择下载, 点击后,网页跳转过去就开始下载了, 下载后是个压缩文件, 对其解压,(下方是我以前用的32位的,与上面下载不同,请忽略) 解压后将bin路径配置到系统变量的PATH下。 然后按Win+R输入cmd回车,敲入gcc -

weixin_45965432的博客 1万+

【YOLO系列】YOLOv4详解:模型结构、损失函数、训练方法及代码实现

摘要:YOLOv4在目标检测领域实现了精度与速度的平衡,通过CSPDarknet53骨干网络、SPP+PANet特征融合及CIoU损失函数等创新,在MS COCO数据集达到65.7% AP50,V100显卡实现62FPS实时检测。核心优化包括Mosaic数据增强、自对抗训练和解耦头结构,显著提升小目标检测和遮挡场景鲁棒性。代码实现采用CSP模块和SPP多尺度池化,兼顾计算效率与检测性能,为工业落地提供高效解决方案。(149字)

一碗白开水一 1357

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

开发C语言的3款神器,VS2019、VScode和IntelliJ Clion

往期推荐:C语言学习资源汇总,史上最全面总结,没有之一 一、Visual Studio 2019环境安装配置+代码调试 环境安装配置 首先我们要在Visual Studio官方网站去下载安装包 进入官网后会发现有三种版本可供下载,分别是社区版、专业版和企业版,冲哥这里选择的是专业版。 下载完成后,我们双击下载的软件开始安装 在弹出的画面点击继续 等待完成然后我们开始配置开发环境 如果没有别的需求这里我们就只选择:使用C++的桌面开发 如果不想用默认的安装路径(默认是安装在C盘的),可以点击更改来指定

专注于C语言编程干货分享 2万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Clion使用笔记(C语言、C++、stm32)

Clion使用笔记(C语言、C++、stm32)

weixin_58601259的博客 8087

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

C语言----基于CLion搭建C语言开发环境

C语言基础----基于CLion搭建C语言开发环境 一、下载安装CLion (1)从 CLion官方下载地址 下载CLion,可以下载社区版或者使用试用版 (2)安装CLion,基本上都是下一步下一步,这里不再演示 二、下载安装MinGW (1) MinGW下载官方地址 下载 (2)下完完成后,右键-【以管理员权限运行】,然后点击【next】 (3)选择64位,点击【next】 (4)选择自己的安装位置,点击【next】 (5)点击【next】 (6)点击【finish】完成安装 (7)设置环

redrose2100的博客 7603

C语言超强编辑器Clion,如何在Clion下创建多个.c文件

C语言超强编辑器Clion,如何在Clion下创建多个.c文件 推荐一款超级好用的C语言编辑器Clion,今天先不分享Clion的安装,如果大家需要,后期可以出一版Clion安装教程。 重点来了! 这么好用的工具,为什么只能写一个c文件? 多写一个会报错!!! 这是创建好项目后,程序自动的c文件,可以正确的结果。 于是我就想,这么好用的工具,在写个 hello.c 文件行不? 于是乎,我就又写了一个: 结果发现,错误一大堆。 后来研究了半天发现,解决这个问题也很简单,就..

全村希望的博客 7971
上一篇: springboot学习04(从搭建到熟悉)
下一篇: C语言排序算法实现
Smallcloudy
博客等级 码龄10年 53粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值