1 揭开数据结构神奇的面纱
1.1 初识数据结构
在C++的标准库模板(Standard Template Library,STL)课程上,我初次结识了《数据结构》。C++语言提供的标准库模板是面向对象程序设计与泛型程序设计思想相结合的典范。所谓的泛型编程就是编写不依赖于具体数据类型的程序。
STL容器的底层实现依赖于数据结构。向量(vector)是一种顺序容器,可视为一种动态数组。集合(set)和映射(map)的底层是用红黑树(Red Black Tree)实现的。无序集合(unordered set)和无序映射(unordered map)的底层是哈希表(hash table)实现的。从上面的分析可以看出,STL容器的实现依赖了大量的数据结构。
作为面向对象程序设计的经典,C++的标准库模板封装了大量的数据结构。数据结构知识的匮乏可能会导致STL理解的困难。笔者认为,在学习STL这一部分的内容之前,读者应该对数据结构有一个基本的认识。
1.2 数据结构的学习
在搜索引擎上搜索“如何学习数据结构”,网友不是给你推荐五花八门的书籍,就是给你推荐各种刷题技巧。对于一个初学者来说,最重要的是掌握数据结构的基本原理。如若拘泥于各种繁杂是数学推导,那么你在学习了几节之后变会觉得索然无味,书籍也自然而然地束之高阁了。
对于初学者,笔者比较推荐通过网络视频来学习。笔者比较推荐电子科技大学戴波老师的数据结构与算法慕课课程,该课程讲解深入浅出,并且给出了大量的实现代码。想了解更多数据结构知识,推荐读者阅读数据结构与算法教程。
在学习完成基础课程之后,读者可以在解锁leetcode刷题网站,强烈建议读者从探索板块的数据结构专栏开始刷题。通过大量的联系,我相信读者对数据结构的理解一定会更加深入,编程能力亦能极大地提高。
1.3 数据结构知识体系
数据结构是带有结构的数据原始的集合。数据结构有两大用途:(1)用于存放要处理的数据;(2)用于实现的算法策略。数据结构可由一个四元组组成:
上式表示数据结构由数据原始、数据原始之间的逻辑关系、逻辑关系在计算机中的存储表示及所规定的操作组成。
按照逻辑结构,数据结构可以分为线性结构、树形结构、图形结构和结合结构等。下图为逻辑结构分类示意图。

按照存储结构,数据结构可分为顺序存储、链式存储和哈希存储等。顺序存储结构:把逻辑上相邻的元素存储在物理位置相邻的存储单元中。链式存储结构:在数据元素中添加一些地址或辅助结构,用于存储数据原始之间的关系。下图反映了数据的逻辑结构和存储结构之间的联系。

数据结构的操作,主要包括查找、插入、删除、遍历和排序等。


喜欢的朋友记得点赞、收藏、关注哦!!!