数据结构

指同一数据元素类中各数据元素之间存在的关系。

分别为逻辑结构,存储结构(物理结构)和数据的运算。

一:逻辑结构:  

  逻辑结构是从具体问题抽象出来的数据模型,是描述数据元素及其关系的数学特性的,有时就把逻辑结构简称为数据结构。

  逻辑结构可以把数据结构分成线性结构和非线性结构。

    ♦线性结构:顺序存储结构、链式存储结构。

    ♦非线性结构:

二:存储结构:

  存储结构分四类:顺序存储、链接存储、索引存储、散列存储。

一:顺序存储结构:

  它是把逻辑上相邻的结点存储在物理位置相邻的储存单元里,结点间的逻辑关系由存储单元的邻接关系来体现,通常借助于程序设计语言中的数组来实现。      

特点:

1、随机存取表中元素。

2、插入和删除操作需要移动元素。

二:链式存储结构:(单向,双向)

  它不要求逻辑上相邻的结点在物理位置上亦相邻,结点间的逻辑关系是由附加的指针字段表示的,链式存储结构通常借助于程序设计语言中的指针类型来实现。

特点:

1、比顺序存储结构的存储密度小 (每个节点都由数据域和指针域组成,所以相同空间内假设全存满的话顺序比链式存储更多)。
2、逻辑上相邻的节点物理上不必相邻。
3、插入、删除灵活 (不必移动节点,只要改变节点中的指针)。
4、查找结点时链式存储要比顺序存储慢。
5、每个结点是由数据域和指针域组成。

三:索引存储:

  除建立存储结点信息外,还建立附加的索引表来标识结点的地址。索引表由若干索引项组成。

特点:

索引存储结构是用结点的索引号来确定结点存储地址,其优点是检索速度快,缺点是增加了附加的索引表,会占用较多的存储空间。

四:散列存储:(hash存储)

  是一种力图将数据元素的存储位置与关键码之间建立确定对应关系的查找技术。

特点:

散列是数组存储方式的一种发展,相比数组,散列的数据访问速度要高于数组,因为可以依据存储数据的部分内容找到数据在数组中的存储位置,进而能够快速实现数据的访问,理想的散列访问速度是非常迅速的,而不像在数组中的遍历过程,采用存储数组中内容的部分元素作为映射函数的输入,映射函数的输出就是存储数据的位置,这样的访问速度就省去了遍历数组的实现。

Java中常用的数据结构:

数组

在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。

是只能在某一端插入和删除的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。

队列

一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列是按照“先进先出”或“后进后出”的原则组织数据的。队列中没有元素时,称为空队列。

链表

是一种物理存储单元上非连续、非顺序的存储结构,它既可以表示线性结构,也可以用于表示非线性结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域(双向链表还存储上一个节点地址的指针域)。

是包含n(n>0)个结点的有穷集合K,且在K中定义了一个关系N,N满足 以下条件:
(1)有且仅有一个结点 K0,他对于关系N来说没有前驱,称K0为树的根结点。简称为根(root)。
(2)除K0外,K中的每个结点,对于关系N来说有且仅有一个前驱。
(3)K中各结点,对关系N来说可以有m个后继(m>=0)。

图是由结点的有穷集合V和边的集合E组成。其中,为了与树形结构加以区别,在图结构中常常将结点称为顶点,边是顶点的有序偶对,若两个顶点之间存在一条边,就表示这两个顶点具有相邻关系。

在计算机科学中,堆是一种特殊的树形数据结构,每个结点都有一个值。通常我们所说的堆的数据结构,是指二叉堆。堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。

散列表

若结构中存在关键字和K相等的记录,则必定在f(K)的存储位置上。由此,不需比较便可直接取得所查记录。称这个对应关系f为散列函数(Hash function),按这个思想建立的表为散列表。
posted on 2018-04-27 14:27  zeronexyz  阅读(290)  评论(0编辑  收藏  举报