【算法】蓝桥杯2013国C 横向打印二叉树 题解
文章目录
- 题目链接
- 题目描述
- 输入格式
- 输出格式
- 样例
- 自己的样例输入
- 自己的样例输出
- 思路
- 整体思路
- 存储二叉搜索树
- 中序遍历并存储
- 计算目标数的行号
- dfs遍历并写入数组
- 初始化和处理输入输出
- 初始化
- 处理输入
- 处理输出
- 完整的代码如下
- 结束语
- 更新
- 初始化的修改
- 存储二叉搜索树的修改
- 中序遍历和dfs的修改
- 最终完整ac代码
题目链接
P8603 [蓝桥杯 2013 国 C] 横向打印二叉树
题目描述
其原理很简单:对于一个排序二叉树添加新节点时,先与根节点比较,若小则交给左子树继续处理,否则交给右子树。
当遇到空子树时,则把该节点放入那个位置。
比如,10 8 5 7 12 4
的输入顺序,应该建成二叉树如图 1 1 1 所示。
本题目要求:根据已知的数字,建立排序二叉树,并在标准输出中横向打印该二叉树。
输入格式
输入数据为一行空格分开的 N N N 个整数。 N < 100 N<100 N<100,每个数字不超过 10000 10000 10000。
N N N 并没有在输入中给出。
输入数据中没有重复的数字。
输出格式
输出该排序二叉树的横向表示,为了便于评卷程序比对空格的数目,请把空格用句点代替。
样例
自己的样例输入
5 2 3 4 45 35 11 20 15 30 25 121 1234 23 1 44 7 10 12 6
自己的样例输出
.............|-1234
.......|-121-|
..|-45-|
..|....|....|-44
..|....|-35-|
..|.........|.........|-30-|
..|.........|.........|....|-25-|
..|.........|.........|.........|-23
..|.........|....|-20-|
..|.........|....|....|-15-|
..|.........|....|.........|-12
..|.........|-11-|
..|..............|...|-10
..|..............|-7-|
..|..................|-6
5-|
..|.......|-4
..|...|-3-|
..|-2-|
......|-1
思路
整体思路
我们使用数组的方法存储二叉搜索树,定义一个长度为1010的int类型数组ns和宽度,高度都为1010的char数组mymap,一个用于存二叉树、一个用于打印二叉树。
(其实按照题目给的数据范围N<100,int数组长度不应该取1010,应该取是 2 99 2^{99} 299次方,显然也会超过内存限制。但是我亲测取1010也能过全部样例,这里就怎么简单怎么来吧)
我们用数组存储二叉搜索树,下标 x x x为根, x ∗ 2 x*2 x∗2为左节点下标, x ∗ 2 + 1 x*2+1 x∗2+1为右节点下标,按照输入顺序存储。
在中序遍历并存储,因为二叉搜索树的中序是排序了的,所以直接中序遍历输出的数字存储起来就行了,排序后方便后面计算高度。
...|-12
10-|
...|-8-|
.......|...|-7
.......|-5-|
...........|-4
上面为某个输出样例,我们观察可以不难看出,从下往上看每个数字是升序的,所以某个数字的高度h为所有大于这个数字的个数+1,这样就可以求出这个数在mymap数组的行号。列号也可以用dfs算法遍历求出。
最后做完上面的步骤,直接用dfs遍历一遍再处理一下输出就行。
存储二叉搜索树
二叉树的存储根节点的下标为1,左右节点下标为2和3,依此类推,节点下标为 x x x,那么左节点下标为 x ∗ 2 x*2 x∗2,右节点的下标为 x ∗ 2 + 1 x*2+1 x∗2+1。
int ns[1010], stn;
void insert(int x) {while (ns[stn] != -1) {if (ns[stn] > x)stn = stn * 2;else if (ns[stn] < x)stn = stn * 2 + 1;}ns[stn] = x;
}
这里的stn为全局变量每次插入的时候都初始为1(根节点下标)
中序遍历并存储
这里没什么好说的,直接中序排序后的数字压入vector就行了
vector<int> cn;
void in_dfs(int start) {if (ns[start] == -1)return;in_dfs(start * 2);// 存储到vector,存储完后自然排好序cn.push_back(ns[start]);in_dfs(start * 2 + 1);
}
计算目标数的行号
因为排好序我们直接找到目标数所在的下标。
行号 = 数字个数 − 下标 行号=数字个数-下标 行号=数字个数−下标
vector<int> cn;
int compute_h(int w) {vector<int>::iterator it = find(cn.begin(), cn.end(), w);int c = it - cn.begin();return cn.size() - c;
}
dfs遍历并写入数组
h,w为该数字的行号和列号,max_w为整个输出的最大列号定义为全局遍历,每次迭代取最大值。start是当前迭代的数字,d_idx为当前数字在ns数组中的下标
把当前数字转换为string类型,并计算长度n。l_idx为当前数字的左节点,r_idx为当前数字的右节点,l_h为当前数字的左节点的高度,r_h为当前数字的右节点的高度。
write函数为写入,传入一些重要参数
后面按顺序进行dfs遍历,此处为前序遍历
int max_w = 0;
void dfs(int h, int w, int start, int d_idx) {if (ns[d_idx] == -1)return;max_w = max(max_w, w);string n = to_string(start);int l_idx = d_idx * 2, r_idx = d_idx * 2 + 1;int l_h = compute_h(ns[l_idx]), r_h = compute_h(ns[r_idx]);write(h, w, l_idx, r_idx, l_h, r_h, n);dfs(l_h, w + n.size() + 3, ns[l_idx], l_idx);dfs(r_h, w + n.size() + 3, ns[r_idx], r_idx);
}
void write(int h, int w, int l_idx, int r_idx, int l_h, int r_h, string n) {int len = n.size();// 前面部分if (w - 2 >= 0)mymap[h][w - 2] = '|';mymap[h][w - 1] = '-';//中间数字部分for (int i = w; i < len + w; ++i) {mymap[h][i] = n[i - w];}// 后面部分if (ns[l_idx] != -1 || ns[r_idx] != -1) {mymap[h][len + w] = '-';mymap[h][w + len + 1] = '|';}// 补充'|'if (l_h - h > 1 && ns[l_idx] != -1) {for (int i = h; i < l_h; ++i) {mymap[i][w + len + 1] = '|';}}if (h - r_h > 1 && ns[r_idx] != -1) {for (int i = h; i > r_h; --i) {mymap[i][w + len + 1] = '|';}}
}
初始化和处理输入输出
初始化
结束dfs的方式判断当前数字为-1,先初始化ns数组全部为-1。
题目要求输出的空格打印为’.‘,那么就初始化mymap数组全部为’.'。
// 初始化
memset(ns, -1, sizeof ns);
memset(mymap, '.', sizeof mymap);
处理输入
这题没有指定读入多少个数字,所以在普通的编译器上面就不知道如何结束读入,好在OJ有一个特性我们正好可以利用。
我们简单的介绍这个OJ的特性:读入文本,读到文本末尾,程序会自动停止的。
这里就先存一下根节点,再把后面的节点读入进去
// 存储二叉树
int x;
cin >> x;
ns[1] = x;
while (cin >> x) {stn = 1;insert(x);
}
处理输出
显然cn的长度为输出的最大行号,max_w为最大宽度,我们遍历一下这个二维字符数组就行了
for (unsigned int i = 1; i <= cn.size(); ++i) {// 这里max_w 要加上大于1的数,因为要把结束字符存入max_w外面。// 反向遍历,处理结束符for (int j = max_w + 2; j >= 1; j --) {if ((mymap[i][j - 1] >= '0' && mymap[i][j - 1] <= '9') || mymap[i][j - 1] == '|') {// 存入结束字符'\0'mymap[i][j] = '\0';break;}}// 正向遍历,输出答案for (int j = 1; mymap[i][j]; ++j) {cout << mymap[i][j];}cout << endl;
}
完整的代码如下
#include <bits/stdc++.h>
#define endl '\n'using namespace std;const int N = 1010;int max_w = 0, stn, ns[N];
vector<int> cn;
char mymap[N][N];void insert(int x) {while (ns[stn] != -1) {if (ns[stn] > x)stn = stn * 2;else if (ns[stn] < x)stn = stn * 2 + 1;}ns[stn] = x;
}void in_dfs(int start) {if (ns[start] == -1)return;in_dfs(start * 2);cn.push_back(ns[start]);in_dfs(start * 2 + 1);
}int compute_h(int w) {vector<int>::iterator it = find(cn.begin(), cn.end(), w);int c = it - cn.begin();return cn.size() - c;
}void write(int h, int w, int l_idx, int r_idx, int l_h, int r_h, string n) {int len = n.size();// 前面部分if (w - 2 >= 0)mymap[h][w - 2] = '|';mymap[h][w - 1] = '-';//中间数字部分for (int i = w; i < len + w; ++i) {mymap[h][i] = n[i - w];}// 后面部分if (ns[l_idx] != -1 || ns[r_idx] != -1) {mymap[h][len + w] = '-';mymap[h][w + len + 1] = '|';}// 补充'|'if (l_h - h > 1 && ns[l_idx] != -1) {for (int i = h; i < l_h; ++i) {mymap[i][w + len + 1] = '|';}}if (h - r_h > 1 && ns[r_idx] != -1) {for (int i = h; i > r_h; --i) {mymap[i][w + len + 1] = '|';}}
}void dfs(int h, int w, int start, int d_idx) {if (ns[d_idx] == -1)return;max_w = max(max_w, w);string n = to_string(start);int l_idx = d_idx * 2, r_idx = d_idx * 2 + 1;int l_h = compute_h(ns[l_idx]), r_h = compute_h(ns[r_idx]);write(h, w, l_idx, r_idx, l_h, r_h, n);dfs(l_h, w + n.size() + 3, ns[l_idx], l_idx);dfs(r_h, w + n.size() + 3, ns[r_idx], r_idx);
}int main() {ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);// 初始化memset(ns, -1, sizeof ns);memset(mymap, '.', sizeof mymap);int x;// 存储二叉树cin >> x;ns[1] = x;while (cin >> x) {stn = 1;insert(x);}// 中序遍历并排序in_dfs(1);dfs(compute_h(ns[1]), 1, ns[1], 1);for (unsigned int i = 1; i <= cn.size(); ++i) {for (int j = max_w + 2; j >= 1; j --) {if ((mymap[i][j - 1] >= '0' && mymap[i][j - 1] <= '9') || mymap[i][j - 1] == '|') {mymap[i][j] = '\0';break;}}for (int j = 1; mymap[i][j]; ++j) {cout << mymap[i][j];}cout << endl;}return 0;
}
结束语
萌新,第一次在洛谷博客写一篇题解,有写得不好之处,请轻喷~~
更新
2023年12月4号
在上面说过了我这个方法不怎么对,用上面那种数组模拟二叉树存储在题目的限制范围会超出内存限制的,只适合像满二叉树那样,单枝树超过了8个节点就不行了,昨天因为是晚上知道这个问题后写完代码还能ac,就直接用这种简单的方法写完题解交了。今天马上就改进了,现在我们使用三个int类型数组来存储二叉树。
ns数组用来存储该下标节点的值,l数组用于存储下一个左节点的下标,r数组用于存储下一个右节点的下标。
修改如下:
初始化的修改
因为l[i]是存储i节点的左节点的下标,r[i]是存储的i节点的右节点的下标。所以我们可以递推实现预处理。
l[1] = 2;
r[1] = 3;
for (int i = 2; i < N; ++i)
{l[i] = l[i - 1] + 2;r[i] = r[i - 1] + 2;
}
存储二叉搜索树的修改
stn 还是每次进行insert的时候初始化根节点为1,然后从根节点找x应该存储在哪个节点上并赋值。
void insert(int x) {while (ns[stn] != -1) {if (ns[stn] > x)stn = l[stn];else if (ns[stn] < x)stn = r[stn];}ns[stn] = x;
}
中序遍历和dfs的修改
设:start为一个节点的下标,那么这个点的左节点为l[start],r[start]。
void in_dfs(int start) {if (ns[start] == -1)return;in_dfs(l[start]);cn.push_back(ns[start]);in_dfs(r[start]);
}
void dfs(int h, int w, int start, int d_idx) {if (ns[d_idx] == -1)return;max_w = max(max_w, w);string n = to_string(start);int l_idx = l[d_idx], r_idx = r[d_idx];int l_h = compute_h(ns[l_idx]), r_h = compute_h(ns[r_idx]);write(h, w, l_idx, r_idx, l_h, r_h, n);dfs(l_h, w + n.size() + 3, ns[l_idx], l_idx);dfs(r_h, w + n.size() + 3, ns[r_idx], r_idx);
}
最终完整ac代码
#include <bits/stdc++.h>
#define endl '\n'using namespace std;const int N = 1010;int max_w = 0, stn, ns[N * 2 + 10], l[N], r[N];
vector<int> cn;
char mymap[N][N];void insert(int x) {while (ns[stn] != -1) {if (ns[stn] > x)stn = l[stn];else if (ns[stn] < x)stn = r[stn];}ns[stn] = x;
}void in_dfs(int start) {if (ns[start] == -1)return;in_dfs(l[start]);cn.push_back(ns[start]);in_dfs(r[start]);
}int compute_h(int w) {vector<int>::iterator it = find(cn.begin(), cn.end(), w);int c = it - cn.begin();return cn.size() - c;
}void write(int h, int w, int l_idx, int r_idx, int l_h, int r_h, string n) {int len = n.size();// 前面部分if (w - 2 >= 0)mymap[h][w - 2] = '|';mymap[h][w - 1] = '-';//中间数字部分for (int i = w; i < len + w; ++i) {mymap[h][i] = n[i - w];}// 后面部分if (ns[l_idx] != -1 || ns[r_idx] != -1) {mymap[h][len + w] = '-';mymap[h][w + len + 1] = '|';}// 补充'|'if (l_h - h > 1 && ns[l_idx] != -1) {for (int i = h; i < l_h; ++i) {mymap[i][w + len + 1] = '|';}}if (h - r_h > 1 && ns[r_idx] != -1) {for (int i = h; i > r_h; --i) {mymap[i][w + len + 1] = '|';}}
}void dfs(int h, int w, int start, int d_idx) {if (ns[d_idx] == -1)return;max_w = max(max_w, w);string n = to_string(start);int l_idx = l[d_idx], r_idx = r[d_idx];int l_h = compute_h(ns[l_idx]), r_h = compute_h(ns[r_idx]);write(h, w, l_idx, r_idx, l_h, r_h, n);dfs(l_h, w + n.size() + 3, ns[l_idx], l_idx);dfs(r_h, w + n.size() + 3, ns[r_idx], r_idx);
}void init() {// 初始化memset(ns, -1, sizeof ns);memset(mymap, '.', sizeof mymap);l[1] = 2;r[1] = 3;for (int i = 2; i < N; ++i){l[i] = l[i - 1] + 2;r[i] = r[i - 1] + 2;}
}int main() {ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);init();int x;// 存储二叉树cin >> x;ns[1] = x;while (cin >> x) {stn = 1;insert(x);}// 中序遍历并排序in_dfs(1);dfs(compute_h(ns[1]), 1, ns[1], 1);for (unsigned int i = 1; i <= cn.size(); ++i) {for (int j = max_w + 2; j >= 1; j --) {if ((mymap[i][j - 1] >= '0' && mymap[i][j - 1] <= '9') || mymap[i][j - 1] == '|') {mymap[i][j] = '\0';break;}}for (int j = 1; mymap[i][j]; ++j) {cout << mymap[i][j];}cout << endl;}return 0;
}
相关文章:
【算法】蓝桥杯2013国C 横向打印二叉树 题解
文章目录 题目链接题目描述输入格式输出格式样例自己的样例输入自己的样例输出 思路整体思路存储二叉搜索树中序遍历并存储计算目标数的行号dfs遍历并写入数组初始化和处理输入输出初始化处理输入处理输出 完整的代码如下 结束语更新初始化的修改存储二叉搜索树的修改中序遍历和…...
XunSearch 讯搜 error: storage size of ‘methods_bufferevent’ isn’t known
报错: error: storage size of ‘methods_bufferevent’ isn’t known CentOS8.0安装迅搜(XunSearch)引擎报错的解决办法 比较完整的文档 http://www.xunsearch.com/download/xs_quickstart.pdf 官方安装文档 http://www.xunsearch.com/doc/php/guide/start.in…...
基于AWS Serverless的Glue服务进行ETL(提取、转换和加载)数据分析(三)——serverless数据分析
3 serverless数据分析 大纲 3 serverless数据分析3.1 创建Lambda3.2 创建API Gateway3.3 结果3.4 总结 3.1 创建Lambda 在Lambda中,我们将使用python3作为代码语言。 步骤图例1、入口2、创建(我们选择使用python3.7)3、IAM权限(…...
08、分析测试执行时间及获取pytest帮助
官方用例 # content of test_slow_func.py import pytest from time import sleeppytest.mark.parametrize(delay,(1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.0,0.1,0.2,0,3)) def test_slow_func(delay):print("test_slow_func {}".format(delay))sleep(delay)assert…...
视频集中存储/智能分析融合云平台EasyCVR平台接入rtsp,突然断流是什么原因?
安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…...
JavaScript 复杂的<三元运算符和比较操作>的组合--案例(一)
在逆向的时候,碰上有些复杂的js代码,逻辑弄得人有点混; 因此本帖用来记录一些棘手的代码,方便自己记忆,也让大家拓展认识~ ----前言 内容: function(e, t, n) {try {1 (e "{" e[0] ? JSON.parse(e) : JSON.parse(webInstace.shell(e))).Status || 200 e.Code…...
uniapp搭建内网映射测试https域名
搭建Https域名服务器 使用github的frp搭建,使用宝塔申请免费https证书,需要先关闭宝塔nginx的反向代理,申请完域名后再开启反向代理即可。 教程 新版frp搭建教程 启动命令 服务器端 sudo systemctl start frps本地 cd D:\软件安装包\f…...
国防科技大博士招生入学考试【50+论文主观题】
目录 回答模板大意创新和学术价值启发 论文分类(根据问题/场景分类)数学问题Efficient Multiset Synchronization(高效的多集同步【简单集合/可逆计数Bloom过滤器】)大意创新和学术价值启发 An empirical study of Bayesian netwo…...
CUDA简介——编程模式
1. 引言 前序博客: CUDA简介——基本概念 CPU是用于控制的。即,host控制整个程序流程: 1)程序以Host代码main函数开始,然后顺序执行。 Host代码是顺序执行的,并执行在CPU之上。Host代码会负责Launch ke…...
Linux 软件安装
目录 一、Linux 1、Linux异常解决 1、JDK安装 1、Linux卸载JDK 2、Linux安装JDK 2、Redis安装 一、Linux 1、Linux异常解决 1、Another app is currently holding the yum lock; waiting for it to exit... 解决办法: rm -f /var/run/yum.pid1、杀死这个应用程序 ps a…...
flask之邮件发送
一、安装Flask-Mail扩展 pip install Flask-Mail二、配置Flask-Mail 格式:app.config[参数]值 三、实现方法 3.1、Mail类 常用类方法 3.2、Message类,它封装了一封电子邮件。构造函数参数如下: flask-mail.Message(subject, recipient…...
【Filament】Filament环境搭建
1 前言 Filament 是一个实时物理渲染引擎,用于 Android、iOS、Linux、macOS、Windows 和 WebGL 平台。该引擎旨在提供高效、实时的图形渲染,并被设计为在 Android 平台上尽可能小而尽可能高效。Filament 支持基于物理的渲染(PBR)&…...
外包干了2个月,技术倒退2年。。。。。
先说一下自己的情况,本科生,20年通过校招进入深圳某软件公司,干了接近4年的功能测试,今年国庆,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…...
使用 python ffmpeg 批量检查 音频文件 是否损坏或不完整
自用工具,检查下载的音乐是否有损坏 或 下载不完整 使用方法,把 in_dir r’D:\158首无损珍藏版’ 改成你自己的音乐文件夹路径 如果发现文件有损坏,则会在命令行打印错误文件的路径 注意,要求 ffmpeg 命令可以直接在命令行调用…...
Django:通过user-agent判断请求是来自移动端还是PC端(电脑端)
第一种思路: 根据博文 Djano的request.META是什么?的研究成果,先判断有无键HTTP_SEC_CH_UA_MOBILE,如果没有,再去按博文 网站如何判断请求是来自手机-移动端还是PC-电脑端?如何让网站能适应不同的客户端&am…...
Linux中ssh远程登录系统和远程拷贝
本章主要介绍ssh远程登录系统和远程拷贝的方法 ssh的基本用法打开远程图形化界面ssh无密码登录和安全操作Windows远程登录远程拷贝 很多时候服务器并没有显示器,我们也不可能每次都通过控制台去管理服务器,这时就需 要远程登录。远程登录到服务器可以通…...
git常用命令小记
(文章正在持续更新中) git init - 在当前目录下初始化一个新的 Git 仓库。 git clone [url] - 克隆远程仓库到本地。 git add [file] - 将文件添加到暂存区。 git commit -m "commit message" - 将添加到暂存区的文件提交到本地仓库。 git pus…...
深入Android S (12.0) 探索Framework之输入系统IMS的构成与启动
文章目录 前言一、输入系统的基本组成部分二、输入系统相关源码分析1、IMS 构建1.1、SystemServer # startOtherServices()1.2、InputManagerService1.3、NativeInputManager # nativeInit()1.4、NativeInputManager1.5、InputManager1.6、InputDispatcher1.7、InputReader1.8、…...
SoC with CPLD and MCU ?
AG32 MCU 产品支持多种接口外设,具备与业界主流产品的兼容性,并内置额外的2K FPGA 可编程逻辑。 产品支持 LQFP-48,LQFP-64,LQFP-100 ,QFN-32等不同封装。其所有可用 IO 都可以任意地进行映射和互换,以灵活…...
基于AWS Serverless的Glue服务进行ETL(提取、转换和加载)数据分析(二)——数据清洗、转换
2 数据清洗、转换 此实验使用S3作为数据源 ETL: E extract 输入 T transform 转换 L load 输出 大纲 2 数据清洗、转换2.1 架构图2.2 数据清洗2.3 编辑脚本2.3.1 连接数据源(s3)2.3.2. 数据结构转换2.3.2 数据结构拆分…...
vuepress-----6、时间更新
# 6、时间更新 基于Git提交时间修改文字时间格式 moment # 最后更新时间 # 时间格式修改 下载库文件 yarn add momentconst moment require(moment); moment.locale(zh-cn)module.exports {themeConfig: {lastUpdated: 更新时间,},plugins: [[vuepress/last-updated,{trans…...
C++ ini配置文件的简单读取使用
ini文件就是简单的section 下面有对应的键值对 std::map<std::string, std::map<std::string, std::string>>MyIni::readIniFile() {std::ifstream file(filename);if (!file.is_open()) {std::cerr << "Error: Unable to open file " << …...
【稳定检索|投稿优惠】2024年经济管理与安全科学国际学术会议(EMSSIC 2024)
2024年经济管理与安全科学国际学术会议(EMSSIC 2024) 2024 International Conference on Economic Management and Security Sciences(EMSSIC 2024) 一、【会议简介】 2024年经济管理与安全科学国际学术会议(EMSSIC 2024),将于繁华的上海城召开。这次会议的主题是“…...
什么是网站?
这篇文章是我学习网站开发,阶段性总结出来的。可以帮助你 通俗易懂 地更加深刻理解网站的这个玩意。 一,网站和网页的区别? 网站是由一个个网页组成。我们在浏览器上面看到的每一个页面就是网页,这些 相关的 网页组成一个网站。…...
pg_stat_replication.state 含义
在PostgreSQL中,pg_stat_replication视图提供了有关连接到主服务器的流式复制进程(备用服务器)的信息。该视图中的一个列是state,它指示复制进程的当前状态。 state列可以具有各种值: startup: This WAL sender 刚开始运行 catc…...
JavaWeb(六)
一、Maven的常用命令 maven的常用命令有:compile(编译)、clean(清理)、test(测试)、package(打包)、install(安装)。 1.1、compile(编译) compile(编译)的作用有如下两点: 1、从阿里云下载编译需要的jar包,在本地仓库也能看到下载好的插件(远程仓库配置的是阿里…...
GPIO的使用--时钟使能含义--代码封装
目录 一、时钟使能的含义 1.为什么要时钟使能? 2.什么是时钟使能? 3.GPIO的使能信号? 二、代码封装 1.封装前完整代码 2.封装结构 封装后代码 led.c led.h key.c key.h main.c 一、时钟使能的含义 1.为什么要时钟使能?…...
最小化安装 Neokylin7.0 用于搭建 Hadoop 集群
文章目录 环境搭建背景虚拟机创建和环境配置安装过程注意事项虚拟机设置软件选择KOUMP系统分区网络和主机名打开以太网,并记录信息配置 IPv4修改主机名 创建用户 hadoop完全分布式搭建-CSDN博客 环境搭建背景 为什么不从hadoop100或者hadoop101开始,而是…...
苍穹外卖面试题-中
8. 如何理解分组校验 很多情况下,我们会将校验规则写到实体类中的属性上,而这个实体类有可能作为不同功能方法的参数使用,而不同的功能对象参数对象中属性的要求是不一样的。比如我们在新增和修改一个用户对象时,都会接收User对象…...
Python 重要数据类型
目录 列表 序列操作 列表内置方法 列表推到式 字典 声明字典 字典基本操作 列表内置方法 字典进阶使用 字典生成式 附录 列表 在实际开发中,经常需要将一组(不只一个)数据存储起来,以便后边的代码使用。列表就是这样的…...
做b2c网站/童程童美少儿编程怎样收费
最近这几年购置的电脑几乎都安装了Windows 10,并且使用UEFI方式启动(UEFI即统一可扩展固件接口,用来定义操作系统与固件之间的软件界面,作为BIOS的替代方案)。UEFI启动和传统的BIOS启动不同,它不再支持实模式启动系统如DOS等。而传…...
住房和城乡建设委员会的官方网站/小程序推广赚佣金平台
更新2015.03.17:我在本文中表达的可访问性问题是错误的,并且是基于误解。 实际上,Shadow DOM和屏幕阅读器不存在此类可访问性问题 Shadow DOM是Web组件规范的一部分,旨在解决困扰某些Web开发的封装问题。 您知道这种事情–如果您构…...
大连建网站策划/网课免费平台
概述 PowerJob是新一代分布式任务调度与计算框架,支持CRON、API、固定频率、固定延迟等调度策略,提供工作流来编排任务解决依赖关系,能让您轻松完成作业的调度与繁杂任务的分布式计算。 为什么选择PowerJob? 当前市面上流行的作…...
网站建设技术/百分百营销软件官网
vcf文件做记录个体或群体突变的文件格式,在生物信息学应用中举足轻重。主流的生物信息分析软件,在处理变异信息时,也基本上需要考虑支持解析或输出vcf格式的文件。本文在介绍vcf文件格式的基本格式的同时,对vcf文件记录的细节进行…...
区块链网站怎么做/培训教育机构
2019独角兽企业重金招聘Python工程师标准>>> yum clean metadata yum clean dbcache yum makecache 转载于:https://my.oschina.net/u/2009816/blog/864641...
曲阜网站建设哪家好/周口网站seo
很多程序员在出去面试的时候都会存在这样一个问题,就是笔试题中对于sql语句的考察,很多关键字的写法忘记了甚至是完全没有用过,但是如果你能百度一下或者看一下之前写的代码又会瞬间想起来,这其实是一个比较尴尬的问题,…...