数据结构 - 逻辑结构和存储结构

程序=算法+数据结构

N.沃思(Niklaus Wirth)教授提出:

程序=算法+数据结构

以上公式说明了如下两个问题:

(1)算法决定如何构造和组织数据(算法→数据结构)。

(2)算法的选择依赖于作为基础的数据结构(数据结构→算法)。

软件=程序+文档(软件工程的观点)

求解非数值计算的问题

主要考虑的是设计出合适的数据结构及相应的算法。

即:首先要考虑对相关的各种信息如何表示、组织和存储?

因此,可以认为:数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作的学科。

数据结构基本概念

几个概念:

数据(Data):是客观事物的符号表示。在计算机科学中指的是所有能输入到计算机中并被计算机程序处理的符号的总称。

数据元素(Data Element):是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。

数据项是数据的不可分割的最小单位。一个数据元素可由若干个数据项组成。

数据对象(Data Object):是性质相同的数据元素的集合。是数据的一个子集。

什么是数据结构?

定义1—-

是相互之间存在一种或多种特定关系的数据元素的集合。

定义2—-

按某种逻辑关系组织起来的一批数据(或称带结构的数据元素的集合)应用计算机语言并按一定的存储表示 方式把它们存储在计算机的存储器中,并在其上定义了一个运算的集合。

逻辑结构

数据元素间抽象化的相互关系(简称为逻辑结构)。

与数据的存储无关,独立于计算机,它是从具体问题抽象出来的数学模型。

存储结构(物理结构)—-

数据元素及其关系(数据的逻辑结构)在计算机存储器中的存储形式。

是逻辑结构用计算机语言的实现,它依赖于计算机语言。

运算(算法)

逻辑结构—划分方法一

(1)线性结构—-

有且仅有一个开始和一个终端结点,并且所有结点都最多只有一个直接前趋和一个后继。

例如:线性表、栈、队列、串

(2)非线性结构—-

一个结点可能有多个直接前趋和直接后继。

例如:树、图等。

逻辑结构—划分方法二

一、集合 结构中的数据元素除了同属于一种类型外,别无其它关系。

二、线性结构 结构中的数据元素之间存在一对一的关系。

三、树型结构 结构中的数据元素之间存在一对多的关系。

四、图状结构或网状结构 结构中的数据元素之间存在多对多的关系。

存储结构

存储结构两方面的内容:

(1)数据元素自身值的表示(数据域)

(2)该结点与其它结点关系的表示(链域)

两种基本的存储方法:

(1)顺序存储方法(顺序存储结构)

(2)链接存储方法(链式存储结构)

同一种逻辑结构可采用不同的存储方法(以上两种之一或组合),这主要考虑的是运算方便及算法的时空要求。

数据结构的运算(对数据的操作)

⑴ 建立(Create)一个数据结构;

⑵ 消除(Destroy)一个数据结构;

⑶ 从一个数据结构中删除(Delete)一个数据元素;

⑷ 把一个数据元素插入(Insert)到一个数据结构中;

⑸ 对一个数据结构进行访问(Access);

⑹ 对一个数据结构(中的数据元素)进行修改(Modify)

⑺ 对一个数据结构进行排序(Sort);

⑻ 对一个数据结构进行查找(Search)。

数据类型及抽象数据类型

数据类型:在一种程序设计语言中,变量所具有的数据种类。

例1、 在FORTRAN语言中,变量的数据类型有整型、实型、和复数型

例2、在C语言中

数据类型:基本类型和构造类型

基本类型:整型、浮点型、字符型

构造类型:数组、结构、联合、指针、枚举型、自定义

注意:数据结构不同于数据类型,也不同于数据对象,它不仅要描述数据对象的数据类型,而且要描述数据对象各元素之间的相互关系。

抽象数据类型(Abstract Data Type ,简称ADT):是指一个数学模型以及定义在该模型上的一组操作。

ADT的定义仅是一组逻辑特性描述, 与其在计算机内的表示和实现无关。因此,不论ADT的内部结构如何变化,只要其数学特性不变,都不影响其外部使用。

ADT的形式化定义是三元组:ADT=(D,S,P)

其中:D是数据对象,S是D上的关系集,P是对D的基本操作集。

ADT的一般定义形式是:

ADT <抽象数据类型名>{

数据对象: <数据对象的定义>

数据关系: <数据关系的定义>

基本操作: <基本操作的定义>

} ADT <抽象数据类型名>

其中数据对象和数据关系的定义用伪码描述。

基本操作的定义是:

<基本操作名>(<参数表>)

初始条件: <初始条件描述>

操作结果: <操作结果描述>

初始条件:描述操作执行之前数据结构和参数应满足的条件;若不满足,则操作失败,返回相应的出错信息。

操作结果:描述操作正常完成之后,数据结构的变化状况和 应返回的结果。

算法

算法的概念和描述:

什么是算法?

所谓算法(Algorithm)是对特定问题求解方法(步骤)的一种描述。

为解决某一特定问题而由若干条指令组成的有穷序列。

适合于计算机程序实现的求解问题的方法

算法的概念和描述:

一个算法必须满足以下五个准则:

(1)有穷性—执行了有限条指令后一定要终止。

(2)确定性(无二义)—

算法的每一步操作都必须有确切定义,不得有任何歧义性。

(3)可(能)行性—

算法的每一步操作都必须是可行的,即每步操作均能在有限时间内完成。

(4)输入数据—

一个算法有n(n>=0)个初始数据的输入。

(5)输出数据—

一个算法有一个或多个与输入有某种关系的有效信息的输出。

? 常见函数的时间复杂度按数量递增排列及增长率。

常数阶O(1)

对数阶O(log2n)

线性阶O(n)

线性对数阶O(nlog2n)

平方阶O(n2)

立方阶O(n3)

……

k次方阶O(nk)

指数阶O(2n)

空间复杂度(Space complexity)

:是指算法编写成程序后,在计算机中运行时所需存储空间大小的度量。记作: S(n)=O(f(n))

其中: n为问题的规模(或大小)

该存储空间一般包括三个方面:

指令常数变量所占用的存储空间;

输入数据所占用的存储空间;

辅助(存储)空间。

一般地,算法的空间复杂度指的是辅助空间。

一维数组a[n]: 空间复杂度 O(n)

二维数组a[n][m]: 空间复杂度 O(n*m)

时间: 2024-08-07 11:44:30

数据结构 - 逻辑结构和存储结构的相关文章

1、数据结构的基本逻辑结构、存储结构和运算

数据结构的基本逻辑结构.存储结构和运算 1.基本逻辑结构 集合结构.线性结构.树形结构和图状结构 2.基本存储结构 线性存储:需要一块连续的内存地址空间,相关元素一次存储 链接存储:不需要连续的地址空间,每个节点包含元素和链接两个部分,元素存储数据值,链接存储下一个节点的地址 3.基本运算 ·创建运算 ·清除运算 ·插入运算 ·搜索运算(根据值返回位置) ·更新运算 ·访问运算(根据位置返回值) ·遍历运算 1.数据结构的基本逻辑结构.存储结构和运算,布布扣,bubuko.com

js数据结构与算法存储结构

数据结构(程序设计=数据结构+算法) 数据结构就是关系,没错,就是数据元素相互之间存在的一种或多种特定关系的集合. 传统上,我们把数据结构分为逻辑结构和物理结构. 逻辑结构:是指数据对象中数据元素之间的相互关系,也是我们今后最需要关注和讨论的问题. 物理结构:是指数据的逻辑结构在计算机中的存储形式. 常用的数据结构有: 数组,队列(queue),堆(heap),栈(stack),链表(linked list ),树(tree),图(graph)和散列表(hash) 栈(stack):运算只在表的

数据结构 - 图的存储结构

图的抽象数据类型定义 图是一种数据结构,加上一组基本操作就构成了图的抽象数据类型. 图的抽象数据类型定义如下: ADT Graph{ 数据对象V:具有相同特性的数据元素的集合,称为顶点集. 数据关系R:R={VR} VR={<v,w>|<v,w>| v,w?V∧p(v,w) ,<v,w>表示 从v到w的弧,P(v,w)定义了弧<v,w>的信息 } 基本操作P: Create_Graph() : 图的创建操作. 初始条件:无. 操作结果:生成一个没有顶点的空图

数据结构之图(存储结构、遍历)

新学期开始了,开始专心于技术上了,上学期的寒假总是那么短暂,飘飘乎就这样逝去,今天补补上学期还没学完的数据结构---图,希望能和大家一起探讨,共同进步~ 定义: 图是由顶点集合及顶点间的关系集合组成的一种数据结构. 图的存储结构: 1.1 邻接矩阵 图的邻接矩阵存储方式是用两个数组来表示图.一个一维数组存储图中顶点信息,一个二维数组(邻接矩阵)存储图中的边或弧的信息. 设图G有n个顶点,则邻接矩阵是一个n*n的方阵,定义为: 看一个实例,下图左就是一个无向图. 从上面可以看出,无向图的边数组是一

浅谈数据结构之二叉树存储结构实现(七)

树:是n个结点的有限集:n=0时称为空树.在任意一棵非空树中,有且只有一个特定的结点称为根结点:其余的结点可分为m(m>0)个互不相交的有限集,其中每一个有限集都是一棵子树.结点拥有的子树数称为结点的度:度为0的结点称为叶结点或者终端结点,度不为0的结点称为分支结点或者非终端结点:树的度就是树内各结点的度的最大值. 二叉树的特点有:(1).每个结点最多有两棵子树,所以二叉树不存在度大于2的结点(注意:不是只有两棵子树,而是最多有两棵子树,没有子树或者有一颗子树都是可以的);(2).左子树和右子树

数据结构 - 二叉树的存储结构

顺序存储结构 二叉树存储结构的类型定义: #define MAX_SIZE 100 typedef telemtype sqbitree[MAX_SIZE]; 用一组地址连续的存储单元依次"自上而下.自左至右"存储完全二叉树的数据元素. 对于完全二叉树上编号为i的结点元素存储在一维数组的下标值为i-1的分量中,如图6-6(c)所示. 对于一般的二叉树,将其每个结点与完全二叉树上的结点相对照,存储在一维数组中, 链式存储结构 设计不同的结点结构可构成不同的链式存储结构. (1) 结点的类

数据结构 - 图的存储结构表示及其遍历 (DFS &amp;&amp; BFS)

1.邻接矩阵表示的图结构 /* 邻接矩阵表示的图结构 */ #include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> #include <queue> #include <stack> using namespace std; typedef char VertexType; //顶点类型应由用户定义 typedef int EdgeType; /

7. C#数据结构与算法 -- 存储结构(单链表)

C#定义并实现单链表 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Linked {     //单链表结点类,采用泛型       public class Node<T> {         private T data; //数据域,当前结点的数据           private 

【数据结构】数据的存储结构

数据有有线性结构.树形结构.图状结构和集合四种逻辑结构,那么它们是如何存储的呢? 数据结构的存储结构有两种,分别是顺序存储和链式存储.顺序存储的特点是借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系:链式存储的特点是借助指针表示数据元素质检单逻辑关系. 1.线性结构:结构中的元素之间存在着一对一的线性关系. 如图为一个线性结构,那么它的顺序存储和链式存储如何呢?如下图: 顺序结构 链式结构 线性结构如数组的存法,按一定顺序存放:而链式结构如链表的存法,结点可以任意存放,如上图,所以要用n