【C语言】顺序表(详解)
[TOC] 前言顺序表是我们学习数据结构第一阶段的必经之路 什么是顺序表,且听我慢慢道来 本篇博客用到的知识点: 动态内存管理 自定义类型-结构体 所用编译器:VS2019 1.什么是顺序表?1.1线性表线性表是数据结构的一种,它是n个具有相同特性的数据元素的有限序列。 常见的线性表:顺序表、链表、栈、队列、字符串…… 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理内存上存储时,通常以数组和链式结构的形式存储。 本篇博客所讲述的顺序表,就是以数组结构存储的线性表 2.编写你的顺序表!为了保证写完之后不要进入贤者debug状态,建议每编写一个模块,就在test.c的main函数中进行测试,保证当前编写的模块正确后再进行下一步! 不然问题多了,改起来很头疼的! 2.0 赛前准备和我们日常所用的数组不同,顺序表的这个结构,主要的组成部分是一个结构体(本篇博客中的线性表以int为例) 123456struct SeqList{ int* a; int size; // 存储数据个数 int...
【教程】Gitee如何下载单个文件
本篇博客将教您如何在gitee上下载单个文件 引出问题不知使用gitee的你,有没有遇到过需要下载某个仓库文件的情况? 比如下面这个仓库,是@宏沉一笑大佬转载obsidian的插件的仓库链接 点击下载,你会发现gitee开始给你打包整个仓库文件,一个几百m的仓库怎么说也要几分钟才能下完。可是,我只是需要某一个主题或者插件,gitee却不能单文件或者单文件夹下载,这个时候又要怎么弄呢? 解决问题解决这个问题的方法非常简单! 只需要用chome或者新版edge浏览器,就能使用一个插件,来解决这个难题! 我们可以在edge设置里面打开扩展商店,搜索GITEE 下载gitee助手即可! 安装这个扩展以后,重启浏览器,再次打开gitee 可以看到,每个文件之后出现了单独的下载图标,点击它即可下载单个文件了 gitee助手的代码也是开源的,主页链接👉点我 大佬的提交绿点就是不一样 结语个人也建议大家直接用edge浏览器和微软自带的输入法(这两个现在已经做的很好了) 避免其他国产流氓污染自己的电脑 如果对你有帮助,还请点个👍,万分感谢!
【leetcode】189. 轮转数组(C语言)
问题来源 leetcode 189. 轮转数组 给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 123456输入: nums = [1,2,3,4,5,6,7], k = 3输出: [5,6,7,1,2,3,4]解释:向右轮转 1 步: [7,1,2,3,4,5,6]向右轮转 2 步: [6,7,1,2,3,4,5]向右轮转 3 步: [5,6,7,1,2,3,4] 这道题的底部有一个进阶要求: 进阶: 尽可能想出更多的解决方案,至少有 三种 不同的方法可以解决这个问题。 你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问题吗 正好最近学习了空间复杂度和时间复杂度,这里可以用于练习 方法1-基本方法最基本的方法就是直接旋转,把最后一位数字移动到数组的第一位,然后将第二位开始的每一位往前移动一位 需要先执行移动操作再替换第一个数 1234567891011121314void rotate(int* nums, int numsSize, int k) { k %= numsSize; for (int i...
【算法】算法的空间复杂度和时间复杂度
前言🕵️♂️在之前的学习中,已经接触过了网上OJ题目 在一些题目中,我们经常可以看到时间复杂度和空间复杂度的要求 你可能和我有一样的疑惑,复杂度究竟是什么?我要怎么评判我自己写的算法的复杂度? 今天就让我们来认识认识~~ 1.算法效率🧐和做任何事情一样,我们写的算法,自然也有它的运行效率。效率越高越好 1.1什么是算法算法可以简单地理解为我们为了求解一个问题,所写的函数 在初识C语言中,我们学习过利用递归求解斐波那契数列的算法 1234567long long Fib(size_t N){ if(N < 3) return 1; return Fib(N-1) +...
【树莓派开发】出现报错pragama once in main file
前言众所周知,#pragma once语句是防止头文件重复包含非常常用的一条语句VS编译器在创建.h文件的时候会自动帮你在开头添加这个语句但是在gcc编译器下,这个语句就可能会出现一些问题 所使用编译器: VS2019(windows10) 树莓派(linux-gcc) warning: #pragma once in main file在我尝试在linux环境下使用#pragma once语句时,遇到了这个报错 解决这个问题的办法很简单,就是不要编译头文件 编译器会自动展开头文件,无需手动编译 出现问题原因网上查了查:出现这个问题的原因是编译器在编译头文件的时候,#pragma once本身是没有含义的语句,所以报错了。 也有人说是因为linux不支持这个语句,我们来试试 右侧代码中包含了两个test.h的引用,在预处理中只包含了一次 去掉头文件中的#pragma...
【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#define MAX 1000#define reg register //为 register这个关键字,创建一个简短的名字#define do_forever for(;;) //用更形象的符号来替换一种实现#define CASE break;case //在写case语句的时候自动把 break写上//如果定义的...
【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] 限制:2 <= nums.length <=...
【C语言】函数调用的参数压栈(详解)
[TOC] 前言在早期的学习中,我们已经了解到当函数传值调用参数的时候,用的是形参。 形参是实参的一份临时拷贝,对形参的改变不会影响实参里的值。 传值调用和传址调用👉点我 今天让我们以汇编语言来了解函数调用的参数压栈这一知识点 所用编译器:VS2019 不同编译器的实现可能略有不同,以实际为准 1.什么是栈区?栈,是一种数据结构。 在学习C语言的过程中,我们一般只关注内存中的3个区域,分别是栈区、堆区和静态区。 其中堆区主要用于动态内存管理,在之前的博客中已经和大家介绍过。 详解动态内存管理👉点我 而栈区就是编译器给函数运行分配的空间了。 和堆区空间需要手动分配不同,这一部分空间是编译器自动管理的,函数的栈帧会自动创建,自动销毁。 1.1栈区小知识点 栈区的使用是从高地址到低地址 栈区的使用遵循先进后出,后进先出 栈区的放置是从高地址往低地址放置:push压栈 删除是从低往高删除:pop出栈 2.知识点12345678910111213141516171819//本次使用的代码#include <stdio.h>int Add(int x,...
【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>extern int Add(int x,int y);#define M 100// 这是一个测试int main(){ int a=4; int b=10; printf("a+b=%d\n",Add(a,b)); printf("M+b=%d\n",Add(M,b)); return...