数据结构与算法简介

一、数据结构定义

狭义的讲,数据结构是专门研究数据存储的问题,数据的存储包含两方面:个体的存储 + 个体关系的存储。

广义的讲,数据结构既包含数据的存储也包含数据的操作,而对存储数据的操作就是算法。

二、算法

数据结构和算法的关系:数据结构是底层,算法是高层。数据结构为算法提供服务,算法围绕数据结构操作。从狭义上看:算法和数据的存储方式密切相关,两者之间密不可分,但是从广义上来说,算法和数据的存储方式无关(泛型思想),一种优秀的算法是于数据的存储的方式无关的,任何存储方式都适用。

算法的的五个基本特性:有穷性,确定性,可行性,输入和输出。一个好的算法应该具有以下特点:正确性,可读性,健壮性,高效性和低存储量需求。

三、数据的存储结构

数据的存储结构基本可以分为两种:

1,线性结构:

数据元素之间只存在一对一的线性关系(简单理解就是可以用一条线将所有数据链起来)。

连续存储(数组)——  特点:需要连续的存储空间

优点:存取速度快。    缺点:插入删除慢,需要连续的存储空间

离散存储(链表)—— 特点:可将数据存储到不同的节点,每个节点存储数据信息和相邻节点地址。

 优点:空间无限制,插入删除很快。   缺点:存取速度慢

线性结构应用1  —— 栈

限制了只能在一端进行插入和删除的特殊线性结构,可以插入删除的一端称为栈顶,另一端称为栈底,可以实现“先进后出”的功能。可应用于进制转换,迷宫求解,实现递归,表达式求解,浏览器历史记录,xml/json的解析,CPU种栈的实现以及程序中方法的执行等。

分类:

静态栈——内部使用数组来实现,动态栈——内部使用链表实现。

线性结构应用2 —— 队列

队列也是一种受限的特殊线性结构,只允许在一端进行插入,另一端进行删除,允许删除的一端称为队头,允许插入的一端称为队尾,特点是先进先出。应用场景主要是在需要公平且经济地对各种资源做管理或分配的场合,例如计算机CPU等内部资源的共享,都需要合理使用队列来进行分配。

2,非线性结构:

数据元素之间不在只存在一对一的关系,每个数据可能与零个或者多个其他数据之间存在关系。常见的有二维数组,多维数组,树,图等。

树——树是一种非线性数据结构,由n个节点组成的有限集合。

树形结构有很多,其中比较常用的有无序树,有序树,二叉树,红黑树,霍夫曼树等,最常用的是二叉树。

二叉树是一种每个节点最多只允许有两个子树节点的树形结构,一般两个子树称为左子树和右子树。严格上来说二叉树不是树的一种特殊形式,主要区别如下:1,树节点的最大度数没有限制,而二叉树限制为二,2,树的节点没有左右之分,而二叉树的节点有左右的区别。

二叉树的遍历,就是按照一定顺序和规则访问二叉树中所有的节点,使每个节点都能被访问一次,且每个节点只能访问一次。二叉树的遍历主要分为3种,先序遍历(首先访问根节点,然后先序遍历左子树,最后先序遍历右子树),中序遍历(先中序遍历左子树,然后访问根节点,最后中序遍历右子树),后序遍历(首先后序遍历左子树,然后后序遍历右子树,最后访问根节点)

图——由顶点的有穷非空集合和顶点之间边的集合组成。

图的方面比较复杂,暂时未深入了解,待学习了解后更新。

 

 

 

你可能感兴趣的:(数据结构)