【数据结构与算法】第1篇:为什么要学习数据结构与算法?专栏导学

一、写在前面

你好,我是计算机安禾。

这个专栏,我打算用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++(新手推荐)

轻量、简单、不用配置。

  1. 去官网或镜像站下载Dev-C++ 5.11

  2. 安装时语言选中文,一路下一步

  3. 打开后新建源文件,写代码,按F11编译运行

方案二:VS Code

功能强大,但需要自己配编译器。

  1. 下载VS Code并安装

  2. 在扩展里搜索"C/C++",安装微软官方的插件

  3. 安装编译器:

    • Windows:装MinGW-w64,配环境变量

    • Mac:终端执行xcode-select --install

    • Linux:sudo apt install gcc

  4. 按网上教程配置tasks.json(第一次配稍微麻烦点)

验证一下

新建一个test.c,写几行代码:

c

复制代码
#include <stdio.h>

int main() {
    printf("环境没问题\n");
    return 0;
}

能正常输出,就说明环境好了。


五、你需要的基础

  • C语言基本语法:变量、循环、分支、函数

  • 指针的基本概念:知道*和&的含义

  • 结构体的基本用法:定义struct和访问成员

如果这些还不熟,建议先花一周补一下C语言基础,不然看代码会比较吃力。


六、怎么学效果最好

1. 自己敲一遍

每一篇的代码,我都建议你手动敲一遍。复制粘贴学不到东西,敲的过程中你会遇到各种小问题,解决这些问题才是真正的收获。

2. 画图

链表、树这些东西,光看代码很抽象。拿张纸画一画,指针指到哪里、节点怎么连接,一下子就清楚了。

3. 多问为什么

为什么链表插入比数组快?为什么二叉树查找比链表快?多问几个为什么,理解会更深。

相关推荐
西柚小萌新12 分钟前
【LLM&&AI应用开发 八股文】--4.3.Agent智能体(下)
java·开发语言·数据库
北极有牛15 分钟前
cpp学习笔记--常量指针
java·开发语言·算法
GPU实战笔记15 分钟前
云端 GPU 训练的账户余额提醒:它能说明什么,不能说明什么?
深度学习·算法·成本管理·gpu云计算·云端训练
Titan202433 分钟前
MySQL访问个人学习笔记
笔记·学习·mysql
半杯咖啡半行码36 分钟前
C++ 编程与 STL 模板:从泛型编程到内存安全详解
开发语言·c++
浮链序36 分钟前
怎么证明"你这个模型是偷我的"——把蒸馏变成取证工具
算法·安全·llm
小O的算法实验室37 分钟前
IEEE TMC,面向异构物联网的多目标量子行为拓扑优化算法
算法
caoerzhong1 小时前
JeeWMS 开源 WMS 部署避坑指南:Java 仓库管理系统的环境基线、四类根因与可复现交付
java·开发语言·开源
时间的拾荒人1 小时前
Qt 界面优化:绘图详解 —— 从基础图形到图片处理
开发语言·qt·面试
MayZork1 小时前
Qt 文件操作:QSaveFile 与 QTemporaryFile(含 QTemporaryDir)实战
开发语言·qt