自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 使用nexus 6P同时获取CSI和RSSI数据(保姆级教程)

给nexus 6P手机安装nexmon固件来采集CSI和RSSI数据

2022-10-15 21:12:30 2621 37

原创 利用python读取csi tool产生的.dat数据

具体代码见GitHub但是因为某种不知名的bug,会导致最后一个csi的数据包长度明显小于前面的包,用这段代码就会出现index out of range的bug,需要修改一下wifilib.py模块里面的read_bf_file函数,在for循环前读取一下正常的csi数据包的长度(213),然后每次循环前都对比一下当前包的长度是否也是这么大,如果不是则退出循环修改后的read_bf_file函数如下:def read_bf_file(filename, decoder="python"):

2022-02-28 22:03:09 1690 1

原创 图的深度优先遍历和广度优先遍历

本文参考自《大话数据结构》文章目录定义图的存储结构邻接矩阵邻接表图的遍历深度优先遍历邻接矩阵代码邻接表代码广度优先遍历邻接矩阵邻接表最小生成树最短路径算法定义图(Graph) 是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合 。图按照有无方向分为无向图 和有向图 。无向图由顶点和边构成,有向图由顶点和弧构成。弧有弧尾和弧头之分。图按照边或弧的多少分稀疏图 和稠密图 。如果任意两个顶点之间都存在边叫完全图,有向的叫有向

2022-01-25 11:16:03 3688

原创 二叉树的建立与遍历

本文参考自《大话数据结构》树的定义树(Tree)是n(n≥0)个结点的有限集。n=0时称为空树。在任意一棵非空树中: (1)有且仅有一个特定的称为根( Root )的结点; (2)当n>1时,其余结点可分为m ( m>0)个互不相交的有限集T1、T2、… Tm,其中每一一个集合本身又是一棵树,并且称为根的子树( SubTree )。对于树的定义还需要强调两点:n>0时,根结点是唯一的,不可能存在多个根结点m>0时,子树的个数没有限制,但它们一定是互不相交的树的结点包含

2022-01-22 22:45:08 275

原创 队列的c语言实现(顺序队列和链队列)

文章目录顺序结构循环队列队列的初始化队列的长度计算入队操作出队操作链队列入队操纵出队操作总结队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。顺序结构循环队列循环队列的顺序存储结构代码如下:#define OK 1#define ERROR 0#define MAXSIZE 20typedef int QElemType;//数据类型typedef int Status;//函数类型typedef struct Queue { QElemType data

2022-01-21 22:37:18 643

原创 栈的c语言实现(顺序栈和链栈)

文章目录顺序存储结构栈顶插入栈顶删除两栈共享空间链栈栈顶插入栈顶删除总结栈是限定仅在表尾进行插入和删除操作的线性表。又称为后进先出(LIFO,Last In First Out)的线性表。顺序存储结构首先预定义栈结构,数据类型和函数类型#define MAXSIZE 20#define ERROR 0#define OK 1typedef int SElemType;//SElemType类型视情况而定,这里假设为inttypedef int Status;//函数类型typedef

2022-01-21 11:21:27 404

原创 线性表的c语言实现

文章目录顺序存储结构获取元素插入元素删除元素链式存储结构(以单链表为例)获取元素插入元素删除元素创建整表删除整表顺序存储结构和单链表结构优缺点存储分配方式时间性能本文代码参考自《大话数据结构》顺序存储结构首先定义一下数据类型和函数类型:#include<iostream>#define MAXSIZE 20//存储空间初始分配量#define OK 1#define ERROR 0typedef int ElemType;//数据类型,ElemType类型根据实际情况而定,这里

2022-01-21 00:16:31 2528

原创 KMP算法详解

原理详解KMP算法的作用是在一个已知字符串中查找子串的位置,也叫做串的模式匹配。比如主串s=“goodgoogle”,子串t=“google”。现在我们要找到子串t 在主串s 中的位置。第一种我们容易想到的就是暴力求解法。这种方法也叫朴素的模式匹配:简单来说就是:从主串s 和子串t 的第一个字符开始,将两字符串的字符一一比对,如果出现某个字符不匹配,主串回溯到第二个字符,子串回溯到第一个字符再进行一一比对。如果出现某个字符不匹配,主串回溯到第三个字符,子串回溯到第一个字符再进行一一比对一直到子串字符

2022-01-19 22:22:45 595

原创 快速排序原理及c++实现

参考视频:https://www.bilibili.com/video/BV1K44y1k79z具体原理看上面链接里面的视频就够了,下面简单讲一下快排和附上c++代码:对于包含n个数的输入数组来说,快速排序是一种最坏情况时间复杂度为O(n²)的排序算法。虽然最坏情况时间复杂度很差,但是快速排序通常是实际排序应用中最好的选择,因为它的平均性能很好,它的期望时间复杂度为O(nlgn),而且O(nlgn)中隐含的常数因子非常小。//快速排序void fastsort(vector<int>&

2022-01-10 21:11:21 368

原创 堆排序算法原理及c++实现

文章目录准备知识MAX-HEAPIFY过程建堆堆排序算法总结准备知识堆的结构可以分为最大堆和最小堆,是一个完全二叉树,而堆排序是根据堆的这种数据结构设计的一种排序。所谓完全二叉树即叶节点只能出现在最下层和次下层,并且最下面一层的结点都集中在该层最左边的若干位置的二叉树。存储一个完全二叉树,最适合使用数组,因为它相比链表不需要存储左、右子树的指针,更加节省内存空间,通过数组索引即可以随机访问到对应元素。假设你知道某个节点下标为x ,那么其左子树下标为 x *2+1,其右子树下标为 x *2+2 ,

2022-01-10 20:03:13 1294

原创 冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序

1.排序的分类概述排序的定义对一序列对象根据某个关键字进行排序术语说明稳定:如果a原本在b前面,而a=b,排序之后a仍然在b前面。不稳定:如果a原本在b前面,而a=b,排序之后a可能出现在b的后面内排序:所有排序操作都在内存中完成外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行时间复杂度:一个算法执行所消耗的时间空间复杂度:运行完一个程序所需内存大小算法总结参考文章:https://zhuanlan.zhihu.com/p/2410410732.

2022-01-07 20:23:31 1109

原创 c++最大公约数函数(gcd)实现

int gcd(int a, int b) { if (a < b) return gcd(b, a); if (a % b == 0) return b; return gcd(b, a % b); }

2022-01-06 17:22:38 2326

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除