vim 使用指南

vim 简介

vim 是一个功能强大的全屏幕文本编辑器, 是 Linux/UNIX 上最常用的文本编辑器, 它的作用是建立、编辑、显示文本文件。

vim 没有菜单,只有命令。

vim 学习路径

1、idea/vscode 插件,找个 vim cheat sheet 打印下来。学会插入、换行、保存、替换之类的常见操作;

2、更复杂的操作,比如数千、录制宏之类的,基本脱离鼠标

3、spacevim / lunarvim 这种集成好各种插件的 “IDE”,替代 vscode ,偶尔翻《vim 使用指南》或者搜索寻找提高效率的技巧;

4、添加修改插件,对 lunarvim 进行修改;

5、从零折腾自己的 vim 环境。

1 和 2 我用了两年时间,主要是懒,没有继续深入的动力,所以进度就慢。现在在第 4 步加上一些定制,基本上也有第 5 步的能力,但是暂时不想继续折腾了。

现在回头看,我强烈建议缩短学习过程,1 和 2 的步骤用 1~2 周时间去刻意练习快速进入步骤 3 ,这个时候就可以完全抛弃 vscode 或者 idea 了

重点:强烈建议去刻意练习 vim ,鼠标丢一边,拔掉方向键。更早学会,就能更早的提高生产力。

More

LeetCode刷题指南

知识点

  • 时间 / 空间复杂度分析

  • 数据结构

    • 数组
    • 字符串
    • 队列
    • 链表
    • 集合
    • 哈希表
      • 二叉树
      • 多叉树
      • 字典树
  • 算法

    • 排序
    • 双指针
    • 查找
    • 分治
    • 动态规划
    • 递归
    • 回溯
    • 贪心
    • 位运算
    • DFS
    • BFS

面试无非就那么几个重点:树、动态规划、深度 / 广度优先搜索、链表、数组、排序、栈、队列、哈希、字符串等。

More

「图-拓扑排序」C语言实现

示意图

待补充。。。

结构定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/*------------------------- 图-邻接矩阵结构定义 ------------------------*/

#define MAXVEX 100

typedef char VertexType;
typedef int EdgeType;

// 边表节点
typedef struct edgeNode {
int adjvex;
// EdgeType weight; // 拓扑排序,不需要边表节点的权值域weight
struct edgeNode * next;
} EdgeNode;

// 带入度的顶点表节点
typedef struct vertex {
VertexType data;
EdgeNode * firstedge;
int in; // 拓扑排序,顶点表节点增加入度域in
} VertexNode;

typedef VertexNode AdjList[MAXVEX];

// 最终定义图的邻接表结构
typedef struct {
AdjList adjList;
int numVex, numEdge;
} ALGraph;

/*------------------------- 图-邻接矩阵结构定义 ------------------------*/

重点

拓扑排序目的:

在各为各的前提条件的无环复杂网络中,如何在不违背所有前提条件的情况下,把各个事件依次排好序,这就是拓扑排序的目的。

拓扑排序思路:

依次找出入度为0(即没有前提条件了)的顶点(事件),然后执行该事件,并删除以该点为弧尾的弧(即弧头顶点入度减1)。

为了避免每次都要循环遍历查找入度是否为0,则采用栈,将入度为0的顶点保存到栈中,后续从栈中直接取出,无需遍历查找。

More

「图-最短路径(Dijkstra算法)」C语言实现

示意图

待补充。。。

结构定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/*------------------------- 图-邻接矩阵结构定义 ------------------------*/

#define MAXVEX 100 // 最大顶点数
#define INFINITY 65535 // 用整数最大值代表无穷大

typedef char VertexType; // 顶点数据类型
typedef int EdgeType; // 边/弧权值数据类型

// 图的邻接矩阵存储结构
typedef struct {
VertexType vex[MAXVEX]; // 顶点数组
EdgeType edge[MAXVEX][MAXVEX]; // 边权值的二维数组
int numVex, numEdge; // 顶点数、边数
} AMGraph;

/*------------------------- 图-邻接矩阵结构定义 ------------------------*/


bool visited[MAXVEX]; // 标记数组

typedef int ShortestPathLength[MAXVEX]; // 存储V0到各顶点的最短距离
typedef int PreVex[MAXVEX]; // 存储V0到各顶点最短路径的最后一个前驱节点,依据前驱节点可依次反推出最短路径走法

More

「图-最小生成树」C语言实现

示意图

待补充。。。

结构定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/*------------------------- 图-邻接矩阵结构定义 ------------------------*/

#define MAXVEX 100 // 最大顶点数
#define INFINITY 65535 // 用整数最大值代表无穷大

typedef char VertexType; // 顶点数据类型
typedef int EdgeType; // 边/弧权值数据类型

// 图的邻接矩阵存储结构
typedef struct {
VertexType vex[MAXVEX]; // 顶点数组
EdgeType edge[MAXVEX][MAXVEX]; // 边权值的二维数组
int numVex, numEdge; // 顶点数、边数
} AMGraph;

/*------------------------- 图-邻接矩阵结构定义 ------------------------*/


bool visited[MAXVEX]; // 标记数组

More

C++实战项目推荐

初学者一定要注意编程能力是写出来的,不管你去写啥,只要不断的写,你就会感觉到编程能力的提升

编程本质上还是一项技能,熟能生巧在这里一定是适用的。

当你写到1w、10w行、几十万行的时候,一定会感受到量变到质变

More

「图-深度&广度优先遍历(邻接表)」C语言实现

示意图

待补充。。。

结构定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/*---------------------------- 图-邻接表结构定义 -----------------------------*/

#define MAXVEX 100 // 最大顶点数

typedef char VertexType; // 顶点数据类型
typedef int EdgeType; // 边/弧权值数据类型

// 首先定义边表节点,后续顶点表节点需要用
typedef struct edgeNode {
int adjvex; // 存储某顶点的邻接点在顶点表中的下标
EdgeType weight; // 存储权值
struct edgeNode * next;
} EdgeNode;

// 定义顶点表节点
typedef struct vertexNode {
VertexType data;
EdgeNode * firstEdge;
} VertexNode;

// 有了顶点表节点构成的数组,即确定了邻接表
// 类似于有了头指针,即确定了链表一样
typedef VertexNode AdjList[MAXVEX]; // 在这里为顶点表分配了内存,就无需动态分配了

// 最终定义图的邻接表结构
typedef struct {
AdjList adjList;
int numVex, numEdge;
} ALGraph;

//上面可以改为:
// typedef struct {
// VertexNode adjList[MAXVEX];
// int numVex, numEdge;
// } ALGraph;

/*---------------------------- 图-邻接表结构定义 -----------------------------*/


bool visited[MAXVEX]; // 标记数组

重点

深度优先:类似于树的前序遍历

广度优先:类似于树的层序遍历(借助队列实现)

More