数据结构FAQ

原创 2002年03月22日 17:40:00

1.何谓数据结构?

数据结构是在整个计算机科学与技术领域上广泛被使用的术语。它用来反映一个数据的内部构成,即一个数据由那些成分数据构成,以什么方式构成,呈什么结构。数据结构有逻辑上的数据结构和物理上的数据结构之分。逻辑上的数据结构反映成分数据之间的逻辑关系,而物理上的数据结构反映成分数据在计算机内部的存储安排。数据结构是数据存在的形式。

数据结构是信息的一种组织方式,其目的是为了提高算法的效率,它通常与一组算法的集合相对应,通过这组算法集合可以对数据结构中的数据进行某种操作。

2.数据结构主要研究什么?

数据结构作为一门学科主要研究数据的各种逻辑结构和存储结构,以及对数据的各种操作。因此,主要有三个方面的内容:数据的逻辑结构;数据的物理存储结构;对数据的操作(或算法)。通常,算法的设计取决于数据的逻辑结构,算法的实现取决于数据的物理存储结构。

3.什么是数据?什么是结构?什么是逻辑结构和物理结构?

数据是指由有限的符号(比如,"0"和"1",具有其自己的结构、操作、和相应的语义)组成的元素的集合。结构是元素之间的关系的集合。通常来说,一个数据结构DS 可以表示为一个二元组:

DS=(D,S), //i.e., data-structure=(data-part,logic-structure-part)

这里D是数据元素的集合(或者是“结点”,可能还含有“数据项”或“数据域”),S是定义在D(或其他集合)上的关系的集合,S = { R | R : D×D×...},称之为元素的逻辑结构。

逻辑结构有四种基本类型:集合结构、线性结构、树状结构和网络结构。表和树是最常用的两种高效数据结构,许多高效的算法可以用这两种数据结构来设计实现。表是线性结构的(全序关系),树(偏序或层次关系)和图(局部有序(weak/local orders))是非线性结构。

数据结构的物理结构是指逻辑结构的存储镜像(image)。数据结构 DS 的物理结构 P 对应于从 DS 的数据元素到存储区M(维护着逻辑结构S)的一个映射:

P:(D,S) --> M

存储器模型:一个存储器 M 是一系列固定大小的存储单元,每个单元 U 有一个唯一的地址 A(U),该地址被连续地编码。每个单元 U 有一个唯一的后继单元 U'=succ(U)。

P 的四种基本映射模型:顺序(sequential)、链接(linked)、索引(indexed)和散列(hashing)映射。

因此,我们至少可以得到4×4种可能的物理数据结构:

   
sequential     (sets)
   
linked         lists
   
indexed        trees
   
hash           graphs

(并不是所有的可能组合都合理)

4.数据结构(DS)上的操作:

所有的定义在DS上的操作在改变数据元素(节点)或节点的域时必须保持DS的逻辑和物理结构。

5. DS上的基本操作:

任何其他对DS的高级操作都可以用这些基本操作来实现。最好将DS和他的所有基本操作看作一个整体——称之为模块。我们可以进一步将该模块抽象为数据类型(其中DS的存储结构被表示为私有成员,基本操作被表示为公共方法),称之为ADT。作为ADT,堆栈和队列都是一种特殊的表,他们拥有表的操作的子集。

对于DATs的高级操作可以被设计为(不封装的)算法,利用基本操作对DS进行处理。

6.好的和坏的DS:

如果一个DS可以通过某种“线性规则”被转化为线性的DS(例如线性表),则称它为好的DS。好的DS通常对应于好的(高效的)算法。这是由计算机的计算能力决定的,因为计算机本质上只能存取逻辑连续的内存单元,因此如果没有线性化的结构逻辑上是不可计算的。比如对一个图进行操作,要访问图的所有结点,则必须按照某种顺序来依次访问所有节点(要形成一个偏序),必须通过某种方式将图固有的非线性结构转化为线性结构才能对图进行操作。

树是好的DS——它有非常简单而高效的线性化规则,因此可以利用树设计出许多非常高效的算法。树的实现和使用都很简单,但可以解决大量特殊的复杂问题,因此树是实际编程中最重要和最有用的一种数据结构。树的结构本质上有递归的性质——每一个叶节点可以被一棵子树所替代,反之亦然。实际上,每一种递归的结构都可以被转化为(或等价于)树形结构。

 

数据库学习FAQ

数据库学习FAQ 简述数据、数据库、数据库管理系统、数据库系统的含义及其联系?数据:数据是信息的符号记录。数据是数据库处理和研究的对象 数据库:长期存储在计算机内,有组织、可共享的数据集合。数据按一定...
  • pupilxmk
  • pupilxmk
  • 2016年05月25日 08:59
  • 487

运维路上的FAQ

遇到的看见的,长期更新~~~ 1.linux乱码问题     [root@vps software]# vi  /etc/sysconfig/i18n     LANG='zh_...
  • u010718976
  • u010718976
  • 2017年01月10日 11:00
  • 204

FAQ = Fuck you?

剛才在看Denyhosts的FAQ的時候忽然想到FAQ的讀音跟fuck you似乎是一樣的?證明發下∵    F:[f]       A:[ʌ]       Q:[kju:]∴    FAQ=[fʌk...
  • hodrag
  • hodrag
  • 2009年04月22日 08:24
  • 2179

FAQ手册

1、怎么样查询特殊字符,如通配符%与_ select * from table where name like 'A\_%' escape '\' 2、如何插入单引号到数据库表中 [A]可以用A...
  • haoxiaoyan
  • haoxiaoyan
  • 2013年11月25日 16:33
  • 951

discuz (dzx) FAQ帮助页面 图文并茂版

使 discuz (dzx) FAQ帮助页面 图文并茂版
  • zhangxueleishamo
  • zhangxueleishamo
  • 2017年06月19日 16:05
  • 133

TCP FAQ

什么是MSS(Maximum Segment Size)? TCP用MSS选项允许接收方指定它可以接收的最大段长度。传输的双方通过这个选项协 商出一个上方都接受的最大段长。这个值太大或太小都不好。太...
  • dolphin98629
  • dolphin98629
  • 2014年05月26日 15:42
  • 382

seL4 FAQ

本文译至:http://sel4.systems/FAQ/ 译者:萝卜 什么是seL4? seL4是L4微内核家族中最先进的成员,值得注意的是其全面的形式验证,这使它有别于其他任何操作系统。seL...
  • robertsong2004
  • robertsong2004
  • 2014年08月24日 10:58
  • 2601

什么是FAQ,它有何作用

FAQ就是Frequently Asked Questions(常见问题), 由于这些问题出现的比较普遍,一般都推荐用户先看看FAQ, 看自己的问题是否符合FAQ中的情况,如果符合的话FAQ中 ...
  • q1054261752
  • q1054261752
  • 2015年12月25日 16:45
  • 353

FAQ整理(不断添加中)

FAQ1: VC7中,如何在非MFC中如何使用CString -- 包含头文件 atlstr.h 即可,需要用到ATLFAQ2: 检查某键是否被按下-- if( GetKeyState(VK_LSHI...
  • lbird
  • lbird
  • 2007年02月09日 12:04
  • 1193

开源FAQ系统:KnowledgebasePublisher

 文章来源于http://www.lupaworld.com  KnowledgebasePublisher是一个开源FAQ系统,也可做为一个用于发布文章的内容管理器。提供问题分类,术语表,强大的WY...
  • flying_hawk
  • flying_hawk
  • 2009年08月26日 20:29
  • 1319
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据结构FAQ
举报原因:
原因补充:

(最多只允许输入30个字)