数据结构与算法
文章平均质量分 85
C语言基础知识以及C语言实现的算法
Aspirant-GQ
这个作者很懒,什么都没留下…
展开
-
每日一练(三十七)
文章目录3.1 求字符串的子串个数3.2 判断程序输出3.3 strlen 实现3.4 strcmp 实现3.5 strcat 实现《每日一练合集》3.1 求字符串的子串个数3.2 判断程序输出3.3 strlen 实现int strlen(const char *str){ assert(str != NULL); int count = 0; while (*str++ != NULL) { ++count; } return co原创 2021-03-09 22:17:41 · 1024 阅读 · 0 评论 -
每日一练(三十六)
文章目录2.21线性表2.22 对称矩阵的压缩2.23 求二维数组元素存放地址2.24 二维数组转指针2.25 取出三维数组中的元素2.26 利用指针取数组元素的判断2.27 类型转换后的指针运算2.28 64位环境下的指针运算《每日一练合集》2.21线性表线性表是一种逻辑结构;顺序表、链表是一种存储结构;2.22 对称矩阵的压缩画图比较直观2.23 求二维数组元素存放地址要明白行优先存储和列优先存储的区别!!!2.24 二维数组转指针2.25 取出三维数组中的元素要求这里原创 2021-03-09 22:15:05 · 623 阅读 · 0 评论 -
每日一练(三十五)
文章目录2.16 指针运算2.17 访问数组的形式2.18 很容易忽略的数组名是常量2.19 指针在二维数组中的使用2.20 二维字符串数组问题《每日一练合集》2.16 指针运算指针的合法运算有以下几个:指针与整数的加减同类型指针的比较同类型指针的加减当两个指针进行算术运算的时候,指针指向的地址值并不是单纯的数据移动,而是结合指针指向的数据类型的大小,如下:注意!!!如果两个指针指向的不是同一个数组中的元素,相减之后的结果是未定义的。指针还可以进行关系运算,也就是比较,如下的代码用指原创 2021-03-09 22:10:52 · 448 阅读 · 0 评论 -
每日一练(三十四)
文章目录2.11 C风格的字符串2.12 字符数组2.13 二维数组的声明与初始化2.14 二维数组的存储2.15 二维数组的动态声明《每日一练合集》2.11 C风格的字符串C风格的字符串有两种:字符串常量,由双引号包括的字符序列就是字符串常量,注意字符串常量存储在常量区,但是以数组定义的字符串常量是被拷贝到栈(或者静态区)中的,所以以数组定义的字符串是可以修改元素的。末尾自动添加了结束符\0的字符数组注意,结束符就是\0,值为0,也就是NULl。有结束符的字符序列才可以称为字符串。2.原创 2021-03-09 22:07:04 · 345 阅读 · 0 评论 -
每日一练(三十三)
文章目录2.6 vivo 2020校招 拆礼物算法2.7 驱动中的`__init`和`__exit`2.8 Linux中的挂载2.9 代码的内存分布2.10 数组定义与引用《每日一练合集》2.6 vivo 2020校招 拆礼物算法实际来看!!!当拆到礼品之后就不会再拆了,所以礼物后面的盒子就不用考虑了。#include<iostream>#include<string>using namespace std; int solution(string str){原创 2021-03-09 22:03:39 · 350 阅读 · 0 评论 -
每日一练(三十二)
文章目录2.1 lseek() 空洞2.2 文件共享2.3 原子操作2.4 Uboot启动流程2.5 数组指针的运算《每日一练合集》2.1 lseek() 空洞每个打开的文件都有一个当前文件偏移量,后续的读、写操作都是基于这个文件偏移量进行的,通常是一个非负整数。默认打开一个文件的时候,文件偏移量为0,除非指定以O_APPEND追加方式打开。SYNOPSIS #include <sys/types.h> #include <unistd.h>原创 2021-03-09 22:01:45 · 422 阅读 · 0 评论 -
每日一练(三十一)
文章目录1.26 grep 命令1.27 assert() 断言函数1.28 字节对齐1.29 FTP 主动模式主动模式:1.30 FTP 被动模式被动模式:1.31 NAT防火墙对 PORT/PASV的影响什么是NAT客户端处于NAT下的主动模式客户端处于NAT下的被动模式服务器处于NAT下的主动模式服务器处于NAT下的被动模式1.26 grep 命令详解:http://c.biancheng.net/linux/grep.htmlgrep是一个很强大的文本搜索命令,如下:grep --color原创 2021-02-08 08:17:26 · 294 阅读 · 0 评论 -
每日一练(三十)
文章目录1.21 字符串数组问题1.22 二维数组注意事项1.23 二维数组的动态声明1.24 宏定义中 do{ }while(0)1.25 find 命令1.21 字符串数组问题分析下列输出:char a[] = {'a', 'b', 'c'};cout << strlen(a) << endl;返回的结果不可预料,因为a初始化的时候,结尾没有主动加上‘\0’结束符。而标准库字符串处理函数的时候是以结束符\0为结束的。同理,如下的程序输出:char a[] = {'原创 2021-02-08 08:16:24 · 369 阅读 · 0 评论 -
每日一练(二十九)
文章目录1.16 算法:二维数组中的查找方法一:遍历数组方法二:线性查找1.17 算法:替换空格方法一:C++string类处理函数appendpush_backC++ 的字符串库方法二:遍历+字符数组1.18 算法:从尾到头打印链表方法一:遍历求长度后逐一打印方法二:递归方法三:入栈+出栈大佬代码1.19 对一维数组的引用1.20 一维数组的初始化问题1.16 算法:二维数组中的查找力扣:https://leetcode-cn.com/problems/er-wei-shu-zu-zhong-de-c原创 2021-02-08 08:14:46 · 337 阅读 · 0 评论 -
每日一练(二十八)
文章目录1.11 常成员相关选择题1.12 C/C++编译考察1.13 union含数组 struct内存对齐1.14 为什么ARM中FIQ比IRQ快1.15 算法:数组中重复的数字方法一:遍历数组方法二:原地置换(特定情况)考点1.11 常成员相关选择题对于类的常成员函数的描述正确的是()A.常成员函数不修改类的数据成员B.常成员函数可以对类的数据成员进行修改C.常成员函数只能由常对象调用D.常成员函数不能访问类的数据成员答案:A常成员函数含义是通过该函数只能读取同一类中的数据成员的值,而原创 2021-01-29 13:50:53 · 353 阅读 · 0 评论 -
每日一练(二十七)
文章目录1.6 基于IO多路复用的并发编程1.7 基于多线程的并发编程1.8 根据局域网内ip地址找到MAC地址1.9 反转输出字符串1.10 纯虚函数相关选择题1.6 基于IO多路复用的并发编程如果服务器不仅仅要响应客户端的连接请求,还要处理其他事件,就可以考虑基于IO多路复用的并发编程。IO多路复用就是对多个独立的IO事件做一个统一的管理,比如服务器既要响应客户端的连接请求,同时还要接收从键盘输入的数据,就可以将监听socket和标准输入stdin加入select函数进行管理。比较常用的IO多路原创 2021-01-28 10:20:54 · 383 阅读 · 0 评论 -
每日一练(二十六)
文章目录1.1 sqlite 命令行1.2 sqlite设置自增字段1.3 C/C++ 输出当前日期时间1.4 SQLite的C接口重要接口打开数据库插入信息查询1.5 基于多进程的并发编程1.1 sqlite 命令行sqlite命令行中可以识别两种命令:sqlite的系统命令,以点 . 开头SQL语句,通过SQL语句实现创建、查找、插入、更新、删除等操作,以分号 ; 结尾在命令行打开sqlite之后输入.help来产看sqlite支持的命令,如下:gq@server:~/learn/sql原创 2021-01-25 14:35:09 · 496 阅读 · 0 评论 -
每日一练(二十五)
文章目录12.26Linux 查找字符串所在行 输出行12.27 select 系统调用12.28 poll 系统调用12.29 epoll 系统调用12.30 select、poll、epoll 区别事件集最大支持文件描述符数量工作模式实现原理12.26Linux 查找字符串所在行 输出行参考链接awk参考链接grep可以实现,grep可以进行模糊查找和精确查找,可以只输内容,也可以同时输出行号:grep -n "gq" ./gq.txt ;模糊搜索,输出包含字符串的行内容和行号gr原创 2020-12-30 12:15:18 · 428 阅读 · 0 评论 -
每日一练(二十四)
文章目录12.21 TCP与UDP的区别12.22 I/O重定向的使用技巧12.23 栈的压入与弹出12.24 memmove解决内存重叠问题12.25 Linux中常用查找命令12.21 TCP与UDP的区别TCP面向连接;UDP面向无连接TCP提供:可靠交付、无差错、不丢失、不重复、按序到达;UDP不提供可靠交付、不保证不丢失、不保证顺序到达TCP面向字节流的,发送的是一个流,无头无尾;UDP时面向数据报的,一个一个发送数据报TCP可以提供流量控制和拥塞控制,即防止对端被压垮,也防止网络被压原创 2020-12-25 12:04:47 · 237 阅读 · 0 评论 -
每日一练(二十三)
文章目录12.16 进程有关的选择题12.17 IIC、SPI、UART比较12.18 man 手册12.19 STM32 启动流程12.20 回调函数使用场景12.16 进程有关的选择题以下说法正确的是()A. 多个进程操作同一个文件时,应该要考虑到文件的一致性问题B. 可通过文件在不同进程间进行数据传递和共享C. 可以通过全局变量在不同进程间传递数据D. 一个进程可以访问到所有物理内存空间答案:AB分析:这里考察到进程间通信机制,有管道、信号量、共享内存、消息队列、信号、socket套接原创 2020-12-20 18:20:19 · 828 阅读 · 0 评论 -
《每日一练》合集
饭可以一日不吃,觉可以一日不睡,书不可以一日不读。 ——毛泽东每天一题,每天一个知识点,每天一次头脑风暴,只为实现理想的生活!!!请诸君共勉!!!文章目录2020年八月九月十月十一月十二月凭一键三连截图即可找我领取《每日一练》最新、最全版PDF文件!!!2020年八月每日一练(一)九月每日一练(二)每日一练(三)每日一练(四)每日一练(五)每日一练(六)每日一练(七)十月每日一练(八)每日一练(九)每日一练(十)每日一练(十一)每日一练(原创 2020-12-18 21:00:21 · 4762 阅读 · 14 评论 -
每日一练(二十二)
文章目录12.11 less 浏览文件内容12.12 type 显示命令的类型12.13 Linux下进程间通信机制概述12.14 获取整数个字节12.15 函数原型、函数定义、函数声明 三者区别12.11 less 浏览文件内容Linux中有时我们要产看一些文本文件,比如系统的配置文件,是以文本格式存储的,阅读配置文件可以更深入了解系统是如何工作的。而且脚本也是以这种格式存储的,less命令就是用来浏览文件内容的:less filenameless产看文件的时候,支持文件的上下滚动显示(more原创 2020-12-15 14:32:00 · 375 阅读 · 0 评论 -
每日一练(二十一)
文章目录12.6 通过函数修改查看文件属性修改文件的访问属性获取文件的属性12.7 常用进程产看方式ps 静态查看系统进程快照top 动态查看进程信息/proc 产看进程详细信息pstree 产看进程树htop 文本交互模式查看12.8 fork 创建多个子进程12.9 反向递归遍历链表12.10 Linux 确定文件类型12.6 通过函数修改查看文件属性修改文件的访问属性获取文件的属性注意:stat 与 lstat的主要区别在于作用与链接文件时,stat获取的是所链接文件的属性,lstat原创 2020-12-12 17:10:00 · 516 阅读 · 0 评论 -
每日一题(二十)
文章目录12.1 快速排序12.2 二叉树的遍历先序遍历中序遍历后序遍历12.3 按字符输入输出按字符输入按字符输出12.4 Linux 进程间通信的方式12.5 磁盘管理命令 du dfdfdu12.1 快速排序所有查找中Hash查找效率最高,在所有排序中,快速排序的效率也是最高的。采用递归函数的方法来实现快速排序!先把递归框架搭建起来!!!递归框架,首先确定终止条件,那就是当 low >= hight的时候!!!然后确定递归操作,已经知道每一次拆分会产生两个区间,又要对两个区间各自进原创 2020-12-05 07:44:02 · 524 阅读 · 0 评论 -
每日一练(十九)
文章目录11.26 rand产生随机数11.27 time() 函数11.28 宏定义中 `#` 与 `##`11.29 什么是VFS11.30 文件IO与标准IO区别11.26 rand产生随机数rand函数可以产生一个随机数,rand() 头文件为<stdlib.h>,其函数原型为:int rand(void);rand() 会返回一个0~RAND_MAX 之间的整数,但是一段程序运行多次,rand返回的值始终是一样的。这是因为rand返回的随机值是一个伪随机值,就是说看起来返原创 2020-12-03 22:50:32 · 393 阅读 · 0 评论 -
递归实现快速排序
所有查找中Hash查找效率最高,在所有排序中,快速排序的效率也是最高的。采用递归函数的方法来实现快速排序!先把递归框架搭建起来!!!递归框架,首先确定终止条件,那就是当 low >= hight的时候!!!然后确定递归操作,已经知道每一次拆分会产生两个区间,又要对两个区间各自进行拆分!对于拆分操作,输入的是列表和low、hight,返回的是拆分好后,基准值的下标!!!对于拆分出来的两个区间的再次拆分,根据上次拆分的基准值下标来确定这两个区间的low、hight在拆分的时候,low和hi原创 2020-12-02 00:14:20 · 2021 阅读 · 0 评论 -
extern “C“的用法解析
转自:https://www.cnblogs.com/rollenholt/archive/2012/03/20/2409046.html如涉及作品版权问题,请联系我进行删除。文章目录1.引言2.从标准头文件说起3.深层揭密extern "C"4.extern "C"的惯用法1.引言C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底转载 2020-12-01 15:09:15 · 200 阅读 · 0 评论 -
每日一练(十八)
文章目录11.21 vim 替换字符11.22 vim 配置11.23 Xshell中配置.vimrc后无法使用Ctr+Insert复制的解决11.24 顺序栈的入栈出栈顺序11.25 指针与数组的其他区别11.21 vim 替换字符小技巧:vim中的Ctr + S是锁定屏幕,Ctr + Q是解锁屏幕字符串替换,是在命令模式下输入的,形如::s/abc/ABC这就是将光标所在行遇到的第一个“abc”替换为“ABC”,注意,单纯的替换命令s只是替换光标所在行的第一个遇到的字符串。如果想把光原创 2020-11-25 17:35:27 · 684 阅读 · 0 评论 -
单链表操作详解!!!
文章目录1.创建2.遍历3.插入3.1尾部插入3.2指定位置插入4.查找5.删除6.释放7.排序8.倒置、反转9.求相邻两结点最大值10.合并两有序链表单链表学习一种数据结构,要注意:逻辑结构、存储结构、相关操作。链表最好带一个头结点。链表的创建一般是在堆上的。特别注意!!!进行遍历的时候,结束条件是(p != NULL),因为循环里面会执行p = p->next;,所以判断时候的p实际上是结点的next指针寻找前驱结点的时候要判断-1的情况,直接返回H,然后就是一个for (i =原创 2020-11-25 17:00:10 · 4107 阅读 · 5 评论 -
每日一练(十七)
文章目录11.16 Linux 数字权限使用11.17 二维数组的指针运算11.18 Make file 变量自定义变量的定义和引用预定义变量自动变量环境变量11.19 Linux修改主机名11.20 顺序表的创建、删除、插入、查找创建顺序表插入元素查找元素删除元素11.16 Linux 数字权限使用Linux中对文件的权限有严格的控制,想要对某个文件进行相关的操作时,要有相应的权限才可以。一般权限包括:读r、写w、执行xLinux权限的使用者分类有三种:u:文件拥有用户g:同一组的用户o:原创 2020-11-20 22:09:02 · 430 阅读 · 0 评论 -
每日一练(十六)
文章目录11.11 Linux下的段错误(Segmentation fault)11.12 大端小端问题11.13 用递归实现斐波那契数列11.14 利用指针函数实现strcat的功能11.15 C语言中的符号重载11.11 Linux下的段错误(Segmentation fault)段错误是指:访问了系统分配给程序的内存空间之外起的内存空间,比如:访问不存在的地址访问受系统保护的地址访问了只读内存地址内存访问越界要注意的:使用strcpy, strcat, sprintf, str原创 2020-11-15 19:45:49 · 411 阅读 · 0 评论 -
每日一练(十五)
文章目录11.6 命名冲突与static11.7 Linux中添加新用户11.8 putchar()函数11.9 getchar()函数11.10 二维数组求行列大小11.6 命名冲突与static首先要明白static的作用是:将作用域限制在一个源文件中,对于局部来说相当于变成了全局,对于全局来说,相当于是限制在这个源文件中。static还可以用来修饰函数,所以我们可以在多个文件中定义函数为同一个名字,前提是这些函数被定义为static。为了避免可能出现的命名冲突,如果一个函数仅仅在这个源文件中被原创 2020-11-12 07:57:12 · 360 阅读 · 0 评论 -
每日一题(十四)
文章目录11.1 gcc输出文件类型11.2 符号中的空格11.3 单双引号的区别11.4 函数类型转换符——显示调用指定地址函数11.5 Linux下静态库与共享库的特点11.1 gcc输出文件类型预编译编译汇编链接gdb:11.2 符号中的空格符号的中间一般不要加空格符、制表符、换行符,不然会引起歧义,比如---符号,空格的位置不同,运算结果也不同:对于a --- b,编译器从左往右看,先读入一个-,再接着读入一个-,到这里编译器就认为这是一个自减运算符,再接着向右读入-,编译器原创 2020-11-12 07:55:36 · 437 阅读 · 1 评论 -
每日一题(十三)
文章目录10.26 数据缓冲区造成的错误10.27 整数溢出10.28 运算符的求值顺序10.29 包裹函数10.30 父进程调用wait()函数10.31 fork与vfork区别10.26 数据缓冲区造成的错误有时候,写类似如下的代码:会一直输出,我们的本意是一次输入完成,再进行一次输入。原因是scanf是从缓冲区读取输入进行赋值的,上次的输入数据还在缓冲区,就导致程序一直在判断上次的缓存数据。处理方法就是在scanf读取缓冲区的数据之后,利用getchar函数把缓冲区的数据取出来。10.原创 2020-11-12 07:53:20 · 477 阅读 · 0 评论 -
每日一题(十二)
文章目录10.21 冒泡排序10.22 选择排序10.23 插入排序10.24 希尔排序10.25 归并排序10.21 冒泡排序借助一道题来练习排序算法:(从小到大)冒泡排序是每次比较相邻的两个元素大小,如果第一个比第二个大,交换位置,直到末尾。每次到达末尾之后当前元素作为新的末尾进行下一次冒泡。直到再也没有需要交换的。图解:算法实现:/** * Note: The returned array must be malloced, assume caller calls free().原创 2020-11-12 07:51:31 · 439 阅读 · 0 评论 -
每日一题(十一)
文章目录10.16 ARM子程序设计及调用涉及的指令10.17 JTAG调试技术10.18 ARM内核处理器区别10.19 main的参数10.20 C中static与C++中static的不同10.16 ARM子程序设计及调用涉及的指令在ARM汇编语言程序设计中,经常用到子程序设计及调用,与子程序设计与调用无关的指令或伪指令是( )。A.BL SerchMinB.IMPORT SerchMinC.MOV PC,LRD.B SerchMin答案是:DA:子程序调用一般通过BL命令实现。原创 2020-10-20 13:19:30 · 866 阅读 · 0 评论 -
每日一题(十)
文章目录10.11 函数形参问题10.12 二级指针偏移10.13 #ifdef与#if define 的区别10.14指针实现交换数据时的溢出情况10.15 三目运算的数据转换10.11 函数形参问题分析如下程序的输出:void fun(int m, int n){ printf("m = %d, n = %d\n", m, n);}int main(void){ int k = 3; fun(k += 3, ++k); printf("k = %d",原创 2020-10-17 11:26:13 · 469 阅读 · 0 评论 -
每日一题(九)
文章目录10.6 判断程序输出10.7 指针移动10.8 带符号的位域10.9 涉及strcpy的程序分析10.10 运算符优先级问题(一)10.6 判断程序输出判断如下程序输出:int sum(int a){ auto int c = 0; static int b = 3; c += 1; b += 2; return (a + b + c);}int main(){ int i; int a = 2; for (原创 2020-10-17 07:53:28 · 808 阅读 · 0 评论 -
每日一题(八)
文章目录10.1 内存碎片10.2 数组、字符串10.3 越界读写字符串10.4 malloc内存泄漏+free非法访问+二级指针传参10.5 求含位域的结构体大小10.1 内存碎片内部碎片的产生因为所有的内存分配必须起始于可被 4、8 或 16 整除(视 处理器体系结构而定)的地址或者因为MMU的分页机制的限制,决定内存分配算法仅能把预定大小的内存块分配给客户。假设当某个客户请求一个 43 字节的内存块时,因为没有适合大小的内存,所以它可能会获得 44字节、48字节等稍大一点的字节,因此由所需大小四舍原创 2020-10-05 08:06:12 · 369 阅读 · 0 评论 -
每日一题(七)
文章目录9.26 如何确认一段程序是C还是C++编译的9.27 给出各数据类型与零值比较的代码9.28 C++程序中调用被C编译器编译后的函数,为什么要加extern”C”9.29 堆栈的区别详解9.30 volatile 详解9.26 如何确认一段程序是C还是C++编译的使用C++中的自定义宏来确定:#ifdef __cplusplus cout<<"C++"<<endl;#else cout<<"C"<<endl;#endif9.原创 2020-09-30 07:12:50 · 356 阅读 · 0 评论 -
每日一题(六)
文章目录9.21数组、字符串的存取效率9.22 求一个int数据 二进制中1的个数9.23 指针与引用的区别9.24 编写strcpy9.25引用作为函数参数的的注意9.21数组、字符串的存取效率在程序中,对数组和字符串的存取,哪个更有效率?先看一段程序:#include "stdio.h"int main() { char a = 1; char c[] = "123456789"; char *p = "123456789"; a = c[1]; a原创 2020-09-26 09:49:13 · 446 阅读 · 0 评论 -
剑指 Offer 15. 二进制中1的个数
文章目录题目思路:`x &= (x-1)`剑指 Offer 15. 二进制中1的个数题目请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。思路:x &= (x-1)class Solution {public: int fun (uint32_t x) { int count = 0; while (x) {原创 2020-09-22 13:45:49 · 182 阅读 · 0 评论 -
每日一题(五)
文章目录9.16 变量的存储布局9.17编译器角度看:数组、指针9.18 C++中类的定义9.19 C++中类成员的访问控制9.20 C++中构造函数9.16 变量的存储布局分析以下程序运行时各个变量的内存分布:int a = 0;//全局初始化区:.datastatic int b = 20;//静态初始化区:.datachar *p1;//全局未初始化区:.bssconst int A = 10;//常量区 .rodataint main(void) { int b;//栈 c原创 2020-09-20 09:50:15 · 351 阅读 · 0 评论 -
每日一题(四)
文章目录9.11 结构体元素偏移9.12 指针、数组的声明9.13 负数的求余运算9.14 阅读代码9.15 逗号表达式细节9.11 结构体元素偏移//int 占 2 个字节,char 占 1 个字节,float 占 4 个字节struct stu{ union{ char bj[5]; int bn[2]; }class;//5 char xm[8];//8 float cj;//4}xc;问题:求sizeof(xc)?我的原创 2020-09-15 06:55:19 · 663 阅读 · 1 评论 -
LeetCode_35_搜索插入位置
文章目录题目思路:遍历数组,比较大小题目给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。思路:遍历数组,比较大小先看一下数组两端的特殊情况,然后开始遍历数组,只要遇到大于等于目标值的元素就返回,程序如下:int searchInsert(int* nums, int numsSize, int target){ int i, j, k; if( nums[0] >= t原创 2020-09-12 20:22:13 · 129 阅读 · 0 评论