单链表 data.next-->data.next-->NULL
时间复杂度 插入节点:
时间复杂度:O1
删除节点
时间复杂度:O1
查找节点
时间复杂度:O(n)
链表想要随机访问第K个元素arr[k],需要根据指针一个一个找
双向链表 -->prev.data.next<==>prev.data.next<==>prev.data.next 即支持两个方向,每个节点不知有一个后继指针next,还有一个前驱指针prev指向前面的结点
空间复杂度 双向链表需要额外的两个空间来存储后继结点和其前驱结点的地址.所以,如果存储同样多的数据,双向链表要比单链表占用更多的内存空间.虽然两个指针比较浪 …
Git 学习笔记 cd相对路径 cd 什么都不加 回到用户的家目录下 cd ~ 回到root目录下 cd .. 进入上一级目录
cd - 返回上一次目录
cd . 当前目录
创建和删除目录 创建目录mkdir mkdir=make directory
mkdir dirname 创建目录
mkdir -p /etc/dirname/test/ 级联创建目录
mkdir -pv /etc/dirname/test/ 加上v可以看到创建的过程
删除目录rmdir rmdir=remove directory
rmdir dirname 可 删除空目录(下面无目录和文件)
删除文件 rm = remove命令 rmdir -p 可级联删除 …
CleanCode读书笔记 最小惊异原则 1.从一而终,便于修改 2.遵守大家的约定 有意义的命名 1.名副其实 1.命名需要注释来补充,那就不算名副其实 2.在命名时尽量采用有意义的名称,代码的简洁不会改变(运算符和常量的数量,嵌套数量) 2.避免误导 1.避免使用与本意相驳的词 2.提防使用不同之处较小的词 3.不要使用小写l和大写O作为变量名 4.命名有区分,应当有明显的区分,应使读者可以鉴别 3.使用读得出来的名称 4.使用可搜索的名称 1.长名称胜于短名称,搜得到的名称胜于自造的名称 2.单字母仅用于短方法中的本地变量 3.名称长短应与其作用域大小相对应 4.若变量或常量可能在代码中多次使用,则应赋予其便于搜索的名称 5. …
关于切片和slice的内存共享 package main import ( "bufio" "bytes" "errors" "fmt" _errors "github.com/pkg/errors" "os" "reflect" "regexp" "strconv" "strings" "sync" "sync/atomic" "time" ) func main() { /** * @Description: foo boo …
Apollo无人车架构 以HD-map为核心
线控车辆,计算机和传感器通过CAN卡进行通信 ROTS(Ubuntu+apollo kernel) 保证实时性
Feameworf(ROS+) 共享内存 减少传输中的数据拷贝,提高传输效率,减少传输延迟
有效解决一对多传输
共享内存减少CPU资源占用,提高机器计算能力
数据兼容 引入了protopuf文件格式
可以向后兼容
ROS深度兼容protopuf格式
去中心化,减小单点故障的影响 使用RTPS服务发现协议
以域作为划分,通过rtps相互广播,实现完全P2P
sub节点启动,组播registerNode->节点发现及建立unicast->向新加节点发送历史消息-> …