您的位置:首页 > 理论基础 > 数据结构算法

数据结构与算法目录

2016-12-01 17:40 183 查看

前言:

数据结构算法系列先看这里,有助于你更好地获取内容。

首先明白一个问题:为什么要研究数据结构?

    这是因为所有的程序本质上是对数据进行处理,如何高效的处理数据,这依赖于数据本身的结构(如类型(整型、浮点型等)、维数、是否为复杂类型(结构体类型、类类型)等)以及数据之间的逻辑关系(线性、非线性等)。我们所学的数据结构这门课程就是研究这些内容的,只有弄清楚了这些,我们才可以用高效的算法与之结合,产生高效率的程序。掌握好数据结构的内容也是一个程序员的基本功,特别对于c/c++程序员。

    数据结构离不开算法,设计好的数据结构就是为了让算法顺利方便的实施。因此,此系列也涉及不少常见算法,以加深对数据结构的理解和应用。

我想说:一个没有研究过数据结构的c/c++程序员,不是一个合格的c/c++程序员。

常见用语解释

逻辑结构:描述的是数据元素之间的逻辑关系,如线性和非线性。

物理结构:描述的是数据元素在计算机存储器上的存储安排,也叫做存储结构。如顺序存储,链式存储。

稳定性:判断一个排序算法稳定性的根据很简单:相同的元素在排序后的前后位置关系应该不变,若发生了改变,则表明此算法是不稳定的。
数据结构:一种存储和组织数据的方式,旨在便于访问和修改。没有一种单一的数据结构对所有的用途均有效,故重要的是了解该数据结构类型的特点和使用场景。
线性结构:唯一前驱、唯一后继,反映一种线性关系。
树形结构:唯一前驱、多个后继,反应一种层次关系。
图结构:前驱个数和后驱个数都不限制,反应一种网状关系。
时间复杂度、空间复杂度(这两个是必须理解的)。
O(1)表示时间复杂度不依赖于数据规模n,即复杂度是一常数。
我们常见的

,其实是

,这是一种约定俗成的写法,并且对任何不为1的a,都有

是O(

)的。


它比线性n增长慢。


的增长率低于二阶

,但高于一阶n。
指数规模比任何的多项式的如(

)都快。

说明

随着内容增多,本文会相应增加一些目录和索引,以方便你更好地查找。
数据结构与算法的内容已经独立成为一个专栏:数据结构与算法
特别地,提取出其中的算法内容独立成为一个专栏,如果你专注于算法,请直接关注经典算法揭秘专栏。

数据结构与算法目录

导入:约瑟夫问题的数组解法

一、数据结构基础篇

链表

单链表,单循环链表,约瑟夫问题
链表常见操作:逆置(反转)
链表常见操作:有序链表合并去重
链表常见操作:环、倒数第k个、相交
链表的应用:单元多项式的加法、减法、乘法

栈和队列

栈的实现:顺序栈
栈的实现:链式栈
栈的应用:解析算术表达式
前缀、中缀、后缀表达式

队列的实现:顺序队列
队列的实现:链式队列
队列的应用:优先队列
队列的应用:双端队列


串的匹配:朴素匹配&KMP算法



树、二叉树基础
二叉树
二叉搜索树
二叉树前序、中序、后序遍历非递归写法的透彻解析


哈夫曼树

图论基础
图的实现:邻接矩阵
图的实现:邻接表
图的遍历:深度优先、广度优先
拓扑排序
单源最短路径:Dijkstra算法
点对之间最短路径:Floyd算法
最小生成树:Prim算法
最小生成树:Kruskal算法

二、排序

插入排序

插入排序:直接插入、交换插入、折半插入
插入排序:二路插入
插入排序:表插入
插入排序:表折半插入
插入排序:希尔排序

选择排序

选择排序:简单选择、树形选择
选择排序:堆排序

交换排序
交换排序:冒泡排序
交换排序:快速排序

归并排序
归并排序:二路归并

索引排序

索引排序

线性排序
计数排序
基数排序
桶排序

外排序

多路归并

三、检索

顺序检索
二分检索
差值查找
位图法

所有内容的目录

CCPP Blog 目录

有任何疑问和建议,欢迎各位留下评论,希望不吝赐教。
本博客长期更新,你的建议会及时反映到博客中。期待你的精彩评论!多谢。
For a programmer,your charm derives from your code.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: