图的邻接矩阵表示
图是一种中一对多的数据类型。图的表示方法有邻接矩阵法,十字链表法。
图的操作包括
Adjacent(G,x,y):判断图G是否存在边<x,y>或(x,y)。
Neighbors(G,x):列出图G中与结点x邻接的边。
InsertVertex(G,x):在图G中插入顶点x。
DeleteVertex(G,x):从图G中删除顶点x。
AddEdge(G,x,y):若无向边(x,y)或有向边<x,y>不存在,则向图G中添加该边。
RemoveEdge(6,x,y):若无向边(x,y)或有向边<x,y>存在,则从图G中删除该边。
FirstNeighbor(G,x):求图G中顶点x的第一个邻接点,若有则返回顶点号。若x没有邻接点或图中不存在x,则返回-1。
邻接矩阵表示适合密集图
图的存储方式1234567#define MAX_SIZE 10typedef struct Graph{ int vexnum; /*节点个数*/ int vertices[MAX_SIZE]; /*节点数组*/ ...
哈夫曼树
哈夫曼树是一种带权路径最小的树,运用于压缩编码算法。
带权路径又称WPL,是所有非叶子节点的路径之和,路径=深度*权值
哈夫曼树的节点个数=2*带权节点个数-1
哈夫曼树的构造过程在未组成哈夫曼树的节点中寻找权值最小和第二小的节点,作为左右孩子,构造一个新节点作为父节点,父节点的权值为左右孩子的权值之和
哈夫曼树的表示哈夫曼树用顺序存储的数组表示。
存储结构如下
12345678910111213typedef struct TreeNode{ int weight; int parent; int lchild; int rchild;} TreeNode;typedef struct HaffTree{ struct TreeNode *node; int length;} HaffTree;
哈夫曼树的初始化操作123456789101112131415HaffTree *initTree(int *weight, int length){ HaffTre ...
linxu的main函数启动过程
main函数源码
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253/* * This is set up by the setup-routine at boot-time */#define EXT_MEM_K (*(unsigned short *)0x90002) /*扩展内存数,单位为KB*/#define DRIVE_INFO (*(struct drive_info *)0x90080)#define ORIG_ROOT_DEV (*(unsigned short *)0x901FC)void main(void) /* This really IS void, no error here. */{ /* The startup routine assumes (well, ...) this *//*hexhe * Interrupts are still disabled. Do necessary setup ...
树和森林
树的存储方式双亲表示法
存储方式双亲表示法使用数组实现
parent存放父亲在数组的索引
插入操作插入操作在数组末尾加入数据
孩子表示法使用顺序存储和链式存储实现
孩子兄弟表示法将下面的树使用孩子兄弟表示法,可以转化为
树 二叉树 森林的转化
操作符重载
操作符重载操作流重载cout是一种ostream类型
1234operator <<(ostream &os,const complex& x){ return os<<'C'<<real(x)<<','<<imag(x)<<')';}cout<<conj(c1)//调用函数operator <<(cout,c1)
thread
c11提供了线程的标准库
lamda表达式左值引用完美转发forward队列queueemplace可变参数模板函数万能引用右值引用函数适配器bind时间库chrono
线程库的使用1234567891011#include<iostream>#include<thread>void func(){ std::cout<<"线程启动"<<std::endl;}int main(){ std::thread th1(); return 0;}
lock_guardlock_guard是C++11提供的锁管理机制,能够对共享变量进行自动加锁和解锁。
初始化
1std::lock_guard<std::mutex> guard(mux);
源码:
123456789101112131415161718192021template<typename _Mutex> class lock_guard { pu ...
rtmp
RTMP介绍
RTMP协议是应用层协议,是要靠底层可靠的传输层协议(通常是TCP)
RTMP的基本流程:
客户端发送C0C1
服务器接收客户端的 C0C1 数据并发送 S0S1S2 数据
客户端接收服务器的 S0S1S2 数据并发送 C2 数据。
在 C0 中,这一字段指示出客户端要求的 RTMP 版本号
S0S1S2 阶段的数据包括一个字节的版本号(S0),以及两个 1536 字节的随机数据(S1和S2)。
ffmpeg
采集–推流–SRS服务器转发–拉流
音频:麦克风采集–音效变音–编码(压缩数据)解码–RTMP推流视频摄像头采集(RGB/YUV)–图像处理–H264编码–RTMP推流
拉流:WebRtc/HL/ HTTP-FLV解码+音视频同步–>输出
封装:
MPEG-4标准是一套音视频信息的压缩编码标准,
H264是视频压缩算法
MP4是音视频格式,不一定遵守MPEG-4
AVI格式:压缩标准可任意选择
FLV:视频流格式,常用于直播
ts:流媒体格式,电视直播
编码
视频编码
视频编码格式
H264
wmv
Xvid
mjpeg
音频编码
音频格式
ACC
MP3
ape
flac
解码:
视频解码为YUV–>转为RGB显示(GPU)
YUV:Y表示明亮度/灰度值,U和V表示的是色度
重采样:
像素格式:
PCM音频参数
参数
采样率simple_rate(每秒采集频率)
通道channels(左右通道)
样本大小 ...
c++面向对象
操作流123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869```# 对象## 成员函数与全局函数成员函数的传递默认参数`this`### reference### const function和function const### return reference## 构造函数复合:由内到外## 析构函数复合:由外到内## 拷贝构造## 拷贝赋值含有指针的赋值,希望可以拷贝一份(深拷贝),而不是指向同一块内存区域(浅拷贝)深拷贝:b=a;将a中的内容复制一份浅拷贝:b=1;将b指向a的内容![image-20240125135919437](https://cdn.jsdelivr.net/gh/qianxiaolin/picgo/202401251359114.png)## 实例实例的创建方式实例的生存周期## 临时对象语法:typename()```c++class complex ...