浅谈数据结构与算法

数据结构的定义

数据结构,data structure,定义是这样的:

是指所有数据元素以及它们之间的关系,可以看作是相互之间存在着某种特定关系的数据元素的集合。

还有一种定义:

按某种逻辑关系组织起来的一批数据(或称带结构的数据元素的集合)应用计算机语言并按一定的存储方式把它们存储在计算机的存储器中,并在其上定义了一个运算的集合。

看了定义,可能还不清楚,其实数据结构通常可以分为以下3个方面:

  1. 逻辑结构:集合,线性,树形,图形

  2. 存储结构:顺序,链式,索引,哈希/散列

  3. 在此结构上的运算

 数据的逻辑结构其实是人赋予它的,是抽象的,比如图,不可能用图形结构的存储器来存放图吧(事实上,存储器内部可能类似于楼层,是一层一层的,不过就连这个比喻可能都是为了便于理解)。
 似乎还不清楚,,,比如在学习图的时候,需要编写程序,创建一个图,怎么办?
 线性表还好,树勉强还能写出来,它们都能用链表之类的表示出来,而且逻辑结构和存储结构似乎还有几分相像,图呢?结点之间的关系,有向和无向怎么表示,单纯用链表还行吗,就算用链表,又该如何表示?
 最后你会发现,书上用矩阵表示结点关系(这里说的是邻接矩阵表示图,还有邻接表),树用矩阵吗?没有,因为树中多数结点的前驱结点只有一个(或许是这原因吧,,),图就不一样了,图的结点关系错综复杂,还能用链式吗?能,多个。所以,在逻辑上很容易表示出来的图(逻辑结构),在计算机上只能如此抽象的表示,即矩阵和多个链表(存储结构)。
 因此,逻辑结构和数据的存储无关,独立于计算机,而存储结构是逻辑结构用计算机语言的实现,它依赖于计算机语言。一种逻辑结构可以选择用多种存储结构来表示它,比如,二叉树,我们可以链式储存,当然也可以顺序存储,在链式存储中,还可分为孩子链和孩子兄弟链。为了全面的反映一个数据的逻辑结构,它在存储器中的映象包括两方面内容,即数据元素之间的信息和数据元素之间的关系。不同数据结构有其相应的若干运算。数据的运算是在数据的逻辑结构上定义的操作算法,如检索、插入、删除、更新和排序等。

有一句话是这么说的:任何一个算法的设计取决于选定的数据逻辑结构,而算法的实现依赖于所采用的存储结构

此外,运算不同,也会造成数据结构不同,例如队列与栈。

以上,我们就弄明白了什么是数据结构。

那么,为什么要学习数据结构呢?为什么有这么多数据结构?
下面有个回答,还不错:
https://www.zhihu.com/answer/44895115

猜你喜欢

转载自blog.csdn.net/rakish_wind/article/details/80292622