【算法】算法的空间复杂度和时间复杂度
前言🕵️♂️在之前的学习中,已经接触过了网上OJ题目 在一些题目中,我们经常可以看到时间复杂度和空间复杂度的要求 你可能和我有一样的疑惑,复杂度究竟是什么?我要怎么评判我自己写的算法的复杂度? 今天就让我们来认识认识~~ 1.算法效率🧐和做任何事情一样,我们写的算法,自然也有它的运行效率。效率越高越好 1.1什么是算法算法可以简单地理解为我们为了求解一个问题,所写的函数 在初识C语言中,我们学习过利用递归求解斐波那契数列的算法 1234567long long Fib(size_t N){ if(N < 3) return 1; return Fib ...
【树莓派开发】出现报错pragama once in main file
前言众所周知,#pragma once语句是防止头文件重复包含非常常用的一条语句VS编译器在创建.h文件的时候会自动帮你在开头添加这个语句但是在gcc编译器下,这个语句就可能会出现一些问题 所使用编译器: VS2019(windows10) 树莓派(linux-gcc) warning: #pragma once in main file在我尝试在linux环境下使用#pragma once语句时,遇到了这个报错 解决这个问题的办法很简单,就是不要编译头文件 编译器会自动展开头文件,无需手动编译 出现问题原因网上查了查:出现这个问题的原因是编译器在编译头文件的时候,#pr ...
【C语言】预处理操作(详解)
[TOC] 前言😜上篇博客,我们提到了C语言程序运行的几个环节。 本篇博客中提到的预处理指令,就是在预处理阶段运行的一些代码。 本篇博客使用的编译器🎰 VS2019(win10) 树莓派(linux-gcc) 1.预定义符号12345__FILE__ //进行编译的源文件__LINE__ //文件当前的行号__DATE__ //文件被编译的日期__TIME__ //文件被编译的时间__STDC__ //测试编译器是否遵循ANSI C,遵循值为1,不遵循则该符号未定义 2.#define2.1定义标识符1#define name stuff 12345678910#defin ...
【leetcode】LCR177:撞色搭配,数组中数字出现的次数
[TOC] 题目说明 来源:剑指 Offer 56 - I. 数组中数字出现的次数另外,260只出现以此的数字3这道题和本题是一样的。2023年再回头看,剑指offer在leatcode上改名成lcr了。所以本文标题也更新一下。 难度:中等 一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。 示例 1: 12输入:nums = [4,1,4,6]输出:[1,6] 或 [6,1] 示例 2: 12输入:nums = [1,2,10,4,1,4,3,3]输出:[2,10] 或 [10,2] 限 ...
【C语言】函数调用的参数压栈(详解)
[TOC] 前言在早期的学习中,我们已经了解到当函数传值调用参数的时候,用的是形参。 形参是实参的一份临时拷贝,对形参的改变不会影响实参里的值。 传值调用和传址调用👉点我 今天让我们以汇编语言来了解函数调用的参数压栈这一知识点 所用编译器:VS2019 不同编译器的实现可能略有不同,以实际为准 1.什么是栈区?栈,是一种数据结构。 在学习C语言的过程中,我们一般只关注内存中的3个区域,分别是栈区、堆区和静态区。 其中堆区主要用于动态内存管理,在之前的博客中已经和大家介绍过。 详解动态内存管理👉点我 而栈区就是编译器给函数运行分配的空间了。 和堆区空间需要手动分配不同,这一部 ...
【C语言】程序运行过程:预处理/编译/汇编/链接
哈喽啊,盆友们。一起来看看C语言中编译预处理的内容吧!😜 1.程序编译的几个阶段众所不周知,C语言的程序运行分为几个阶段。 咱们可以看看下面这个图,简单了解一二👇 细分开来,编译还分为3个小阶段:预编译(预处理)、编译、汇编 这三个阶段又分别做了什么事情呢?这就需要我们用linux下的gcc编译器来验证了 1.1 预编译现在我们编写了一个这样的代码,分为两个文件 12345// Add.cint Add(int x,int y){ return x+y;} 123456789101112131415// test.c#include <stdio.h> ...
【C语言】文件操作(详解)
[TOC] 好久没有更新C语言学习的博客了,今天带来的是文件部分的知识点!😋 1.为什么需要文件?之前学习过通讯录的代码实现,可以给通讯录中增加、删除联系人。但是这个通讯录在你exe文件关闭的同时就被销毁了,它的内容并不能顺延到下一次打开这个通讯录,这对我们的使用产生了不便。 而文件可以帮助我们实现数据的持久化:将数据保存在磁盘文件中,下次打开通讯录的时候,之前保存的联系人不会消失。 2.什么是文件?文件就是存放在磁盘上的带特定格式的数据。 2.1文件分类在程序设计中,一般讨论两种文件:程序文件、数据文件 程序文件:代码源文件如.c,目标文件.obj/.o,可执行文件.exe 数据文件 ...
【树莓派开发】树莓派GeanyIDE和控制台下C/C++中文乱码问题解决方法
情况说明之前使用树莓派的时候,遇到了中文乱码的问题。 VS2019编译器下写的.c文件,里面的中文注释在树莓派ide上乱码 树莓派控制台上,C语言代码输出中文时乱码 这里需要调整三个设置来解决该问题 1.设置VS,将文件保存为UTF8编码VS2019默认用的是GBK编码,而不是一般中文需要的UTF8编码 这里我们可以安装一个Force UTF-8(No BOM)插件来解决该问题 在VS顶部工具栏里找到“拓展”-管理拓展 搜索Force UTF-8(No BOM),找到该插件并安装 这个插件的作用,是让VS保存文件都使用UTF8编码保存 安装完毕后,可以在原本文件中打一个 ...
【树莓派开发】使用树莓派在Linux环境下编写C语言代码
前言如何使用树莓派编译C语言代码呢? 21年暑假的时候,学习编程的劲头高涨,然后冲动消费买了个树莓派4B……结果压根不会用,吃灰了半年 不过现在已经学完了C语言,也接触了一丢丢Linux系统下的gcc指令,可以尝试用它来编写C语言代码了! 1.创建test.c文件首先我们需要在一个文件夹里创建一个test.c文件 点击test.c文件后,树莓派会用自带的Geany编辑器打开它 然后我们可以往里写入C语言最经典的helloword代码 1234567#include <stdio.h>int main(void){ printf("hello w ...
【Git】Sourcetree的初始化与使用
[TOC] 前言还在用小乌龟管理你的git本地代码吗? 为何不来尝试一下,这款界面更加直观的git可视化工具! sorcetree官网👉https://www.sourcetreeapp.com/ 别看到英文官网就跑了,软件本身是中文界面! 注:本博文只讲述sourcetree初始化方式,并不讨论其与TortoiseGit的功能强弱 什么?你还不知道git是啥? 那还不赶快点击这篇博客了解一二!👇 实习生 Git 不熟练,还没脸去问是种什么体验… 1.初始化下载安装以后,你会看到以下界面 若不需要用bitbucket,选择跳过即可 第二步,sourcetree会让你下载这 ...