python数据结构与算法学习路线及系列文章汇总(持续更新。。)

本文详细介绍了从零开始学习数据结构与算法的完整路径,涵盖链表、栈、队列、数组、字符串、树、排序、查找、图、动态规划、贪心算法等核心主题,为机器学习项目奠定坚实的理论基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

虽然是用python搞机器学习的大项目,还是要从零开始学习数据结构那一套理论。不知不觉数据结构及算法系列的学习及LeetCode刷题已经一大堆,现对此汇总。

如下是一套比较合理的完整的学习路径:

1)数据结构与算法的理论,包括复杂度的思想,从线性表开始(链表,栈和队列),然后是数组和字符串的初级理论和题目(双指针);查找算法中深刻理解二分查找及哈希查找。

2)接下来打算学习树及二叉树相关姿势,树是最重要的数据结构,基础是遍历运算等;然后二叉搜索树、平衡二叉树等的基本知识,属于最重要的查找算法;

3)然后是排序的各种方法,需了解其原理和实现,复杂度及稳定性,可做的题目并不多;

至此基础知识已打好,可以应对基本的面试题目了。

4)进一步加深学习,可以学习动态规划/贪心/回溯算法思想,此时可以解决LeetCode许多难题了,DP在LeetCode中净是难题;

5)最后学习图算法及一些高级的问题,图算法在各教材中都会介绍,主要是存储遍历、连通性、最短路径、最小生成树等问题,也可以更深入的学习。

6)学习一些特殊的、高级的数据结构及算法,阅读畅销的算法设计相关书籍学习一些思想方法和算法的trick。

 

1  链表

1.1 python数据结构之链表——功能实现

1.2 python数据结构之链表——倒数第k结点及链表合并

1.3 python数据结构之链表——链表右移/链表分割/链表逆序

1.4 python数据结构之链表——移除重复项及带随机指针的链表复制

1.5 python数据结构之链表——带环链表及交叉链表(双指针法)

1.6 python数据结构之双向链表/循环链表——以OrderedDict数据结构为例

2  栈和队列

2.1 python数据结构之栈和队列——功能实现

2.2.1  python数据结构之栈——应用(1)括号匹配及后缀表达式

2.2.2  python数据结构之栈——应用(2)中缀表达式计算与函数调用栈

2.2.3  python数据结构之栈——应用(3)Leetcode题目解析

2.3 python数据结构之队列——应用

3  数组

3.1  双指针

3.1.1  python数组双指针算法1——求和问题(LeetCode 2sum & 3sum & 4sum)

3.1.2 python数组双指针算法2——元素交换(LeetCode Remove Duplicates from Sorted Array & Remove Element)

3.1.3 python数组双指针算法3——滑动窗口(LeetCode Subarray Product Less Than K & Container With Most Water)

3.2  其他

3.2.1 LeetCode数组类题目选做(1)—— First Missing Positive & Majority Element & Product of Array Except Self

3.2.2 LeetCode数组类题目选做(2)—— Spiral Matrix & Rotate Image & Set Matrix Zeroes

4  字符串

4.1 python数据结构之串——概述和基本算法

4.2 基础题目/字符串解析

4.2.1 LeetCode字符串类题目选做(1) —— Roman to Integer & Text Justification

4.2.2 LeetCode字符串类题目选做(2)—— Length of Last Word & Reverse Words in a String

4.2.3 LeetCode字符串类题目选做(3) —— String to Integer (atoi) & Integer to English Words

4.3 LeetCode字符串题目选做之回文——Valid Palindrome & Shortest Palindrome

4.4 双指针/哈希等其他应用

4.4.1 python 字符串双指针/哈希算法1—— Reverse Vowels of a String & Longest Substring Without Repeating Characters

4.4.2 python 字符串双指针/哈希算法2 —— Substring with Concatenation of All Words & Group Anagrams

4.4.3 python 字符串双指针/哈希算法3 —— Minimum Window Substring & Smallest Range

 

5  递归

5.1 python数据结构与算法之算法思想概述

5.2 递归算法及设计思想

6 查找

6.1 查找算法概述

6.2.1 python二分查找算法及LeetCode题目(1) —— Find First and Last Position & Find Peak Element

6.2.2 python二分查找算法及LeetCode题目(2)之旋转的数组 —— Search in Rotated Sorted Array

6.2.3 python二分查找算法及LeetCode题目(3)之二维数组 —— Search a 2D Matrix

 

7 树

7.1 树及二叉树的概念及存储结构

7.2 二叉树的基本运算及遍历的python实现

7.3.1 二叉树遍历的应用及LeetCode题目解析(1)

7.3.2 python 二叉树层次遍历应用及LeetCode题目解析(2)

7.4.1 python二叉树路径问题及LeetCode题目解析(1)

7.4.2 python二叉树路径问题及LeetCode题目解析(2)

7.5 二叉查找树(BST)及平衡二叉树(AVL)的概念及基本运算

7.6.1 (python)BST LeetCode题目 —— Minimum Absolute Difference in BST & Convert BST to Greater Tree

7.6.2 (python)AVL LeetCode题目 及 AVL结点插入操作详解

7.6.3 (python)BST LeetCode题目 —— Delete Node in a BST & Recover Binary Search Tree

7.7.1 外查找之 B-tree、B+tree 认识

7.7.2 (转载) B树、B+树、B*树(1)

7.7.3 (转载) B树、B+树、B*树(2)

7.8.1 带你学习红黑树(1)

7.9 哈夫曼树(Huffman Tree)

7.10.1 优先队列及堆

7.10.2 (python)堆的应用及Leetcode题目解析

7.11.1 Trie 树(字典树)简介与实现

7.12.1 线段树原理及应用(上)

 

8 排序

8.1.1 排序算法概述及python基本实现(上)

8.1.2 排序算法概述及python基本实现(下)

8.2.1 (python)排序算法之链表排序LeetCode题目(1) —— Sort List & Merge k Sorted Lists

8.2.2 (python)排序算法及LeetCode题目(2) —— Insert Interval & Contains Duplicate III & Wiggle Sort II

8.2.3 python排序LeetCode题目(3) —— K Pairs with Smallest Sums & Kth Smallest Element in a Sorted Matrix

 

9 图

9.1 数据结构之图的基本概念及存储结构

9.2 图的遍历

9.2.1 图的存储与遍历

9.2.2 图的遍历LeetCode题目 —— Find the Town Judge & Clone Graph & Keys and Rooms

9.2.3 图的遍历及路径 —— Reconstruct Itinerary & All Paths From Source to Target

9.3 最小生成树算法

9.4 最短路径算法

9.5 拓扑排序和关键路径

9.5.1 拓扑排序及LeetCode题目 —— Course Schedule II & Minimum Height Trees

9.5.2 关键路径

 

10 动态规划及贪心算法

10. 1 动态规划及贪心算法概述

10.2 动态规划算法套路及空间优化 —— Climbing Stairs & Unique Paths

10.3 动态规划数组类题目

10.3.1 (python) 动态规划数组类LeetCode题目 —— Minimum Path Sum & Triangle & Maximum Product Subarray

10.3.2 (python) 动态规划数组类LeetCode题目 —— Decode Ways & Range Sum Query 2D

10.3.3 (python) 动态规划数组类LeetCode题目 —— Dungeon Game & Frog Jump

10.4 动态规划专题应用

10.4.1 (python) 动态规划专题之最长递增子序列 —— Longest Increasing Subsequence & Russian Doll Envelopes

 10.4.2 (python) 动态规划专题之换零钱 —— Coin Change & Perfect Squares

10.4.3 (python) 动态规划专题之股票买卖 —— Best Time to Buy and Sell Stock

10.5 动态规划字符串类题目

10.5.1 (python) 动态规划字符串类LeetCode题目 —— Edit Distance & Regular Expression Matching

10.5.2 (python) 动态规划字符串类LeetCode题目 —— Interleaving String & Distinct Subsequences

10.6 贪心算法详解及LeetCode题目

 

11 其他算法思维

 

### 数据结构学习路径建议 数据结构的学习是一个循序渐进的过程,需要从基础概念入手并逐步深入实践。以下是针对数据结构学习的一条清晰路径和具体建议: #### 1. **基础知识准备** 在正式进入数据结构之前,需掌握一门编程语言的基础语法,例如 C/C++、Java 或 Python。这一步骤是为了确保能够顺利实现数据结构中的逻辑[^1]。 #### 2. **理论学习阶段** 通过阅读书籍或在线资料了解常见的基本数据结构及其特性。推荐的内容包括但不限于数组、链表、栈、队列、哈希表、树(尤其是二叉树)、图等。这些内容可以通过图文并茂的方式帮助初学者快速建立直观印象[^3]。 #### 3. **动手实践环节** - 使用具体的例子来练习每种数据结构的操作方法,比如如何创建一个简单的单向链表或者双向循环链表。 - 编写小型的应用程序验证自己的理解和记忆效果,注意细节处理如边界条件判断等容易被忽略的地方[^1]。 ```python class Node: def __init__(self, data=None): self.data = data self.next = None def insert_at_end(head, value): new_node = Node(value) if head is None: return new_node current = head while(current.next !=None): current=current.next current.next=new_node return head ``` 此代码片段展示了如何在一个已存在的单链表末端添加新节点的功能实现过程[^2]。 #### 4. **算法结合应用** 当熟悉了几种典型的数据结构之后,可以尝试解决一些经典的算法题目,这样不仅巩固了前面学到的知识点还能提高解决问题的能力。可以从简单的问题开始逐渐过渡到复杂场景下的综合运用[^3]。 #### 5. **持续深化拓展** 随着技能水平的增长,探索更高级别的主题诸如平衡二叉查找树(BSTs),堆(heap), 并发控制机制下共享内存管理等问题将会成为下一步目标[^2]。 --- ###
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值