一、写在前面
你好,我是计算机安禾。
这个专栏,我打算用C语言把常用的数据结构从头实现一遍。从最简单的顺序表,到二叉树、哈希表,大概20多篇。
为什么选C语言?因为C语言足够底层,没有现成的容器可用,你必须自己管理内存、自己操作指针。这个过程虽然麻烦,但学完之后,你对程序底层的理解会深很多。
二、为什么要学这个?
1. 面试要考
不管你是去大厂还是小公司,技术面试基本都会问数据结构和算法。我参加过几次面试,几乎每一轮都有手写代码的环节。提前准备,心里不慌。
2. 代码能跑得更快
同样是存一堆数据,用数组和用链表,在不同场景下性能差别很大。选错了数据结构,程序可能慢几十倍。当你处理的数据量达到百万级的时候,这个问题就很要命了。
3. 看懂源码的底层
很多编程语言的高级特性,底层都是基础数据结构搭起来的。Python的列表是动态数组,字典是哈希表。学了这些,你看源码的时候不会一脸懵。
三、专栏内容安排
我按难度分了几个阶段,从易到难:
| 阶段 | 内容 | 大概篇数 |
|---|---|---|
| 基础 | C语言核心回顾(指针、结构体、内存) | 2-3篇 |
| 线性结构 | 顺序表、单链表、双向链表 | 5-6篇 |
| 受限线性表 | 栈、队列 | 3-4篇 |
| 树形结构 | 二叉树、二叉搜索树、AVL树 | 5-6篇 |
| 排序 | 快排、归并、堆排等常用排序 | 4-5篇 |
| 查找 | 二分查找、哈希表 | 2-3篇 |
| 图 | 图的遍历、最短路径 | 3-4篇 |
每个知识点我会先讲原理,再手写代码,最后给一个综合案例。
四、开发环境搭建
代码我主要在Windows下写,用Dev-C++和VS Code都测试过。你选一个就行。
方案一:Dev-C++(新手推荐)
轻量、简单、不用配置。
-
去官网或镜像站下载Dev-C++ 5.11
-
安装时语言选中文,一路下一步
-
打开后新建源文件,写代码,按F11编译运行
方案二:VS Code
功能强大,但需要自己配编译器。
-
下载VS Code并安装
-
在扩展里搜索"C/C++",安装微软官方的插件
-
安装编译器:
-
Windows:装MinGW-w64,配环境变量
-
Mac:终端执行
xcode-select --install -
Linux:
sudo apt install gcc
-
-
按网上教程配置tasks.json(第一次配稍微麻烦点)
验证一下
新建一个test.c,写几行代码:
c
#include <stdio.h>
int main() {
printf("环境没问题\n");
return 0;
}
能正常输出,就说明环境好了。
五、你需要的基础
-
C语言基本语法:变量、循环、分支、函数
-
指针的基本概念:知道
*和&的含义 -
结构体的基本用法:定义
struct和访问成员
如果这些还不熟,建议先花一周补一下C语言基础,不然看代码会比较吃力。
六、怎么学效果最好
1. 自己敲一遍
每一篇的代码,我都建议你手动敲一遍。复制粘贴学不到东西,敲的过程中你会遇到各种小问题,解决这些问题才是真正的收获。
2. 画图
链表、树这些东西,光看代码很抽象。拿张纸画一画,指针指到哪里、节点怎么连接,一下子就清楚了。
3. 多问为什么
为什么链表插入比数组快?为什么二叉树查找比链表快?多问几个为什么,理解会更深。