华清-周总结(2)(数据结构)

2023-05-16

数据结构类型

数据结构:线性结构,树形结构,图形结构

线性结构:在存储关系上,每个元素最多有一个前驱,一个后继

树形结构:在存储关系上,每个元素最多有一个前驱,但可以有多个后继

图形结构:在存储关系上,每个元素可以有多个前驱,多个后继

类型重定义 (typedef )

类型重定义 (typedef type define)

1 普通类型重定义 :把一些类型 替换成你想的名字

typedef int size_t;	//typedef 能将int 重定义成size_t
size_t a;		//int a

typedef unsigned char UINT8;		//UINT8 a;	//定义了一个 无符号8位的整型
typedef  char INT8;

typedef unsigned short UINT16;
typedef  short INT16;

typedef unsigned int UINT32;
typedef int   INT32;

结构体类型重定义

学生结构体类型重定义

struct student 
{
	char name[20];
	int age;
};


struct student s1;

方法1:

typedef struct student stu_t;
stu_t s1;	//可以省略struct 

方法2:

typedef struct student 
{
	char name[20];
	int age;
}stu_t;

方法3: 省略结构体名

typedef struct 
{
	char name[20];
	int age;
}stu_t;

例:

#include <stdio.h>
typedef struct
{
	char name[20];
	int age;
}stu_t;

int main()
{
	stu_t s1 = {"xiaoli", 25};
	printf("%s,%d\n", s1.name, s1.age);
}

链表

用来解决1 顺序表数据大量移动的问题

2 解决顺序表元素数量固定的问题

链表分为单向链表,双向链表,单向循环链表,双向循环链表

单向链表有两个域,数据域和指针域

1.带头结点

单向链表 两种类型

1 带头结点 (头结点: 是一个空节点,这个节点不存有效数据,只有next是有效的)

上面名字例子改为用带头结点的单向链表实现:

#include <stdio.h>
typedef struct node_t
{
	char name[20];
	struct node_t *next;
}link_node_t;

int main()
{
	link_node_t A = {"yang", NULL};
	link_node_t B = {"li", NULL};
	link_node_t C = {"liu", NULL};
	link_node_t D = {"wang", NULL};
	link_node_t E = {"  ", &A};
	A.next = &B;
	B.next = &C;
	C.next = &D;
	link_node_t *p = &E;
	//输出?????
	while(p->next != NULL)
	{
		p = p->next;
		printf("%s\n", p->name);	
	}
}

用带头结点

用带头结点的单向链表存储n个学生成绩 ,成绩由键盘输入,输入<=0 时结束

#include <stdio.h>
#include <stdlib.h>
typedef struct node_t
{
	int data;
	struct node_t *next;
}link_node_t;
int main()
{
	link_node_t *h = malloc(sizeof(link_node_t));//h 是头节点
	h->next = NULL;
	link_node_t *q = h;	//q 永远指向最后一个节点
	while(1)
	{
		int n;
		scanf("%d", &n);
		if(n <= 0)
			break;
		link_node_t *p = malloc(sizeof(link_node_t));//p 是新节点
		p->data = n;
		p->next = NULL;
		q->next = p;
		q = p;
	}
	while(h->next != NULL)
	{
		h = h->next;
		printf("%d\n", h->data);	
	}
}

实例解析

  • 主函数
int main()
{
	link_node_t *h = CreateEmptyLinklist();
	InsertLinklist(h, 1, 40);	//40
	InsertLinklist(h, 1, 30);	//30, 40
	InsertLinklist(h, 1, 10);	//10, 30, 40
	InsertLinklist(h, 2, 20);	//10, 20, 30, 40
	print_all(h);	//打印所有元素
	ReverseLinklist(h);
	print_all(h);	//打印所有元素  //40, 30, 20, 10
	DeleteLinklist(h, 2);
	print_all(h);	//打印所有元素  //10, 30, 40
	reverse_print_all(h);	//40, 30, 10
	free_list(h);		//释放所有元素(每释放一个,打印1)
}
  • 结构体定义
typedef struct node_t
{
	int data;
	struct node_t *next;
}link_node_t;
  • 创建头节点
link_node_t *CreateEmptyLinklist()

{	//malloc 一个头节点,  头节点的next = NULL ,  然后返回

	link_node_t *p = malloc(sizeof(link_node_t));

	p->next  = NULL;

	return p;

}
  • 1 求链表长度
//1 求链表长度

int LengthLinklist(link_node_t *p)

{

	int len = 0;

	while(p->next != NULL)

	{

		len++;

		p = p->next;

	}

	return len;

}
  • 2 取出某个位置元素的值
int getValue(link_node_t *p, int pos)

{

	int i;

	for(i = 0; i < pos; i++)

		p = p->next;

	return p->data;

}
  • 3 插入元素 (成功: 返回0 失败返回 -1)
//3 插入元素 (成功:  返回0   失败返回  -1)

int InsertLinklist(link_node_t *p, int pos, int x)

{

	int i;

	//容错处理, 如果pos 错,不能插入

	if(pos > LengthLinklist(p) + 1)

		return -1;

	for(i = 0; i < pos - 1; i++)

		p = p->next;

	link_node_t *q = malloc(sizeof(link_node_t));

	q->data = x;

	q->next = p->next;

	p->next = q;

	return 0;

}
  • 4 删除元素 (成功: 返回0 失败返回 -1)
int DeleteLinklist(link_node_t *p, int pos)

{

	int i;

	if(pos > LengthLinklist(p))

		return -1;

	for(i = 0; i < pos - 1; i++)

		p = p->next;

	link_node_t *q = p->next;

	p->next = q->next;

	free(q);

	return 0;

}
  • 打印元素
void print_all(link_node_t *p)

{

	while(p->next != NULL)

	{

		p = p->next ;

		printf("%d,", p->data);

	}

	printf("\n");

}
  • 反向输出 (递归实现)
void reverse_print_all(link_node_t *p)

{

	if(p->next == NULL)

		return;

	reverse_print_all(p->next);

	printf("%d,", p->next->data);

}
  • //链表逆转 (原来的最后一个节点,变成第一个节点)
void ReverseLinklist(link_node_t *h)

{

	link_node_t *p, *q;

	p = h->next;

	h->next = NULL;

	while (p != NULL)

	{

		q = p;

		p = p->next;

		q->next = h->next;

		h->next = q;

	}

	return;

}
  • 链表的释放
void free_list(link_node_t *p)

{

	while(p != NULL)

	{

		link_node_t *q = p->next;	//保存下一个节点

		free(p);	

		printf("1\n");

		p = q;

	}

}

双向链表

两个指针域: 1) 指向前一个节点 (prev) 2) 指向后一个节点 ( next )

双向链表,可以向后走,也可以向前走, 速度更快

结构体定义

typedef struct node_t
{
	int data;
	struct node_t *prev;
	struct node_t *next;
}link_node_t;

双向链表的插入和删除操作

int InsertLinklist(link_node_t *p, int pos, int x)
{	//1  找pos 前一个节点
	for(i = 0; i < pos – 1; i++)
		p = p->next;
	link_node_t *q = malloc(sizeof(link_node_t));
	q->data = x;
	q->next = p->next;		 //(1)
	p->next->prev = q;		//(2)	
	p->next = q;		//(3)	
	q->prev = p;		//(4)
	//注:  3 不能在1前面
}

栈是只能在一端进行插入和删除操作的线性表(又称为堆栈)

栈的操作规则(后进先出LIFO last in first out) (或者FILO first in last out)

栈的典型应用(函数的执行过程)

栈: 栈顶(top)栈顶 进行插入和删除操

实例解析

  • 主函数
int main()
{
	stack_t *p = CreateEmptyStack(5);
	pushStack(p, 10);
	pushStack(p, 20);
	pushStack(p, 30);
	pushStack(p, 40);
	pushStack(p, 50);
	pushStack(p, 60);	//栈已经满,失败
	printf("%d\n", popStack(p));	//50
	printf("%d\n", popStack(p));	//40
	printf("%d\n", popStack(p));	//30
	printf("%d\n", popStack(p));	//20
	printf("%d\n", popStack(p));	//10
	printf("%d\n", popStack(p));	//栈已经空,失败
}
  • 结构体定义
typedef struct
{
	int *data;		//
	int maxlen;		//栈中最多存储的元素个数
	int top;		//栈顶
}stack_t
  • 创建空堆栈
stack_t *CreateEmptyStack(int len)
{	//1) 动态分配内存    2) top = 0    3)  maxlen = len(不是必须的)
	stack_t *p = malloc(sizeof(stack_t));
	p->data = malloc(len * sizeof(int));
	p->maxlen = len;
	p->top = 0;
	return p;
}
  • 判断栈是否为空
int EmptyStack(stack_t *p)
{
	if(p->top == 0)
		return 1;
	else
		return 0;
}
  • 判断栈是否为满
int FullStack(stack_t *p)
{
	if(p->top == p->maxlen)		//return p->top == p->maxlen;
		return 1;
	else
		return 0;
}
  • 入栈
int pushStack(stack_t *p, int x)
{	//1) 判断是否满,    2) 存入数      3) top++
	if(FullStack(p) == 1)		//if(FullStack(p))
	{
		printf("stack full\n");
		return -1;
	}
	p->data[p->top] = x;
	p->top++;
	return 0;
}
  • 出栈
int popStack(stack_t *p)
{	//1) 判断是否空      2) top--        3) 返回值
	if(EmptyStack(p))
	{
		printf("stack empty\n");
		return -1;
	}
	p->top--;
	return p->data[p->top];
}
  • 清空栈
void clearStack(stack_t *p)
{
	p->top = 0;
}

队列

队列(FIFO)first in first out

允许在两端进行插入和删除操作的线性表(队列)

有两个指针(1 取数据端 2 存数据端)

取出端称为 front

存入端称为 rear

实例解析

  • 主函数
int main()
{
	queue_t *p = CreateEmptyQueue();
	InQueue(p, 10);
	InQueue(p, 20);
	InQueue(p, 30);
	InQueue(p, 40);
	InQueue(p, 50);
	InQueue(p, 60);		//满,存入失败
	printf("%d\n", OutQueue(p));	//10
	printf("%d\n", OutQueue(p));	//20
	printf("%d\n", OutQueue(p));	//30
	printf("%d\n", OutQueue(p));	//40
	printf("%d\n", OutQueue(p));	//50	
	printf("%d\n", OutQueue(p));	//空,-1
}
  • 结构体定义
typedef struct

{

	int data[6];

	int rear;

	int front;

}queue_t;
  • 创建队列
queue_t *CreateEmptyQueue()
{
	queue_t *p = malloc(sizeof(queue_t));
	p->rear = p->front = 0;
	return p;
}
  • 判断是否为空
int EmptyQueue(queue_t *p)

{

	return p->rear == p->front;

}
  • 判断是否为满
int FullQueue(queue_t *p)

{

	return (p->rear + 1) % 6 == p->front;

}
  • 入队
int InQueue(queue_t *p, int x)

{

	if(FullQueue(p))

	{

		printf("queue full\n");

		return -1;

	}

	p->data[p->rear] = x;

	p->rear++;

	p->rear = p->rear % 6;

	return 0;

}
  • 出队
int OutQueue(queue_t *p)

{

	if(EmptyQueue(p))

	{

		printf("queue empty\n");

		return -1;

	}

	int x = p->data[p->front];

	p->front++;

	p->front = p->front % 6;

	return x;

}

二分查找

每次找中间的数 和 x 进行比较,如果x比中间的数大,那么再在右面找中间的

如果x比中间的数小,那么再在左面找中间的

10, 15, 18, 20, 25, 30, 31, 38, 40 , 45 (下标 0 - 9)

找38:

1) l = 0, h = 9, m = (l + h) / 2 = 4 38 > a[4] 继续在右面找

2) l = m + 1 = 5, h = 9, m = (l + h) / 2 = 7 38 = a[7] 找到了,结束

找10:

1) l = 0, h = 9, m = (l + h) / 2 = 4 10 < a[4] 继续在左面找

2) l = 0, h = m - 1 = 3, m = (l + h) / 2 = 1 10 < a[1] 继续在左面找

3) l = 0, h = m - 1 = 0, m = (l + h) / 2 = 0 10 = a[0] 找到了,结束

找11:

1) l = 0, h = 9, m = (l + h) / 2 = 4 11 < a[4] 继续在左面找

2) l = 0, h = m - 1 = 3, m = (l + h) / 2 = 1 11 < a[1] 继续在左面找

3) l = 0, h = m - 1 = 0, m = (l + h) / 2 = 0 11 > a[0] 继续在右面找

4) l = m + 1 = 1, h = 0 此时 l > h 循环结束

实例解析

  • 主函数
int main()

{

	int a[10] = {10, 15, 18, 20, 25, 30, 31, 38, 40 , 45};	

	int n;

	scanf("%d", &n);	//(38      7)   (10   0)  (11   not find)

	int x = find_by_half(a, 10, n);

	if(x >= 0)

		printf("find it at %d\n", x);

	else

		printf("not find\n");

}
  • 查找函数
int find_by_half(int *p, int n, int x)

{

	int l = 0, h = n - 1, m;

	while(l <= h)

	{

		m = (l + h) / 2;

		if(x > p[m])

		{

			l = m + 1;

		}

		else if(x < p[m])

		{

			h = m - 1;

		}

		else if(x == p[m])

		{

			return m;

		}

	}

	return -1;

}

分块查找

数据有如下特点:块间有序,块内无序

实例

#include <stdio.h>
//结构体定义
typedef struct

{

	int max;

	int pos;

}index_t;
//查找函数
int find_by_block(int *p, index_t *q, int x)	//q 索引表

{

	int i;

	int start = 0, end = 0;

	for(i = 0; i < 4; i++)

	{

		if(x <= q[i].max)

		{	//找到了在哪块

			start = q[i].pos;

			if(i == 3)

				end = 18;

			else

				end = q[i + 1].pos - 1;

			break;

		}

	}

	for(i = start; i <= end; i++)

	{

		if(p[i] == x)

			return i;

	}

	return -1;

}


//主函数
int main()

{	//1 构建原始数据表

	int a[19] = {18, 10, 9, 8, 16, 20, 38, 42, 19, 50, 84, 72, 56, 55, 76, 100, 90, 88, 108};

	//2 构建索引表, 用结构体数组

	index_t b[4] = {{18, 0}, {50, 5}, {84, 10}, {108, 15}};	

	int n;

	scanf("%d", &n);

	int x = find_by_block(a, b, n);

	if(x >= 0)

		printf("find it at %d\n", x);

	else

		printf("not find\n");

}

哈希hash查找

哈希表又叫散列表(hash)

有一张表,表里面存的数据的某个关键字和位置有一个对应关系(关键字通过一个计算公式,能求出位置)

那么我们就可以快速找到某条记录

哈希查找有3个概念

1 关键字 (key)

2 计算公司(哈希函数 又称为 散列函数)

3 存储数据的表 (哈希表 又称为 散列表)

个人理解,:哈希表就是如果有10个数 我就拿20个的内存放这十个数,(空间换时间吗),在根据类似加密把数据通过方法转换成我们想要存的位置。

叠加法练习

本例子采用对1000取余在相加在取余的方法

  • 主函数
int main()

{

	int a[] = {704005265, 103004265, 999000001, 54353524, 435645657, 321312};

	int i, n, b[1000] = { 0 };	//哈希表

	for(i = 0; i < 6; i++)

	{

		save_by_add(b, a[i]);	//将6个ISBN编号存入到哈希表中

	}

	scanf("%d", &n);	//输入一个ISBN编号,查找是否在哈希表中

	int x = find_by_hash(b, n);

	if(x >= 0)

		printf("find it at %d\n", x);

	else

		printf("not find\n");

}
  • 保存函数
void save_by_add(int *p, int x)

{

	int pos = hash_fun(x);

	if(p[pos] == 0)

		p[pos] = x;

}
  • 查找函数
int find_by_hash(int *p, int x)	//返回值:  -1 没找到  >=0 位置

{

	int pos = hash_fun(x);

	if(p[pos] != x)

		return -1;

	else

		return pos;

}

  • 保存使用方法
int hash_fun(int x)

{

	return (x / 1000000 + x % 1000000 / 1000 + x % 1000) % 1000;

}

linux系统下一些根目录下的文件

/bin ? binary 保存的是二进制可执行命令 (ls mkdir mv ....)

/home ? 当新建一个用户时,在此目录 新建一个目录(用户工作目录)

/etc ? 保存配置文件(用户passwd 密码 shadow ip地址 ....)

/boot ? 保存linux启动相关文件

/dev ? device 保存设备相关文件(串口 ttyS0)

/lib ? library 保存系统库文件 (标准c库libc.so)

/sbin ? 管理员用户单独使用的命令

/mnt ? 当挂载 u盘... 一些硬件设备时,这些设备被挂载到此目录(mount)

树形结构:树中每个节点(除了根节点),都有一个前驱节点,一个或多个后继节点,

根 (最顶层的节点,它没有前驱,有多个后继)

叶子节点(最底层的节点,没有后继,只有一个前驱)

资源管理器、菜单

节点的度数: 一个节点的子节点的个数

二叉树(Binary Tree) (B Tree)

满二叉树 :深度为k(k≥1)时有2k-1个节点的二叉树

完全二叉树 :只有最下面两层有度数小于2的节点,

且最下面一层的叶节点集中在最左边的若干位置上。

二叉树的遍历

遍历 :沿某条搜索路径周游二叉树,对树中的每一个节点访问一次且仅访问一次

先序遍历(前序遍历) 根 --> 左 -->右

中序遍历 左 --> 根 -->右

后序遍历 左 -->右 --> 根

实例解析

  • 主函数
int main()	//构建二叉树

{

	tree_t A = {'A', NULL, NULL};

	tree_t B = {'B', NULL, NULL};

	tree_t C = {'C', NULL, NULL};

	tree_t D = {'D', NULL, NULL};

	tree_t E = {'E', NULL, NULL};

	tree_t F = {'F', NULL, NULL};

	A.lchild = &B;

	A.rchild = &C;

	B.lchild = &D;

	B.rchild = &E;

	C.lchild = &F;

	printf("%d\n", getBTreeHeight(&A));

}

  • 结构体定义
typedef struct node_t

{

	int data;

	struct node_t *lchild;

	struct node_t *rchild;

}tree_t
  • 树的输出
int getBTreeHeight(tree_t* root){

	if(root == NULL)

		return 0;

	int left = getBTreeHeight(root->lchild);

	int right = getBTreeHeight(root->rchild);

	return 1 + (left > right ? left: right);

}
  • 递归输出

最好用递归输出

	void first_order(tree_t *r)

		{

			if(r == NULL)

				return;

			printf("%d\n", r->data);

			first_order(r->lchild);

			first_order(r->rchild);

		}

快速排序

每次从前面拿出第一个数,开始排序,经过1轮 左面都比其小,右面的都比其大

实例解析

  • 主函数
int main()

{	

	int i;

	int a[] = {50,36,66,76,36,12,25,95, 78, 13, 89, 100};

	quick_sort(a, 0, 11);

	for(i = 0; i < sizeof(a) / sizeof(a[0]); i++)

	{

		printf("%d,", a[i]);

	}

}
  • 查找函数
void quick_sort(int *x, int low, int high)

{

	int i, j, t;

	if (low < high) /*要排序的元素起止下标,保证小的放在左边,大的放在右边。这里以下标为low 的元素为基准点*/

	{

		i = low;

		j = high;

		t = x[low]; /*暂存基准点的数*/   //x[low]

		while (i<j) /*循环扫描*/

		{

			while (i<j && x[j]>t) /*在右边的只要比基准点大仍放在右边*/

			{

				j--; /*前移一个位置*/

			}

			if(i<j)

			{

				x[i] = x[j]; /*上面的循环退出:即出现比基准点小的数,替换基准点的数*/

				i++; /*后移一个位置,并以此为基准点*/

			}

			while (i<j && x[i]<=t) /*在左边的只要小于等于基准点仍放在左边*/

			{

				i++; /*后移一个位置*/

			}

			if (i<j)

			{

				x[j] = x[i]; /*上面的循环退出:即出现比基准点大的数,放到右边*/

				j--; /*前移一个位置*/

			}

		}

		x[i] = t; /*一遍扫描完后,放到适当位置*/

		quick_sort(x,low,i-1); /*对基准点左边的数再执行快速排序*/

		quick_sort(x,i+1,high); /*对基准点右边的数再执行快速排序*/

	}

}

本周总结结束,感谢阅读!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

华清-周总结(2)(数据结构) 的相关文章

  • Java并发之semaphore(信号量)

    文章目录 1 官方解读2 通俗易懂的例子解析3 代码解析4 Semaphore的应用5 类结构和相关方法 1 类结构 2 acquire 方法 3 release 方法 6 总结 1 官方解读 semaphore信号量就是并发工具类 Sem
  • 程序员面试题精选100题(46)-对称子字符串的最大长度

    程序员面试题精选100题 46 xff0d 对称子字符串的最大长度 题目 xff1a 输入一个字符串 xff0c 输出该字符串中对称的子字符串的最大长度 比如输入字符串 google xff0c 由于该字符串里最长的对称子字符串是 goog
  • Ubuntu12.04执行apt-get update时报错的问题解决

    报错内容示例 W Failed to fetch http us old releases ubuntu com ubuntu dists precise updates Release gpg Something wicked happe
  • arduino烧写报错:can‘t open device “\\.\COM1“

    我的解决办法是拔掉usb xff0c 让它关机 xff0c 停止运行一会 xff0c 它便可恢复 记得之前也有一次 xff0c 那次解决好像是通过修改它的端口号 xff0c 例如我将它com8修改为com1 两个方法都可以尝试下 xff0c
  • UDP服务器/客户端Linux下C代码实现以及广播、组播

    目录 UDP广播流程 组播流程 UDP UDP xff08 User Datagram Protocol xff09 用户数据报协议 xff0c 是不可靠的无连接的协议 在数据发送前 xff0c 因为不需要进行连接 xff0c 所以可以进行
  • CMakeLists.txt常用语法

    CMakeLists txt常用语法 cmake minimum requiredprojectadd executableinclude directoriesadd libraryalias library xff08 别名库 xff0
  • git 合并分支

    假如我们现在在dev分支上 xff0c 刚开发完项目 xff0c 执行了下列命令 xff1a git add git commit m 39 提交的备注信息 39 git push u origin dev 想将dev分支合并到master
  • 月薪35k的简历是怎么包装的 ,让面试官心动的标准简历(附模板分享)

    有过面试的都知道 xff0c 不管怎样 xff0c 面试多多少少都和简历有这很重要的 毕竟面试官要通过简历了解面试者的基本信息 过往经历 xff0c 来判断面试者和岗位的匹配度 面试者期望通过简历把自己较好的一面体现给面试官 xff0c 所
  • 对无人机高度环的思考和第一次炸机体验

    前两天学长布置了一个任务 xff0c 大体就是在无人机起飞一段时间后再次改变飞行高度 一开始我觉得挺简单 xff0c 随便改改就行了 xff0c 所以今天才开始写 xff0c 然后 炸机了 先说说第一次炸机的体验 就是看到无人机炸机的疯狂往
  • 21年电赛无人机G题思路

    21年电赛结束了 xff0c 我们选择的题目是无人机G题 通过题目也能感受到今年的难度 xff0c 在这里旨在为大家提供一个G题的解题思路和方案 读完题目 xff0c 可以发现主要有两个难题需要解决 1 飞行路径问题 xff08 如何确保飞
  • 面试必问之Promise

    常见 Promise 面试题 1 了解 Promise 吗 xff1f 2 Promise 解决的痛点是什么 xff1f 3 Promise 解决的痛点还有其他方法可以解决吗 xff1f 如果有 xff0c 请列举 4 Promise 如何
  • js中的防抖和节流的原理

    在进行窗口的resize scroll xff0c 输入框内容校验等操作时 xff0c 如果事件处理函数调用的频率无限制 xff0c 会加重浏览器的负担 xff0c 导致用户体验非常糟糕 此时我们可以采用debounce xff08 防抖
  • 汽车CAN总线介绍

    CAN Controller Area Network 控制器局域网络 xff0c CAN网络在早期的整车应用中以BCM 车身控制器 为控制中心 xff0c 主要是车身零部件 雨刮 大灯 车窗 xff0c 智能硬件较少 xff0c 所以早期
  • /usr/bin/ssh-copy-id: ERROR

    搭建hadoop的时候不小心配错域名 导致配置免密码登陆的时候密码一直输入错误 重新修改域名后在配置就一直报错 解决办法 在 ssh目录下修改known hosts文件中配置错的域名 直接删除 重新执行命令 ssh copy id slav
  • 完整安装PX4/PX4-Autopilot,无需科学上网。

    安装自https github com PX4 PX4 Autopilot 的px4功能包 xff0c 因为需要科学上网似乎会失败 xff0c 这里采用其他方法来安装 截止到2022年9月 https hub fastgit xyz这个镜像
  • linux 安装docker报错解决

    出现问题说明 xff1a 当已经确定好了docker安装好了 xff08 用dockers version确认版本的情况下 xff09 一般可以正常运行 xff0c 但是用命令查看systemctl status docker运行状态时 x
  • 网络编程——UDP编程

    一 网络编程基础 计算机网络是指两台或更多的计算机组成的网络 xff0c 在同一个网络中 xff0c 任意两台计算机都可以直接通信 xff0c 因为所有计算机都需要遵循同一种网络协议 因此 xff0c 为了把计算机网络接入互联网 xff0c
  • Ubuntu20.04配置ORB-SLAM3环境并运行

    Ubuntu20 04配置ORB SLAM3环境并运行 1 安装依赖 安装Pangolin 安装OPENCV 安装Eigen 安装Python DBow2和g2o 2 源码下载3 遇到的问题1 编译第三方库出现问题 xff0c 安装Boos
  • toString()方法的作用

    将当前函数的函数名 和引用地址 以数组的形式返回 toString 方法是自带object类中的方法 如果不对toString 方法进行重写 xff0c 那么默认返回对象名和引用地址 重写示例 xff1a package com artis
  • Windows通过FTP服务上传20G大文件到Linux服务器

    场景描述 xff1a 在工作中 xff0c 需要将Windows中的文件上传到Linux服务器中 xff0c 文件大小为20G 通过xshell和rz lrzsz软件提供 xff0c rz上传文件 xff0c sz下载文件 的方式均无法上传

随机推荐

  • Postman Pre-request Script(预处理脚本) SNIPPETS所有用法解释

    获取环境变量 xff0c 全局变量 Get an environment variable 获取环境变量variable key pm environment get 34 variable key 34 Get a global vari
  • 编译ros工程时catkin_make 报错:This file requires compiler and library support for the ISO C++ 2011 standard

    This file requires compiler and library support for the ISO C 43 43 2011 standard This support must be enabled with the
  • ESP8266解析S-BUS协议

    Talk is cheap show you code 编译平台 xff1a Arduino IDE span class token comment 功能 xff1a 软件串口读取S BUS数据 xff1b 解析 xff1b 串口打印 s
  • CAN的ACK深入理解

    CAN信息发送成功后 xff0c 会有个应答间隙的 xff0c 在这个间隙内 xff0c 接收节点可以准备要回复的信息 xff0c 也就是把应答场填充为显性0 xff0c 在发送时其为隐性1 应答过程可能如下 xff1a 当信息传输到ACK
  • 二、Docker镜像使用和命令

    文章目录 Docker镜像使用和命令列出本机镜像查找镜像拉取镜像删除镜像删除所有镜像镜像的原理 Docker镜像使用和命令 镜像就是一个轻量级的 xff0c 可执行的独立软件包 xff0c 用来打包软件运行环境和基于运行环境开发的软件 xf
  • 阿里云ECS centos8连接可视化界面

    阿里云ECS centos8连接可视化界面 文章目录 阿里云ECS centos8连接可视化界面安装图形化界面安装VNC Server客户端设置界面为中文 安装图形化界面 使用以下命令安装图形桌面的软件包 yum groupinstall
  • DJI-OSDK开发

    DJI OSDK开发 一 简介 Onboard SDK xff0c 顾名思义就是跑在板子上的一套SDK接口 xff0c 通过串口与飞控进行通信 xff0c 通过调用这些接口 xff0c developer就可以实现对DJI A3 N3 M1
  • Linux 虚拟机centos /dev/mapper/cl-root 100% 解决方法

    1 在虚拟机中添加硬盘 一 添加新的磁盘 1 选择 虚拟机设置 并打开 xff0c 将光标定位在 硬盘 SCSI 选项上 xff0c 然后点击下方的 添加 按钮 2 点击下一步 3 选择SCSI 点击下一步 4 选择创建新虚拟机磁盘 xff
  • 解决ROS系统 rosdep update超时问题,省时又好用的方法,根本不需要修改什么文件这么麻烦

    直接使用小鱼提供的rosdepc 1 安装rosdepc wget http fishros com install O fishros amp amp bash fishros 2 输入数字3安装rosdepc 3 然后执行rosdepc
  • ubuntu安装kalibr,并进行相机和IMU(惯性测量单元)的内外参联合标定

    1 IMU内参的标定 参考我的另一篇博客 xff1a 4条消息 ubuntu安装imu utils xff0c 并进行IMU xff08 惯性测量单元 xff09 内参标定 xffe3 莫等闲 的博客 CSDN博客 https blog c
  • 华清远见电子词典

    1 服务器 include lt stdio h gt include lt sys types h gt include lt sys socket h gt include lt pthread h gt include lt sqli
  • 基于STM32F407的WIFI通信(使用的是ESP8266模块)

    基于STM32F407的WIFI通信 xff08 使用的是ESP8266模块 xff09 本次做的是WIFI通信所实现的功能是 xff1a 由单片机端向客户端发送数据 模式 xff1a STA模式 xff08 及连接路由器的方式 xff09
  • 腾讯云轻量级服务器Ubuntu系统搭建可视化界面

    前言 xff1a 以云服务器的方式搭建Linux workstation对比在电脑本地安装虚拟机的优势在于 xff0c 不需要占用本地电脑资源空间 xff0c 网络环境等相对稳定 xff0c 可以用手机等轻量移动设备连接管理等 本文主要介绍
  • gitee多人合作,上传push到别人的远程仓库

    首先要确保在别人的远程仓库中 第二步 xff1a 新建一个文件夹 xff0c 在里面点击右键 xff0c 选择 Git Bash Here进入操作界面 第三步 xff1a 先git init创建一个git文件 第四步 xff1a git r
  • 汽车CAN总线详解

    概述 CAN xff08 Controller Area Network xff09 总线协议是由 BOSCH 发明的一种基于消息广播模式的串行通信总线 xff0c 它起初用于实现汽车内ECU之间可靠的通信 xff0c 后因其简单实用可靠等
  • docker快速清理已停止的容器

    修剪所有不在运行的容器 xff0c 强制删除使用 f 或者 force docker container prune 使用 filter限制范围 xff0c 例如删除24小时前创建的已停止的容器 docker container prune
  • FreeRTOS学习笔记8(中断管理)

    1 中断管理的介绍 这里的中断管理主要是一些前面使用到的队列 信号量 互斥量等的在中断中使用的函数的封装 xff0c 为什么要从新封装这些函数 xff0c 这些函数有哪些优缺点 xff0c 这些函数是如何使用的 xff1f 这些问题后面会一
  • UCOSIII从官网(2021)下载

    官网地址 xff1a https www silabs com developers micrium 注意 xff1a 在进入下载前 可能 要注册一个账号 xff0c 如果可以直接下载的话不用注册也可以 xff0c 如果有小伙伴需要注册账号
  • dataX连接oracle报实例名错误

    oracleCDB数据库 xff1a 实例名CS 34 jdbcUrl 34 34 jdbc oracle thin 64 10 10 10 242 1521 xff1a CS 34 oraclePDB数据库 xff1a 实例名CS 34
  • 华清-周总结(2)(数据结构)

    数据结构类型 数据结构 xff1a 线性结构 xff0c 树形结构 xff0c 图形结构 线性结构 xff1a 在存储关系上 xff0c 每个元素最多有一个前驱 xff0c 一个后继 树形结构 xff1a 在存储关系上 xff0c 每个元素