数据结构概述

以下内容是本人学习数据结构的记录,并非原创,只是为了加深印象并留作参考。

目录

1.数据结构的定义

2.数据的逻辑结构

(1) 集合

(2) 线性结构

(3) 树形结构

(4) 图形结构

3.数据的存储结构

(1) 顺序存储结构

(2) 链接存储结构

(3) 索引存储结构

(4) 散列存储结构

4.数据的运算


1.数据结构的定义

数据结构是计算机科学的基本内容之一,它研究的是程序设计中计算机操作对象以及它们之间的关系和运算,也就是研究如何在计算机中组织数据,如何处理数据,进而更好地利用数据的思维逻辑和方式方法。具体地说,研究数据结构一般包括三方面的内容,即数据的逻辑结构数据的存储结构以及在这些数据上定义的运算的集合

通常,将计算机操作对象个体称为数据元素,它是数据的基本单位,在程序中作为一个整体进行考虑和处理。一组数据元素往往并不是杂乱无章的,而是具有某种结构形式,这里的结构是指数据元素间的相互关系。数据结构就是相互间存在一种或多种特定关系的数据元素的集合

2.数据的逻辑结构

数据的逻辑结构是数据间关系的描述,它抽象地反映数据元素间的逻辑关系。根据各元素之间的前趋后继关系的不同特性,可将数据的逻辑结构分为线性结构非线性结构两大类。线性结构中的元素最多有一个前趋一个后继,如线性表、堆栈、队列等。如果一个数据结构不是线性结构,则称为非线性结构,如树、图等。

按照数据元素间关系的不同特性,通常可将数据的逻辑结构归纳为4种基本数据结构,即集合、线性结构、树形结构、图形结构

(1) 集合

结构间的数据元素间除了“同属于一个集合”的关系外,别无其他关系

(2) 线性结构

线性结构的数据元素只按先后次序连接,数据元素间存在一对一的关系。线性结构在程序设计中应用最为广泛,常用的线性结构有线性表、堆栈、队列等。

(3) 树形结构

树形结构的数据元素是分层次的纵向连接,数据元素间存在一对多的关系。

(4) 图形结构

图形结构的数据元素有各种各样的复杂连接,数据元素间存在多对多的关系。

在上述的基本数据结构基础上,可以形成其他种类的数据结构。

3.数据的存储结构

数据的逻辑结构在计算机存储器中的表示(又称映像)称为数据的存储结构(或物理结构),它包括两个方面内容,即数据元素的表示关系的表示。数据的逻辑结构通过不同的存储映像方法(顺序映像和非顺序映像)可以得到不同的存储结构,数据的存储结构分为4种,即顺序存储结构链接存储结构索引存储结构散列存储结构线性结构可采用顺序、链接、索引、散列4种存储结构,树形结构图形结构非线性结构一般采用链接存储结构

(1) 顺序存储结构

顺序存储结构是把一组节点存放在地址相邻的存储单元里,节点间的逻辑关系用存储单元的自然顺序关系来表达的,即用一块连续存储区域存储线性数据结构。因为顺序存储方法的存储空间除了存储有用数据外,没有用于存储其他附加的信息,所以顺序存储结构一般也被称为紧凑存储结构

顺序存储结构的优点是结构简单,节点中只有自身信息,可节省存储空间。它的缺点是由于要求连续的存储单元,因此可能产生较多的碎片。另外,插入和删除操作不便,会引起大量节点的移动

(2) 链接存储结构

链接存储结构是在节点的存储结构中附加指针域(或指针字段)来存储节点间的逻辑关系。链接存储结构中数据节点包含两部分,即数据域(数据字段)和指针域(指针字段)。数据域存放节点本身的数据指针域存放指向其后继节点的指针

下面以链接表为例来说明数据的链接存储结构。链接表是以指针方式表示的“线性表结构”。在链接表中,每个节点由数据域指针域两部分组成,数据域中存放数据元素自身的信息指针域中存放指针,即存放与该元素相邻接的元素的地址指针完成了两个元素间的链接,代表了元素间的逻辑关系。链表中要给出第一个元素的地址指向第一个元素的指针称为头指针

链接存储结构的优点不要求连续的存储空间,使用比较灵活缺点节点指针要占用额外的存储空间

(3) 索引存储结构

在线性结构中,数据元素可排成一个有序的序列a1,a2,a3,...,an,每个数据元素ai在序列里都有一个对应的位置码i,这就是元素的索引号。索引存储结构就是用数据元素的索引号来确定数据元素的存储地址

一般索引存储有两种实现方法:一是建立附加的索引表,索引表里第i项的值就是第i个元素的存储地址;另一种是当每个元素所占内存单元数相等时,可用地址码i的线性函数来确定元素的存储地址。

索引存储结构的优点检索速度快缺点增加了附加的索引表,会占用较多的存储

(4) 散列存储结构

散列存储结构是在数据元素其在存储器中的存储位置之间建立建立一个映像关系;这个映像关系可以用一个称为散列函数的函数来表示。根据数据元素的值利用散列函数就可以计算出它的地址

散列存储结构的优点检索、增加、删除节点的操作速度快缺点是采用不好的散列函数时可能出现节点单元的碰撞,而增加时间和空间开销

4.数据的运算

研究数据结构,除了研究数据结构本身外,还要研究与数据结构相关的运算,数据的运算是数据结构的一个重要方面。

各种数据的逻辑结构有相应的各类运算,每种逻辑结构都有一个运算的集合,常用的运算有检索、插入、删除、更新、排序等。例如,从学生表中删除一个学生元素,向家族树中插入一个家庭成员等。数据的运算定义在数据的逻辑结构上,而其运算的具体实现要在存储结构上进行

数据类型这一概念最早出现在高级程序设计语言中,它与数据结构密切相关,用于描述程序操作对象的特性。在传统的程序设计语言中,所提供的数据类型即反映了其数据结构。无论采用哪种高级语言编写程序,其中的变量、常量以及表达式都有其确定的数据类型。简单的数据结构可以用单一的标准数据类型(如整型、实型和字符型)来定义,而复杂的数据结构(如数组、记录、指针等)需要用简单的数据结构复合而构成,在此基础上还可以得到更为复杂的数据结构。各种数据类型明显或隐含地规定了在程序执行期间变量或表达式的取值范围及其允许的操作。由此可见,数据类型是一个值的集合和定义在这个集合上的一组操作的总称数据类型也可以说是某种程序设计语言中已实现的数据结构

这些年使用的面向对象语言(如c++语言)则根据抽象数据类型的理论,在程序中可以将数据结构的逻辑构成和它的运算操作一并定义,并封装成一个整体作为一类对象。在程序使用时,即可对相应对象类型的变量进行调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值