【数据结构与算法】第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. 多问为什么

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

相关推荐
wearegogog12313 小时前
光伏发电系统最大功率跟踪(MPPT)算法 Matlab 实现指南
开发语言·算法·matlab
Tisfy13 小时前
LeetCode 3783.整数的镜像距离:数学
数学·算法·leetcode·题解
小小码农Come on13 小时前
QML怎么使用C++多线程编程
开发语言·c++
水蓝烟雨13 小时前
0010.三数之和
数据结构·算法·leetcode
努力进修13 小时前
【java-数据结构】Java优先级队列揭秘:堆的力量让数据处理飞起来
java·开发语言·数据结构
廋到被风吹走13 小时前
【LangChain4j】Java 生态中最灵活、功能最强大的纯 Java 大模型应用开发框架(支持声明式@AiService与复杂RAG/Agent)
java·开发语言·python
艾克杏13 小时前
初学Java之范型
java·开发语言
heartbeat..13 小时前
java中常用的几种加密方式
java·开发语言
小碗羊肉13 小时前
【从零开始学Java | 第三十九篇】 打印流
java·开发语言
晔子yy13 小时前
[JAVA探索之路]带你手写多线程实现生产者-消费者模型
java·开发语言