任何一个有志于从事IT领域的人员来说,数据结构(DataStructure)是一门和计算机硬件与软件都密切相关的学科,它的研究重点是在计算机的程序设计领域中探讨如何在计算机中组织和存储数据并进行高效率的运用,涉及的内容包含:数据的逻辑关系、数据的存储结构、排序算法(Algorithm)、查找(或搜索)等。
我们举一个形象的例子来理解数据结构的作用:
战场:程序运行所需的软件、硬件环境
敌人:项目或模块的功能需求
指挥官:编写程序的程序员
士兵和装备:一行一行的代码
战术和策略:数据结构
没有战术,打仗事倍功半
有战术,打仗事半功倍
2、数据结构的应用计算机的主要工作就是把数据(Data)经过某种运算处理转换为实用的信息(Information)。具体介绍一些数据结构的应用:
1)树形结构
树形结构是一种相当重要的非线性数据结构,广泛运用在人类社会的族谱、机关的组织结构、计算机的操作系统结构、平面绘图应用、游戏设计等方面。
四叉树示意图
地形与四叉树的对应关系
3、Pascal之父上面我们提到的数据结构和算法是程序设计实践中最基本的内涵。程序能否快速而高效地完成预定的任务,取决于是否选对了数据结构,而程序是否能清楚而正确地把问题解决,则取决于算法。算法是计算机处理信息的本质,因为计算机程序本质上是一个算法来告诉计算机确切的步骤来执行一个指定的任务。
所以大家认为:“Algorithms+DataStructures=Programs”(出自:Pascal之父NicklausWirth),数据结构只是静态的描述了数据元素之间的关系。高效的程序需要在数据结构的基础上设计和选择算法。
总结:算法是为了解决实际问题而设计的,数据结构是算法需要处理的问题载体。
4、数据结构的研究对象4.1、数据间的逻辑结构数据的逻辑结构指反映数据元素之间的逻辑关系的数据结构,其中的逻辑关系是指数据元素之间的前后件关系,而与他们在计算机中的存储位置无关。
逻辑结构包括:集合结构、线性结构、树形结构、图形结构。
4.1.1集合数据元素之间只有“同属于一个集合”的关系4.1.2线性关系数据元素之间存在一个对一个的关系
对应Java中的线性表:顺序表、链表、栈、队列
4.1.3树形结构数据元素之间存在一个对多个的关系对应Java中的树。比如:二叉树4.1.4网状结构(或图状结构)数据元素之间存在多个对多个的关系对应Java中的图4.2数据的存储结构(或物理结构)数据的存储结构(或物理结构)指数据的逻辑结构在计算机存储空间的存放形式。
数据的存储结构是数据结构在计算机中的表示(又称映像),它包括数据元素的机内表示和关系的机内表示。由于具体实现的方法有顺序、链接、索引、散列等多种,所以,一种数据结构可表示成一种或多种存储结构。
数据元素的机内表示(映像方法):用二进制位(bit)的位串表示数据元素。通常称这种位串为节点(node)。当数据元素有若干个
数据项组成时,位串中与个数据项对应的子位串称为数据域(datafield)。因此,节点是数据元素的机内表示(或机内映像)。
关系的机内表示(映像方法):**数据元素之间的关系的机内表示可以分为顺序映像和非顺序映像,常用两种存储结构:顺序存储结构和链式存储结构。顺序映像借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系。非顺序映像借助指示元素存储位置的指针(pointer)来表示数据元素之间的逻辑关系。
5、参考书籍数据结构与算法分析Java语言描述(第2版)[美]卡拉罗(Carrano,F.M.)著金名,等译
大话数据结构(作者:程杰著)
二、真实结构在内存中真实存在的,用来存放多个数据的内存结构。
线性表之顺序表(或静态数据结构):数组(Array)、ArrayList
线性表之链表(或动态数据结构):LinkedList
三、抽象结构(ADT)栈(Stack)队列(Queue)树(Tree)图其他散列表(Hash),堆(Heap)预览时标签不可点