数据结构

来源:互联网 发布:用vb设计计算机程序 编辑:程序博客网 时间:2024/05/27 16:42

一、数据结构概述

1、数据结构是计算机中对数据的一种存储和组织形式,可以用来表征特定的对象数据,同时也泛指相互之间存在一种或多种特定关系的数据的集合。

2、数据结构包括三方面内容:数据的逻辑结构、数据的存储结构、数据的运算。

(1)数据的逻辑结构:根据元素之间的逻辑关系。数据的逻辑结构是从逻辑关系上描述数据的,与数据在计算机中如何存储无关的。数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。

(2)数据的存储结构:数据元素及其逻辑关系在计算机存储器中的表示形式。数据的存储结构依赖于计算机语言,是逻辑结构用计算机语言的实现。

(3)数据的运算:对数据施加操作。数据的运算其基础在于数据的逻辑结构上。每种逻辑结构都可以归纳一个运算的集合。最常用的运算包括:检索、插入、删除、更新、排序等。

3、有关数据结构的概念

(1)每一行可以看作是一个数据元素,也可以称为记录或结点。

(2)数据元素之间的逻辑关系

对表中任意一个结点,直接前趋结点最多只有一个。直接前趋结点也就是与它相邻且在它前面的结点。

对表中任意一个结点,直接后继结点最多只有一个。直接后继结点也就是与它相邻且在它后面的结点。

表中只有第一个结点没有直接前趋,也就是开始结点。

表中只有最后一个结点没有直接后继,也就是终端结点。

4、数据结构是一个有机的整体

(1)同一个逻辑结构可以有不同的存储结构。

(2)同一种逻辑结构也可以有不同的数据运算集合。

5、数据结构的分类(按数据的逻辑结构进行分类)

(1)线性结构:表中各个结点具有线性关系。线性表、栈、队列、串等都是线性结构。

线性结构应包括如下几点:

线性结构是非空集;

线性结构有且只有一个开始结点和一个终端结点;

线性结构所有结点最多只有一个直接前趋结点和一个直接后继结点;

(3)非线形结构:表中各个结点之间具有多个对应关系。数组、广义表、树结构和图结构等都是非线性结构。

非线性结构应包括如下几点:

非线性结构是非空集;

非线性结构的一个结点可能有多个直接前趋结点和直接后继结点;

6、数据结构的集中存储方式

(1)顺序存储结构:一块连续的存储区域一个接着一个的存放数据。顺序存储结构把逻辑上相邻的结点存储在物理位置上相邻的存储单元里,结点间的逻辑关系由存储单元的邻接关系来表示。一般用数组或是结构数组来描述。

(2)链接存储方式:不要求逻辑上相邻的结点在物理位置上相邻,结点间的逻辑关系由附加的引用字段表示。一个结点的引用字段往往指向下一个结点的存放位置。一般在原数据项中增加引用类型来表示结点之间的位置关系。

(3)索引存储方式:采用附加的索引表的方式来存储结点信息。索引表由若干索引项组成。索引存储方式中索引项的一般形式为:(关键字、地址),其中,关键字是能够唯一标识一个结点的数据项。

索引存储方式还可分为2类:稠密索引(每个结点在索引表中都有一个索引项,其中,索引项的地址只是结点所在的存储位置);稀疏索引(一组结点在索引表中只对应一个索引项,其中,索引项的地址是指示一组结点的起始存储位置)。

(4)散列存储方式:根据结点的关键字直接计算出该结点的存储地址。

7、数据类型

一个值的集合以及在这些值上定义的一系列操作的总称。

(1)按照数据类型的值是否可以分解

基本数据类型:其值不能进一步分解,一般是程序设计语言自身定义的一些数据类型。

聚合数据类型:其值可以进一步分解为若干个分量,一般是用户自定义的数据类型。

(2)抽象数据类型(ADT):数据的组织及其相关的操作,ADT可以看作是数据的逻辑结构及其在逻辑结构上定义的操作。

2个特征:

数据抽象:强调实体的本质特征,所能够完成的功能以及与外部用户的接口。

数据封装:用于将实体的外部特征和其内部实现细节进行分离,并且对外部用户隐藏其内部实现细节。

ADT的优点:将数据和操作封装在一起,使得用户程序只能通过在ADT里定义某些操作来访问其中的数据,从而实现了信息的隐藏。

Java中使用接口来表示抽象数据类型,用接口的实现类来实现ADT

8、常用的数据结构

(1)数组:数组是一种聚合类型,是将具有相同类型的若干变量有序的组织在一起的集合。

(2)栈:栈是一种特殊的线性表,其只能在一个表的一个固定端进行数据结点的插入和删除操作。栈按照后进先出的原则来存储数据。栈中没有数据时,称为空栈。

(3)队列:队列是一种特殊的线性表,队列只允许在表的一端进行插入操作,而在另一端进行删除操作。一般来说,进行插入操作的一端称为队尾,进行删除操作的一端称为队头。队列中没有元素时,称为空队列。

(4)链表:链表是一种数据元素按照链式存储结构进行存储的数据结构,这种存储结构在物理上存在非连续的特点。链表由一系列数据结点构成,每个数据结点包括数据域和引用域两部分,其中,引用域保存了数据结构中下一个元素存放的地址。链表结构中数据元素的逻辑顺序是通过链表中的引用链接次序来实现的。

(5)树:树是非线性结构,其是包括n个结点的有穷集合K。在树结构中,有且仅有一个根结点。在树结构中其它结点都有且只有一个前趋结点,而且可以有m个后继结点,m>=0

(6)图:非线性数据结构。在图结构中,数据结点一般称为顶点,而边是顶点的有序偶对。如果两个定点之间存在一条边,那么就表示这两个顶点具有相邻关系。

(7)堆:树型数据结构,其根结点的值是所有结点中最小的或最大的,并且根结点的两个子树也是一个堆结构。

(8)散列表:散列表源于散列函数,其思想是如果在数据结构中存在关键字和T相等的记录,那么必定在F(T)的存储位置可以找到该记录,这样就可以不用进行比较而直接取得所查记录。

原创粉丝点击