Java算法手册读书笔记 02.数据结构概述

01.数据结构概述

数据结构是计算机中对数据的一种存储和组织方式,泛指相互之间存在一种或多种特定关系的数据集合。

合理的数据结构能够提高算法的执行效率,还可以提高数据的存储效率。

02.什么是数据结构?

计算机技术领域还没有统一的数据结构定义,不同的专家对数据结构有责不同的描述。

Startaj Sahni 在《数据结构算法与应用》中提出“数据结构是数据对象,存在㔿该对象的实例以及组成实例的数据元素之间的各种关系,并且这种关系可以通过定义相关的函数来给出”,他将数据结构定义为一个实例或值得集合

Clifford A.Shaffer 在《数据结构算法分析》中提出“”数据结构是抽象数据类型ADT(abstact data type)的物理实现” 

Lobert L.Kruse 认为数据结构的设计过程可以分为抽象层,数据结构层和实现层。其中,抽象层是指抽象数据类型层,即ADT层,主要讨论数据的逻辑结构及其运算。数据结构层讨论一个数据结构的表示。实现层讨论一个数据结构在计算机内的存储细节及运算实现。

虽然数据结构没有统一的定义,但这些定义有具有相似的含义,可以简单的理解数据结构为:一个数据结构是有数据元素依据某种逻辑联系组织起来的,可对数据元素间的逻辑关系的描述称为数据的逻辑结构。由于数据必须在计算机内存储,数据的存储结构是其在计算机的内在表示,也就是数据结构的实现形式,另外,讨论一个数据结构,必须涉及在该类数据上执行的运算。

数据结构是一切算法的基础,数据结构也是程序设计语言的基础,正是由用于对数据结构的深入理解,才导致多种多样的程序设计语言诞生,面向对象的程序设计语言就是完善处理对象数据类型数据结结构的范例。

03.数据结构的基本概念

数据结构基本概念主要包含以下内容:

a.数据(Data)

数据是信息的载体,其能够被计算机识别、存储和加工处理,是计算机程序加工的原材料,数据包括的类型非常广,如基本的整数、字符、字符串、实数等。

b.数据元素(Data Element)

数据元素是数据的基本单位,也称为元素,节点,顶点,记录等。一个数据元素可以由若干数据项组成,数据项是具有独立含义的最小标识单位,数据项也可称为字段,域,属性等。

c.数据结构(Data Structure)

数据结构指的是数据之间的相互关系,即数据的组织形式。

04.数据结构的内容

数据结构的内容主要包括以下内容

a.数据的逻辑结构(Logical Structure)

数据的逻辑结构即数据元素之间的逻辑关系。数据的逻辑结构是从逻辑关系上描述数据的,与数据在计算机中如何存储无关,也就是独立于计算机的抽象概念,从数学分析的角度来看,数据的逻辑结构可以看做从具体的问题抽象出来的数据模型。

b.数据的存储结构(Storage Structure)

数据的存储结构即数据元素及其逻辑关系在计算存储器中表示形式。数据存储结构依赖于计算机语言,是逻辑结构用计算机语言实现。一般来说,只有在高级语言的层次上才会讨论存储结构,在第几的机器语言中存储结构是具体的。

c.数据的运算

数据的运算即能够对数据施加的操作。数据的运算的基础为数据的逻辑结构,每种逻辑结构都可以归纳为一个运算的集合。在数据结构的范畴内,最常用的运算包括检索,插入,删除,更新,排序等。

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

数据的逻辑结构数据的存储结构和数据的运算是一个整体,孤立的去理解这三者中的任何一个都是不全面的。

同一个逻辑结构可以由不同的存储结构。逻辑结构和存储结构是两个概念,同一个逻辑踩踏顺序方式存储,这种结构就是顺序表。如何线性表采用链式的方式存储,这种数据结构就是链表。如果线性表采用散列方式存储吗,这种数据结构就是散列表。

同一种逻辑结构可以由不同的数据运算集合。数据的运算时数据结构中十分重要的内容,一个像他的数据逻辑结构和存储结构采用不同的运算集合及运算性质。将导致全新的数据结构。如将线性表的插入运算限制在表的一段,而删除操作限制在表的另一端,那么这种数据结构就是队列,如将线性表的插入和删除操作都限制在表的同一端,那么这种数据结构就是栈。

数据结构的这三方面是一个有机的整体,缺一不可,数据的逻辑结构,数据存储结构和数据的运算任何一个发生变化都将导致一个全新的数据结构出现。

05.数据结构的分类

按照数据的逻辑结构来堆其进行分类可以分为线性结构和非线性结构

1.线性结构

线性结构就是表中各个节点之间具有线性关系,如果从数据结构的语言钟来描述,其包括如下内容

a.线性结构是非空集

b.线性结构有且仅有一个开始结点和终端结点

c.线性结构所有结点最多只有一个直接前趋结点,还有一个后继结点。

线性表就是典型的线性结构,还有栈、队列、和串都是线性结构。

2.非线性结构

非线性结构就是表中的各个结点之间具有多个对应关系。如果从数据结构的语言来描述,非线性结构应该包括如下内容

a.非线性结构是非空集

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

在实际应用中,数组、广义表、树结构和图结构等数据结构都是非线性结构。

06.数据结构的几种存储方式

数据的存储结构可以采用如下几种方法来实现

a.顺序存储方式

顺序存储方式就是在一块连续的存储区域一个接着一个地存放数据。顺序存储方式把逻辑上相邻的结点存储在物理位置上相邻的存储单元里,结点间的逻辑关系由存储单元的邻接关系来体现。顺序存储方式也称为顺序存储结构(Sequential Storage Structure)一般采用数组或者结构数组来描述。

线性存储方式主要用于线性逻辑结构的数据存放,而对于图和数等非线性逻辑结构则不适用。

b.链接存储方式

链接存储方式不要求逻辑上相邻的结点在物理位置上相邻,结点间的关系由附加的引用字段表示,一个结点的引用字段往往指向下一个结点的存放位置。

c.索引存储方式

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

d.散列存储方式

散列存储方式是根据结点的关键字直接计算出该结点的存储地址的一种存储方式。

06.数据类型

数据类型是一个值的集合,以及在这些值上定义的一系列操作总称。

基本数据类型:值不能进一步分解。如整型 字符型 浮点型

聚合数据类型:值可以分解为若干分量 如数组

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

07.常用的数据结构

1.数组(Array)

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

2.栈(Stack)

栈是一种特殊的线性表,其只能在一个表的一个固定端进行数据结点的插入和删除操作。先进后出。先插入的数据被压入栈底,最后插入的数据在栈顶,读数据时,从栈顶开始逐个读出。栈中没有元素称为空栈。

3.队列(Queue)

队列是一种特殊的线性表。队列值允许在表的一端进行插入操作,另一段进行删除操作,插入一端叫做称为队尾,删除一端叫做队头,队列中没有元素时称为空队列。

4.链表(Linked List)

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

5.数(Tree)

数是一种典型的非线性结构,其是包括n个结点的有穷集合L。在树结构中,有且仅有一个根结点,且该结点没有前驱结点,在树结构中的其他结点都有且仅有一个前驱结点,而且有m个后继结点,m>=0.

6.图(Graph)

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

7.堆(Heap)

堆是一种特殊的树形数据结构,一般讨论的堆都是二叉堆。堆的特点是其根结点的值是所有结点中最小的或者最大的,并且根结点的两个子树也是堆结构。

8.散列表(Hash)

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章