
c/c++
fengchengwu2012
做技术就要追求卓越
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
归并排序算法
归并排序采用分治的思想,现将数组分裂成更小的单元,将小单元的先进性排序,然后逐次合并,启时间复杂度nlogn,由于需要另加一个辅助数组空间复杂度为O(n)原创 2025-04-30 16:56:16 · 455 阅读 · 0 评论 -
Cmake编译多个目录源码
在大型项目中分模块开发出现多给源码目录,使用Cmake构建项目,如果单个在camkelist中配置源码文件的,工作量巨大且不够灵活,Cmake提供的内置函数aux_source_directory和set可以轻松解决这一问题。编写Cmakelists.txt文件。原创 2025-02-05 17:19:46 · 268 阅读 · 0 评论 -
贪心算法求无序数组最大递增序列
给定一个无序的数组,获取其最大的递增序列。原创 2024-09-05 10:44:04 · 456 阅读 · 0 评论 -
埃氏筛选法求素数
埃氏筛选法求素数可以减少遍历次数,及在前期的循环中就将存在的合数打上标记,从而提高算法的时间效率。原创 2024-08-21 17:57:20 · 381 阅读 · 0 评论 -
链表反转算法
**后继节点 *//** 节点数据域 */int data;} LinkNode;/**** 添加链表元素*//*** 查询链表*//***递归法 链表反转*//*** 迭代法 链表反转*/原创 2024-08-17 23:51:26 · 268 阅读 · 0 评论 -
快慢指针数组去重
快慢指针是原地算法的又一经典实现方式,比如数组去重,就可以引入快慢指针,一趟循环即将数组中的重复元素过滤掉。其核心思想是通过两个相向运动的指针,通过控制其运动快慢,快指针作为探测指针,提前预判重复元素,然后覆盖慢指针所指向的重复元素。快慢指针移动的原则,快指针再循环过程中不断前进,不受额外条件制约,慢指针在快慢指针不相等的情况下前进。数组总共有5个非重复的元素。原创 2024-08-14 15:23:13 · 276 阅读 · 0 评论 -
原地算法求两数之和
给定一个自增序列数组,总数组中找出两个元素等于目标值,并输出元素的下标。这个题右很多解法,通过hash可以将时间复杂度降到O(n),但是需要额外开辟空间,那么原地算法非常适合解决此题,及保障时间复杂度,亦可保障空间复杂度的最优。原创 2024-08-07 15:11:39 · 195 阅读 · 0 评论 -
原地算法实现数组反转
**左指针*/int left;/**右指针*/int right;} Tptr;/*** 数组反转*//*** 展示数组*/原创 2024-08-07 14:33:27 · 444 阅读 · 0 评论 -
CRC-16/CCITT算法实现
1、C语言版本#include <stdio.h>#include <stdlib.h>#include <string.h>//截取指定长度的字符串char* substring(char *dst,char *src,int start,int len) { char *p=dst; char *q=src; int length=strlen(src); if(start>=length||start<0) return NU原创 2021-05-09 18:02:11 · 2150 阅读 · 0 评论 -
快速排序算法
快速排序又是一种分而治之思想在排序算法上的典型应用。本质上来看,快速排序应该算是在冒泡排序基础上的递归分治法。即在一个无序的序列中选取一个任意的基准元素pivot,利用pivot将待排序的序列分成两部分,前面部分元素均小于或等于基准元素,后面部分均大于或等于基准元素,然后采用递归的方法分别对前后两部分重复上述操作,直到将无序序列排列成有序序列。排序 n 个项目要 Ο(nlogn) 次比较。在最坏状况下复杂度为Ο(n2)。1、快速排序算法定义。原创 2024-07-24 11:16:42 · 157 阅读 · 0 评论 -
冒泡排序算法
*** 冒泡排序* @param data 待排序数组* @param len 数组长度*/int i = 0;int j = 0;for (i;i++)for (j;j++)/// 将小于当前元素的下一个元素进行交换printf("排序后-----------------\n");i = 0;for (i;i < len;i++)原创 2024-07-24 11:07:33 · 190 阅读 · 0 评论 -
插入排序算法
插入排序算法的大概实现思路是这样的,从数组第2个元素开始抽取元素,把它与左边第一个元素比较,如果左边第一个元素比它大,则继续与左边第二个元素比较下去,直到遇到不比它大的元素,然后插到这个元素的右边,迭代处理整个数组 ,选择适当的位置插入。插入排序算的时间复杂度O(n2) ,空间复杂度,O(1) 稳定排序。下面使用代码做简单演示。原创 2024-07-17 17:27:18 · 193 阅读 · 0 评论 -
选择排序算法
选择排序大体思路是找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小元素那么它就和自己交换)。其次,在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置。如此往复,直到将整个数组排序。选择排序的算法效率不是很高,时间复杂度O(n2) ,空间复杂度:O(1)。原创 2024-07-17 15:52:30 · 333 阅读 · 0 评论 -
设计模式-装饰器
装饰器模式是一种结构型,它允许在运行时扩展一个对象的功能,而不需要改变其现有结构。这种模式的核心思想是通过创建一个装饰器来动态地增强或修改原有对象的行为。装饰器模式是继承的一个补充,提供了比继承更加灵活的方式来扩展对象的行为。原创 2024-07-04 16:08:07 · 322 阅读 · 0 评论 -
桥接模式与适配器模式
3、测试/// 处理B类业务/// 处理A类业务。原创 2024-07-03 11:05:29 · 557 阅读 · 0 评论 -
JAVA使用JNA调用.so(.dll)动态库
有写开发场景需要调用第三方c/c++的动态库,jdk本身有jni可以实现调用,但是jni的使用非常麻烦,这里提供另一个神器,那就是JNA。原创 2024-03-11 15:37:50 · 9245 阅读 · 2 评论 -
B-Tree原理及实现
多路平衡查找、关系型数据库索引原创 2024-01-20 10:56:12 · 8239 阅读 · 0 评论 -
跳跃表原理及实现
C语言 跳跃表原创 2023-12-28 11:02:56 · 15952 阅读 · 1 评论 -
AVL树原理及代码实现
平衡二叉树、AVL树、平衡二叉树旋转、失衡类型原创 2023-11-20 11:34:12 · 7335 阅读 · 0 评论 -
哈夫曼树实现
哈夫曼树又称最优树给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。树的带权路径长度规定为所有叶子结点的带权路径长度之和,记为WPL。原创 2023-11-01 17:55:18 · 279 阅读 · 0 评论 -
二叉排序树BinarySortTree
二叉树排序树原创 2023-10-30 12:07:02 · 303 阅读 · 0 评论 -
循环队列CircularQueue
二、循环队列操作函数声明。三、循环队列操作函数定义。原创 2023-10-24 11:46:18 · 949 阅读 · 0 评论 -
双向链表DoubleLinkedList
1、声明链表节点操作函数 linklist.h。3、编写测试函数main.h main.c。2、定函数实现linklist.c。main.h函数定义定义。4、编写Makefile文件。main.c调用测试。原创 2023-10-13 09:32:08 · 557 阅读 · 0 评论 -
Ubuntu20.04.1编译qt6.5.3版mysql驱动
下载qtbase6.5.3源码,将plugin中sqldrivers源码拷至于项目工程中,使用qtcreator打开文件。2、在msyql子目录中CMakeLists.txt第一行添加头文件、引导配置。3、右键选中项目build。1、下载mysql开发库。原创 2023-10-01 10:53:27 · 717 阅读 · 0 评论 -
QT6.5.2编译PostgreSql驱动
win11平台qt6.5.2编译postgresql驱动原创 2023-09-25 17:04:04 · 964 阅读 · 0 评论 -
c/c++动态数组
【代码】c/c++动态数组。原创 2023-09-05 17:07:47 · 270 阅读 · 0 评论 -
c语言动态内存管理
1、C语言内存管理共有4个原型函数: (1)void *calloc(int num,int size); 在内存中动态地分配 num 个长度为 size 的连续空间,并将每一个字节都初始化为 0。所以它的结果是分配了 num*size 个字节长度的内存空间,并且每个字节的值都是0。(2)void free(void *address) 释放 address 所指向的内...原创 2018-03-03 10:25:18 · 1132 阅读 · 0 评论 -
ndk操作stl库
1、创建android工程,ndk工具类,生成头文件 activity代码:public class MainActivity extends AppCompatActivity implements View.OnClickListener { private TextView tv; @Override protected void onCreat...原创 2018-08-08 20:02:39 · 969 阅读 · 0 评论 -
函数指针初探
函数指针 函数指针是指向函数的指针变量。通常我们说的指针变量是指向一个整型、字符型或数组等变量,而函数指针是指向函数。函数指针可以像一般函数一样,用于调用函数、传递参数。 函数指针变量的声明:typedef int (*fun_ptr)(int,int); // 声明一个指向同样参数、返回值的函数指针类型。 以下实例声明了结构体函数指针变量 p,指向函数s...原创 2018-02-28 09:51:37 · 736 阅读 · 0 评论 -
c /c++语法之extern关键字
1使用extern修饰非static的全局变量和函数;修饰变量#include <iostream>#include<string>using namespace std;void printInfo();int main(int argc, char** argv) { //修饰变量,如果此处没有extern修饰msg在c语言中会直接编译报错,在c+...原创 2018-09-23 23:51:31 · 624 阅读 · 0 评论 -
c++面向对象特性
封装是面向对象编程的一个主要特点,把数据隐藏,通过函数把数据绑定起来,避免受到外界的干扰和误用从而确保了安全,仅向用户暴露接口而把具体的实现细节隐藏起来的机制。原创 2023-08-25 15:26:12 · 347 阅读 · 0 评论