数据库:数据类型、数据项、数据元素、数据对象、数据结构的概念与相互之间的关系

一、数据类型

概念:一个值的集合和定义在这个值集上一组操作的的总称。

(一个值的集合怎么理解呢,比如在C语言中,char类型数据范围是:-127~128,。而一组操作可以理解为类型所支持的操作方式,比如int和char类型支持+、-、*、/、%这5种操作。)

二、数据项

概念:数据项可以是字母、数字或两者的组合。通过数据类型(逻辑的、数值的、字符的等)及数据长度来描述。数据项用来描述实体的某种属性。在地理信息系统中,数据项描述对象是地理实体各要素及其属性,分为几何属性(地理位置和形状)和非几何属性,包括标量属性(各种量测值)和名称属性(地名及地物名)等。

(例如游戏主角攻击力为99999,而99999是数据项。)

三、数据元素

概念:数据元素(data element)是计算机科学术语。它是数据的基本单位,数据元素也叫做结点或记录。在计算机程序中通常作为一个整体进行考虑和处理。有时,一个数据元素可由若干个数据项组成,例如,一本书的书目信息为一个数据元素,而书目信息的每一项(如书名、作者名等)为一个数据项。数据项是数据的不可分割的最小单位。

(游戏主角的能力面板可以看作一个数据元素,其中包含攻击力、防御力、生命值等数据项,即一个数据元素可由若干个数据项组成,又比如excel表格学生信息通常包括:学号、姓名、班级、性别这个四个数据项,而单条学生信息可以是数据元素)

四、数据结构

概念:数据结构(data structure)是带有结构特性的数据元素的集合,它研究的是数据的逻辑结构和数据的物理结构以及它们之间的相互关系,并对这种结构定义相适应的运算,设计出相应的算法,并确保经过这些运算以后所得到的新结构仍保持原来的结构类型。简而言之,数据结构是相互之间存在一种或多种特定关系的数据元素的集合。

(数据结构是用来表述计算机存储、组织数据的方式的一个名词,数据结构是指相互之间存在一种或多种特定关系的数据元素的集合,这里就不拿游戏举例子了,用C语言的链表会更好一些。定义一个有6个节点的链表,每个链表里都有个数据元素,分别是:

姓名:
学号:
成绩:
下一个节点的地址:

我们知道:姓名、学号、成绩、下节点地址是4个数据项,而这4个数据项组成一个数据元素,而这4个数据元素紧密相连的、一环扣一环的关系,称为数据结构——链表。)

五、数据对象

概念:数据对象是必须由软件理解的复合信息表示。数据对象可能是外部实体、事物、偶发事件或事件、角色、组织单位、地点或结构等。例如,一个人或一部车可以被认为是数据对象,在某种意义上它们可以用一组属性来定义。数据对象描述包括了数据对象及其所有属性。数据对象只封装数据(没有对数据的操作)。

(地球,火箭、人、猫、狗都属于数据对象,数据对象和上面的数据项、数据类型、数据元素、数据结构都没有强烈的逻辑关系,而上面的数据类型、数据项、数据元素、数据结构它们之间都有明显的相联或组成关系)

如果这篇文章对您有所帮助,请点赞哦,您的一点支持是我写文章的巨大动力(^ - ^)

  • 7
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据整理分析方法全文共2页,当前为第1页。数据整理分析方法全文共2页,当前为第1页。数据梳理主要是指对数据的结构、内容和关系进行分析 数据整理分析方法全文共2页,当前为第1页。 数据整理分析方法全文共2页,当前为第1页。 大多数公司都存在数据问题。主要表现在数据难于管理,对于数据对象关系、流程等难于控制。其次是数据的不一致性,数据异常、丢失、重复等,以及存在不符合业务规则的数据、孤立的数据等。 1 数据结构分析 1元数据检验 元数据用于描述表格或者表格栏中的数据数据梳理方法是对数据进行扫描并推断出相同的信息类型。 2 模式匹配 一般情况下,模式匹配可确定字段中的数据值是否有预期的格式。 3基本统计 元数据分析、模式分析和基本统计是数据结构分析的主要方法,用来指示数据文件中潜在的结构问题。 2 数据分析 数据分析用于指示业务规则和数据的完整性。在分析了整个的数据表或数据栏之后,需要仔细地查看每个单独的数据元素。结构分析可以在公司数据中进行大范围扫描,并指出需要进一步研究的问题区域;数据分析可以更深入地确定哪些数据不精确、不完整和不清楚。 1标准化分析 2 频率分布和外延分析 频率分布技术可以减少数据分析的工作量。这项技巧重点关注所要进一步调查的数据,辨别出不正确的数据值,还可以通过钻取技术做出更深层次的判断。 外延分析也可以帮助你查明问题数据。频率统计方法根据数据表现形式寻找数据的关联关系,而外延分析则是为检查出那些明显的不同于其它数据值的少量数据。外延分析可指示出一组数据的最高和最低的值。这一方法对于数值和字符数据都是非常实用的。 3业务规则的确认 3 数据关联分析 专业的流程模板和海量共享的流程图:[1] - 价值链图(EVC) - 常规流程图(Flowchart) - 事件过程链图(EPC) - 标准建模语言(UML) - BPMN2.0图 数据挖掘   数据挖掘又称数据库中的知识发现,是目前人工智能和数据库领域研究的热点问题,所谓数据挖掘是指从数据库的大量数据中揭示出隐含的、先前未知的并有潜在价值的信息的非平凡过程  利用数据挖掘进行数据分析常用的方法主要有分类、回归分析、聚类、关联规则、特征、变化和偏差分析、Web页挖掘等, 它们分别从不同的角度对数据进行挖掘。    分类。分类是找出数据库中一组数据对象的共同特点并按照分类模式将其划分为数据整理分析方法全文共2页,当前为第2页。数据整理分析方法全文共2页,当前为第2页。不同的类,其目的是通过分类模型,将数据库中的数据项映射到某个给定的类别。  它可以应用到客户的分类、客户的属性和特征分析、客户满意度分析、客户的购买趋势预测等,如一个汽车零售商将客户按照对汽车的喜好划分成不同的类,这样营销人员就可以将新型汽车的广告手册直接邮寄到有这种喜好的客户手中,从而大大增加了商业机会。    回归分析。回归分析方法反映的是事务数据库中属性值在时间上的特征,产生一个将数据项映射到一个实值预测变量的函数,发现变量或属性间的依赖关系,其主要研究问题包括数据序列的趋势特征、数据序列的预测以及数据间的相关关系等。   它可以应用到市场营销的各个方面,如客户寻求、保持和预防客户流失活动、产品生命周期分析、销售趋势预测及有针对性的促销活动等。    聚类。聚类分析是把一组数据按照相似性和差异性分为几个类别,其目的是使得属于同一类别的数据间的相似性尽可能大,不同类别中的数据间的相似性尽可能小。   它可以应用到客户群体的分类、客户背景分析、客户购买趋势预测、市场的细分等。    关联规则。关联规则是描述数据库数据项之间所存在的关系的规则,即根据一个事务中某些项的出现可导出另一些项在同一事务中也出现,即隐藏在数据间的关联或相互关系。  在客户关系管理中,通过对企业的客户数据库里的大量数据进行挖掘,可以从大量的记录中发现有趣的关联关系,找出影响市场营销效果的关键因素,为产品定位、定价与定制客户群,客户寻求、细分与保持,市场营销与推销,营销风险评估和诈骗预测等决策支持提供参考依据。    特征。特征分析是从数据库中的一组数据中提取出关于这些数据的特征式,这些特征式表达了该数据集的总体特征。如营销人员通过对客户流失因素的特征提取,可以得到导致客户流失的一系列原因和主要特征,利用这些特征可以有效地预防客户的流失。    变化和偏差分析。偏差包括很大一类潜在有趣的知识,如分类中的反常实例,模式的例外,观察结果对期望的偏差等,其目的是寻找观察结果与参照量之间有意义的差别。在企业危机管理及其预警中,管理者更感兴趣的是那些意外规则。意外规则的挖掘可以应用到各种异常信息的发现、分析、识别、评价和预警等方面。    Web页挖掘。随着Internet的迅速发展及Web 的全球普及, 使得Web上的信息量无比丰富,
新⼿来看:如何设计数据库结构   有⼀定启发的,前⾯⼏段就不⽤看了,重点在后⾯。   本⽂为开发⼈员提供了⼀些技巧,使⽤这些技巧可以在设计 Access 表时避免某些问题。本⽂适⽤于 Microsoft Access 数 据库 (.mdb) 和 Microsoft access 项⽬ (.adp)。   简介   在设计数据库时,最重要的步骤是要确保数据正确分布到数据库的表中。使⽤正确的数据结构,可以极⼤地简化应⽤程序 的其他内容(查询、窗体、报表、代码等)。正确进⾏表设计的正式名称是"数据库规范化"。   本⽂简要介绍数据库规范化的基本概念和⼀些需要注意并⼒求避免的常见问题。   理解您的数据   在设计表之前,应明确您打算如何处理数据,还要了解随着时间的推移数据会发⽣什么样的变化。您所做的假设将会影响 最终的设计。   您需要什么样的数据?   设计应⽤程序时,关键要了解设计的最终结果,以便确保您准备好所有必需的数据并知道其来源。例如,报表的外观、每 个数据的来源以及所需的所有数据是否都存在。对项⽬损失的莫过于在项⽬后期发现重要报表缺少数据。   知道需要什么样的数据后,就必须确定数据的来源。数据是否从其他数据源中导⼊?数据是否需要清理或验证?⽤户是否 需要输⼊数据?   明确所需数据的类型和来源是数据库设计的第⼀步。   您打算如何处理这些数据?   ⽤户是否需要编辑这些数据?如果需要,应如何显⽰数据以便于⽤户理解和编辑?有没有验证规则和相关的查找表?要求 对编辑和删除保留备份的数据输⼊有没有相关联的审核问题?需要为⽤户显⽰哪些摘要信息?是否需要⽣成导出⽂件?了解这 些信息后,就可以想象字段之间是如何相互关联的了。   数据之间如何相互关联?   将数据分组放⼊相关字段(例如与客户相关的信息、与发票相关的信息等),每个字段组都代表要建⽴的表。然后考虑如 何将这些表相互关联。例如,哪些表具有⼀对多关系(例如,⼀个客户可能持有多张发票)?哪些表具有⼀对⼀关系(这种情 况下,通常会考虑将其组合到⼀个表中)?   随着时间的推移数据会发⽣什么样的变化?   设计表之后,常常会由于没有考虑时间的影响⽽导致以后出现严重问题。许多表设计在当时使⽤时效果⾮常好,但是,常 常会因为⽤户修改数据、添加数据以及随时间的推移⽽崩溃。开发⼈员经常会发现需要重新设计表的结构来适应这些变化。表 的结构发⽣变化时,所有相关的内容(查询、窗体、报表、代码等)也必须随之更新。理解并预测数据会随时间推移发⽣哪些 变化,可以实现更好的设计,减少问题的发⽣。   学习如何使⽤查询   了解如何分析和管理数据同样很重要。您应该深刻理解查询的⼯作原理,理解如何使⽤查询在多个表之间链接数据,如何 使⽤查询对数据进⾏分组和汇总,以及如何在不需要以规范化格式显⽰数据时使⽤交叉表查询。   好的数据设计的最终⽬标就是要平衡两个需要:既要随着时间的推移有效地存储数据,⼜要轻松地检索和分析数据。理解 查询的功能对正确设计表很有帮助。   数据库规范化概念   这部分介绍数据库规范化所涉及的基本概念,⽽不是对数据库规范化进⾏理论性的探讨。如何在您的实际情况中应⽤这些 概念可能会随着应⽤程序需要的不同⽽有所变化。这部分的⽬的是理解这些基本概念、根据实际需要应⽤它们,并理解偏离这 些概念将会出现哪些问题。   将信息存储在⼀个地⽅   ⼤部分数据库开发⼈员都理解数据库规范化的基本概念。理想情况下,您希望将相同的数据存储在同⼀个地⽅,并在需要 引⽤时使⽤ ID 来进⾏引⽤。因此,如果某些信息发⽣了变化,则可以在⼀个地⽅进⾏更改,⽽整个程序中的相应信息也会随 之更改。   例如,客户表会存储每个客户的记录,包括姓名、地址、电话号码、电⼦邮件地址以及其他特征信息。客户表中可能包含 的 CustomerID 字段(通常是 Autonumber 字段),这个字段即该表的主键字段,其他表使⽤它来引⽤该客户。因此,发票表 可以只引⽤客户的 ID 值,⽽不是在每张发票中存储客户的所有信息(因为同⼀个客户可能会持有多张发票),这样利⽤客户 的 ID 值即可从客户表中查找客户的详细信息。使⽤ access 中功能强⼤的窗体(使⽤组合框和⼦窗体),可以轻松地完成这 项⼯作。如果需要修改客户信息(例如新增电话号码),只需在客户表中修改,应⽤程序中引⽤该信息的任何其他部分都会随 之⾃动更新。   使⽤正确规范化的数据库,通过简单的编辑即可轻松处理数据随时间推移⽽发⽣的更改。使⽤未正确规范化的数据库,通 常需要利⽤编程或查询来更改多条记录或多个表。这不仅会增加⼯作量,还会增加由于未正确执⾏代码或查询⽽导致数据不⼀ 致的可能性。
C#版本数据结构,用C#的同志们有福啦 本书节选: 第1章 绪论 数据是外部世界信息的计算机化,是计算机加工处理的对象。运用计算机处 理数据时,必须解决四个方面的问题:一是如何在计算机中方便、高效地表示和 组织数据;二是如何在计算机存储器(内存和外存)中存储数据;三是如何对存 储在计算机中的数据进行操作,可以有哪些操作,如何实现这些操作以及如何对 同一问题的不同操作方法进行评价;四是必须理解每种数据结构的性能特征,以 便选择一个适合于某个特定问题的数据结构。这些问题就是数据结构这门课程所 要研究的主要问题。本章首先说明学习数据结构的必要性和本书的目的,然后解 释数据结构及其有关概念,接着讨论算法的相关知识,最后简单介绍本书所要用 到的相关数学知识和C#知识。 1.1 数据结构 1.1.1 学习数据结构的必要性 我们知道,虽然每个人都懂得英语的语法与基本类型,但是对于同样的题目, 每个人写出的作文,水平却高低不一。程序设计也和写英语作文一样,虽然程序 员都懂得语言的语法与语义,但是对于同样的问题,程序员写出来的程序不一样。 有的人写出来的程序效率很高,有的人却用复杂的方法来解决一个简单的问题。 当然,程序设计水平的提高仅仅靠看几本程序设计书是不行的。只有多思索、 多练习,才能提高自己的程序设计水平;否则,书看得再多,提高也不大。记得 刚学程序设计时,常听人说程序设计水平要想提高,最重要的是多看别人写的程 序,多去思考问题。从别人写的程序中,我们可以发现效率更高的解决方法;从 思考问题的过程中,我们可以了解解决问题的方法常常不只一个。运用先前解决 问题的经验,来解决更复杂更深入的问题,是提高程序设计水平的最有效途径。 数据结构正是前人在思索问题的过程中所想出的解决方法。一般而言,在学 习程序设计一段时间后,学习“数据结构”便能让你的程序设计水平上一个台阶。 如果只学会了程序设计的语法和语义,那么你只能解决程序设计三分之一的问 题,而且运用的方法并不是最有效的。但如果学会了数据结构概念,就能在程 序设计上,运用最有效的方法来解决绝大多数的问题。 《数据结构》这门课程的目的有三个。第一个是讲授常用的数据结构,这些 数据结构形成了程序员基本数据结构工具箱(toolkit)。对于许多常见的问题,工 具箱里的数据结构是理想的选择。就像.NET Framework 中Windows应用程序开 发中的工具箱,程序员可以直接拿来或经过少许的修改就可以使用,非常方便。 第二个是讲授常用的算法,这和数据结构一样,是人们在长期实践过程中的总结, 程序员可以直接拿来或经过少许的修改就可以使用。可以通过算法训练来提高程 序设计水平。第三个目的是通过程序设计的技能训练促进程序员综合能力的提 高。 1.1.2 基本概念和术语 在本小节中,将对一些常用的概念和术语进行介绍,这些概念和术语在以后 的章节中会多次出现。 1、数据(Data) 数据是外部世界信息的载体,它能够被计算机识别、存储和加工处理,是计 算机程序加工的原料。计算机程序处理各种各样的数据,可以是数值数据,如整 数、实数或复数;也可以是非数值数据,如字符、文字、图形、图像、声音等。 2、数据元素(Data Element)和数据项(Data Item) 数据结构(C#语言版) 1.1 数据结构2 数据元素数据的基本单位,在计算机程序中通常被作为一个整体进行考虑 和处理。数据元素有时也被称为元素、结点、顶点、记录等。一个数据元素可由 若干个数据项(Data Item)组成。数据项是不可分割的、含有独立意义的最小数据 单位,数据项有时也称为字段(Field)或域(Domain)。例如,在数据库信息处理系 统中,数据表中的一条记录就是一个数据元素。这条记录中的学生学号、姓名、 性别、籍贯、出生年月、成绩等字段就是数据项数据项分为两种,一种叫做初 等项,如学生的性别、籍贯等,在处理时不能再进行分割;另一种叫做组合项, 如学生的成绩,它可以再分为数学、物理、化学等更小的项。 3、数据对象(Data Object) 数据对象是性质相同的数据元素的集合,是数据的一个子集。例如,整数数 据对象是{0,±1,±2,±3,…},字符数据对象是{a,b,c,…}。 4、数据类型(Data Type) 数据类型是高级程序设计语言中的概念,是数据的取值范围和对数据进行操 作的总和。数据类型规定了程序中对象的特性。程序中的每个变量、常量或表达 式的结果都应该属于某种确定的数据类型。例如,C#语言中的字符串类型(String, 经常写为string)。一 个String表示一个恒定不变的字符序列集合,所有的字符序 列集合构成String的取值范围。我们可以对String进行求长度、复制、连接两个 字符串等操作。 数据类型可分为两类:一类是非结构的原子类型,如C#语言中的基本类型 (整型、实型、字符型等);另一类是结构类型,它的成分可以由多个结构类型 组成,并可以分解。结构类型的成分可以是非结构的,也可以是结构的。例如, C#语言中数组的成分可以是整型等基本类型,也可以是数组等结构类型。 5、数据结构(Data Structure) 数据结构相互之间存在一种或多种特定关系数据元素的集合。在任何问 题中,数据元素之间都不是孤立的,而是存在着一定的关系,这种关系称为结构 (Structure)。根据数据元素之间关系的不同特性,通常有4类基本数据结构: (1) 集合(Set):如图1.1(a)所示,该结构中的数据元素除了存在“同属于一个集 合”的关系外,不存在任何其它关系。 (2) 线性结构(Linear Structure):如图1.1(b)所示,该结构中的数据元素存在着一 对一的关系。 (3) 树形结构(Tree Structure):如图1.1(c)所示,该结构中的数据元素存在着一对 多的关系。 (4) 图状结构(Graphic Structure):如图1.1(d)所示,该结构中的数据元素存在着 多对多的关系。 (a) 集合 (b) 线性结构 (c) 树形结构 (d)图状结构 图 1.1 4 类基本数据结构关系图 由于集合中的元素关系极为松散,可用其它数据结构来表示,所以本书不 做专门介绍。关于集合的概念在1.3.1小节中有介绍。 数据结构的形式化定义为: 数据结构(C#语言版) 1.1 数据结构3 数据结构(Data Structure)简记为DS,是一个二元组, DS = (D,R) 其中:D是数据元素的有限集合, R是数据元素之间关系的有限集合。 下面通过例题来进一步理解后3类数据结构。 【例1-1】 学生信息表(如表1.1所示.)是一个线性的数据结构,表中的每 一行是一个记录(在数据库信息处理系统中,表中的一个数据元素称为一个记 录)。一条记录由学号、姓名、行政班级、性别和出生年月等数据项组成。表中 数据元素之间关系是一对一的关系。 表 1.1 学生信息表 学号 姓名 行政班级 性别 出生年月 040303001 雷洪 软件04103 男 1986.12 040303002 李春 软件04103 女 1987.3 040303003 周刚 软件04103 男 1986.9 【例1-2】 家族关系是典型的树形结构,图1.2是一个三代的家族关系。在 图中,爷爷、儿子、女儿、孙子、孙女或外孙女是一个结点(在树形结构中,数 据元素称为结点),他们之间是一对多的关系。其中,爷爷有两个儿子和一个女 儿,这是一对三的关系;一个儿子有两个儿子(爷爷的孙子),这是一对二的关 系;另一个儿子有一个儿子(爷爷的孙子)和一个女儿(爷爷的孙女),这是一 对二的关系;女儿有三个女儿(爷爷的外孙女),这是一对三的关系。树形结构 具有严格的层次关系,爷爷在树形结构的最上层,中间层是儿子和女儿,最下层 是孙子、孙女和外孙女。不能把这种关系倒过来,因为绝对不会先有儿子或女儿 再有爷爷,也不会先有孙子或孙女再有儿子、先有外孙女再有女儿。 外孙女 爷爷 儿子 儿子 女儿 孙子 孙子 孙子 孙女 外孙女 外孙女 图 1.2 家族关系图 【例1-3】 图1.3是四个城市的公路交通图,这是一个典型的图状结构。在 图中,每个城市是一个顶点(在图状结构中,数据元素称为顶点),它们之间是 多对多的关系。成都与都江堰、雅安直接通公路,都江堰与成都、青城山直接通 公路,青城山与都江堰、成都及雅安直接通公路,雅安与成都、青城山直接通公 路。这些公路构成了一个公路交通网,所以,又把图状结构称为网状结构(Network Structure) 数据结构(C#语言版) 1.2 算法4 成都 都江堰 青城山 雅安 图 1.3 四城市交通图 从数据类型数据结构概念可知,二者的关系非常密切。数据类型可以看 作是简单的数据结构数据的取值范围可以看作是数据元素的有限集合,而对数 据进行操作的集合可以看作是数据元素之间关系的集合。 数据结构包括数据的逻辑结构和物理结构。上述数据结构的定义就是数据的 逻辑结构(Logic Structure),数据的逻辑结构是从具体问题抽象出来的数学模型, 是为了讨论问题的方便,与数据在计算机中的具体存储没有关系。然而,我们讨 论数据结构的目的是为了在计算机中实现对它的操作,因此还需要研究在计算机 中如何表示和存储数据结构,即数据的物理结构(Physical Structure)。数据的物理 结构又称为存储结构(Storage Structure),是数据在计算机中的表示(又叫映像) 和存储,包括数据元素的表示和存储以及数据元素之间关系的表示和存储。 数据的存储结构包括顺序存储结构和链式存储结构两种。顺序存储结构 (Sequence Storage Structure)是通过数据元素在计算机存储器中的相对位置来表 示出数据元素的逻辑关系,一般把逻辑上相邻的数据元素存储在物理位置相邻的 存储单元中。在C#语言中用数组来实现顺序存储结构。因为数组所分配的存储 空间是连续的,所以数组天生就具有实现数据顺序存储结构的能力。链式存储结 构(Linked Storage Structure)对逻辑上相邻的数据元素不要求其存储位置必须相 邻。链式存储结构中的数据元素称为结点(Node),在结点中附设地址域(Address Domain)来存储与该结点相邻的结点的地址来实现结点间的逻辑关系。这个地址 称为引用(Reference),这个地址域称为引用域(Reference Domain)。 从20世纪60年代末到70年代初,出现了大型程序,软件也相对独立,人 们越来越重视数据结构,认为程序设计的实质是确定数据结构,加上设计一个好 的算法,这就是人们常说的“程序=数据结构+算法”。下一节谈谈算法的问题。 1.2 算法 从上节我们知道,算法与数据结构和程序的关系非常密切。进行程序设计时, 先确定相应的数据结构,然后再根据数据结构和问题的需要设计相应的算法。由 于篇幅所限,下面只从算法的特性、算法的评价标准和算法的时间复杂度等三个 方面进行介绍。 1.2.1 算法的特性 算法(Algorithm)是对某一特定类型的问题的求解步骤的一种描述,是指令的 有限序列。其中的每条指令表示一个或多个操作。一个算法应该具备以下5个特 性: 1、有穷性(Finity):一个算法总是在执行有穷步之后结束,即算法的执行时间是 有限的。 2、确定性(Unambiguousness):算法的每一个步骤都必须有确切的含义,即无二 义,并且对于相同的输入只能有相同的输出。 3、输入(Input):一个算法具有零个或多个输入。它即是在算法开始之前给出的 数据结构(C#语言版) 1.2 算法5 量。这些输入是某数据结构中的数据对象。 4、 输出(Output):一个算法具有一个或多个输出,并且这些输出与输入之间存 在着某种特定的关系。 5、 能行性(realizability):算法中的每一步都可以通过已经实现的基本运算的有 限次运行来实现。 算法的含义与程序非常相似,但二者有区别。一个程序不一定满足有穷性。 例如操作系统,只要整个系统不遭破坏,它将永远不会停止。还有,一个程序只 能用计算机语言来描述,也就是说,程序中的指令必须是机器可执行的,而算法 不一定用计算机语言来描述,自然语言、框图、伪代码都可以描述算法。 在本书中我们尽可能采用C#语言来描述和实现算法,使读者能够阅读或上 机执行,以便更好地理解算法。 1.2.2 算法的评价标准 对于一个特定的问题,采用的数据结构不同,其设计的算法一般也不同,即 使在同一种数据结构下,也可以采用不同的算法。那么,对于解决同一问题的不 同算法,选择哪一种算法比较合适,以及如何对现有的算法进行改进,从而设计 出更适合于数据结构的算法,这就是算法评价的问题。评价一个算法优劣的主要 标准如下: 1、正确性(Correctness)。算法的执行结果应当满足预先规定的功能和性能的要求, 这是评价一个算法的最重要也是最基本的标准。算法的正确性还包括对于输入、 输出处理的明确而无歧义的描述。 2、可读性(Readability)。算法主要是为了人阅读和交流,其次才是机器的执行。 所以,一个算法应当思路清晰、层次分明、简单明了、易读易懂。即使算法已转 变成机器可执行的程序,也需要考虑人能较好地阅读理解。同时,一个可读性强 的算法也有助于对算法中隐藏错误的排除和算法的移植。 3、健壮性(Robustness)。一个算法应该具有很强的容错能力,当输入不合法的数 据时,算法应当能做适当的处理,使得不至于引起严重的后果。健壮性要求表明 算法要全面细致地考虑所有可能出现的边界情况和异常情况,并对这些边界情况 和异常情况做出妥善的处理,尽可能使算法没有意外的情况发生。 4、运行时间(Running Time)。运行时间是指算法在计算机上运行所花费的时间, 它等于算法中每条语句执行时间的总和。对于同一个问题如果有多个算法可供选 择,应尽可能选择执行时间短的算法。一般来说,执行时间越短,性能越好。 5、占用空间(Storage Space)。占用空间是指算法在计算机上存储所占用的存储空 间,包括存储算法本身所占用的存储空间、算法的输入及输出数据所占用的存储 空间和算法在运行过程中临时占用的存储空间。算法占用的存储空间是指算法执 行过程中所需要的最大存储空间,对于一个问题如果有多个算法可供选择,应尽 可能选择存储量需求低的算法。实际上,算法的时间效率和空间效率经常是一对 矛盾,相互抵触。我们要根据问题的实际需要进行灵活的处理,有时需要牺牲空 间来换取时间,有时需要牺牲时间来换取空间。 通常把算法在运行过程中临时占用的存储空间的大小叫算法的空间复杂度 (Space Complexity)。算法的空间复杂度比较容易计算,它主要包括局部变量所占 用的存储空间和系统为实现递归所使用的堆栈占用的存储空间。 如果算法是用计算机语言来描述的,还要看程序代码量的大小。对于同一个 问题,在用上面5条标准评价的结果相同的情况下,代码量越少越好。实际上, 代码量越大,占用的存储空间会越多,程序的运行时间也可能越长,出错的可能 数据结构(C#语言版) 1.2 算法6 性也越大,阅读起来也越麻烦。 在以上标准中,本书主要考虑程序的运行时间,也考虑执行程序所占用的空 间。影响程序运行时间的因素很多,包括算法本身、输入的数据以及运行程序的 计算机系统等。计算机的性能由以下因素决定: 1、硬件条件。包括所使用的处理器的类型和速度(比如,使用双核处理器还是 单核处理器)、可使用的内存(缓存和RAM)以及可使用的外存等。 2、实现算法所使用的计算机语言。实现算法的语言级别越高,其执行效率相对 越低。 3、所使用的语言的编译器/解释器。一般而言,编译的执行效率高于解释,但解 释具有更大的灵活性。 4、所使用的操作系统软件。操作系统的功能主要是管理计算机系统的软件和硬 件资源,为计算机用户方便使用计算机提供一个接口。各种语言处理程序如编译 程序、解释程序等和应用程序都在操作系统的控制下运行。 1.2.3 算法的时间复杂度 一个算法的时间复杂度(Time Complexity)是指该算法的运行时间与问题规 模的对应关系。一个算法是由控制结构和原操作构成的,其执行的时间取决于二 者的综合效果。为了便于比较同一问题的不同算法,通常把算法中基本操作重复 执行的次数(频度)作为算法的时间复杂度。算法中的基本操作一般是指算法中 最深层循环内的语句,因此,算法中基本操作语句的频度是问题规模n的某个函 数f(n),记作:T(n)=O(f(n))。其中“O”表示随问题规模n的增大,算法执行时 间的增长率和f(n)的增长率相同,或者说,用“O”符号表示数量级的概念。例 如,如 )1n(n 2 1 )n(T −= ,则 )1n(n 2 1 −的数量级与n2 相同,所以T(n)=O(n2 )。
专题九:数据结构知识 数据结构是计算机软件的一门基础课程,计算机科学各个领域及有关的应用软件都要用到各种数据结构.语言编译要使用栈、散列表及语法树;操作系统中用队列、存储管理表及目录树等;数据库系统运用线性表、多链表及索引树等进行数据管理;而在人工智能领域,依求解问题性质的差异将涉及到各种不同的数据结构,如广义表、集合、搜索树及各种有向图等等。学习数据结构目的是要熟悉一些最常用的数据结构,明确数据结构内在的逻辑关系,知道它们在计算机中的存储表示,并结合各种典型应用说明它们在进行各种操作时的动态性质及实际的执行算法,进一步提高软件计和编程水平。通过对不同存储结构和相应算法的对比,增强我们根据求解问题的性质选择合理的数据结构,并将问题求解算法的空间、时间及复杂性控制在一定范围的能力。 软件设计师考试大纲对数据结构部分的要求是熟练掌握常用数据结构和常用算法,因此,本专题从数据结构的概述出发,对基本的概念引出常用的数据结构类型的介绍和讲解,同时在讲解各种数据结构中间采用算法与数据结构相结合的方式,在算法步骤中使用数据结构,对数据结构的重点、难点进行了分析,最后讲解了与数据结构紧密相关的排序和查找算法,以及一些以往考试题的分析。 1. 数据结构概述 数据结构研究了计算机需要处理的数据对象对象之间关系;刻画了应用中涉及到的数据的逻辑组织;也描述了数据在计算机中如何存储、传送、转换。 学习数据结构注意的问题:  系统掌握基本数据结构的特点及其不同实现。  了解并掌握各种数据结构上主要操作的实现及其性能(时间、空间)的分析。  掌握各种数据结构的使用特性,在算法设计中能够进行选择。  掌握常用的递归、回溯、迭代、递推等方法的设计  掌握自顶向下、逐步求精的程序设计方法。  掌握自顶向下、逐步求精的程序设计方法。 在学习数据结构的知识之前,我们要了解一下数据结构中的基本概念数据:对客观事物的符号表示,在计算机中就是指所有能输入到计算机中并被计算机程序所处理的符号的总称。 数据项: 是数据的不可分割的最小单位; 数据元素:是数据的基本单位,在计算机程序中通常作为一个整体进行处理;一个数据元素可由若干个数据项组成。 数据对象:是性质相同的数据元素的集合,是数据的一个子集。 数据结构上的基本操作: ◆插入操作 ◆删除操作 ◆更新操作 ◆查找操作 ◆排序操作 数据结构是指数据对象及相互关系和构造方法,一个数据结构B形式上可以用一个二元组表示为B=(A,R)。其中,A是数据结构中的数据(称为结点)的非空有限集合,R是定义在A上的关系的非空有限集合。 根据数据元素之间关系的不同特性,通常有下列4类基本结构。  集合——结构中的数据元素除了“同属于一个集合”的关系外,别无其他关系。  线性结构——结构中的数据元素之间存在一个对一个的关系。  树形结构——结构中的元素之间存在一个对多个的关系。  图状结构或网状结构——结构中的元素之间存在多个对多个的关系数据结构中,结点与结点间的相互关系数据的逻辑结构。数据结构在计算机中的表示(又称为映象)称为数据的物理结构,也称存储结构。 数据元素之间关系在计算机中有两种不同的表示方式:顺序映象和非顺序映象,并由此得到两种不同的存储结构:顺序存储结构和链式存储结构。 任何一个算法的设计取决于选定的数据(逻辑)结构,而算法的实现依赖于采用的存储结构。 数据的逻辑结构分为两类: 线性结构:线性表、栈、队列和串 非线性结构:树、图 数据的存储方法有四类: 顺序存储方法 链接存储方法 索引存储方法 散列存储方法 2. 常用数据结构 2.1线性表 在数据结构中,线性结构常称为线性表,是最简单、最常用的一种数据结构,它是由n个相同数据类型的结点组成的有限序列。 其特点是:在数据元素的非空有限集合中,  ◆存在唯一的一个被称做“第一个”的数据元素  ◆存在唯一的一个被称做“最后一个”的元素数据元素  ◆除第一个之外,集合中的每个数据元素均只有一个前驱  ◆除最后一个之外,集合中每个数据元素均只有一个后继 一个由n个结点e0,e1…,en-1组成的线性表记为:(e0,e1…,en-1)。线性表的结点个数称为线性表的长度,长度为0的线性表称为空的线性表,简称空表。对于非空线性表,e0是线性表的第一个结点,en-1是线性表的最后一个结点。线性表的结点构成了一个序列,对序列中两个相邻结点ei和ei-1,称前者是后者的前驱结点,后者是前者的后继结点。 线性表最重要的性质是线性表中结点和相对位置是确定的。 线性表的结点也称为表元,或称为记录,要求线性表的结点一定是同一类型的数据。线性表的结点可由若干个成分组成,其中唯一标识表元的成分成为关键字,简称键。 线性表是一个相当灵活的数据结构,它的长度可以根据需要增长或缩短。对线性表的基本运算如下:  INITIATE(L)初始化操作  LENGTH(L) 求长度函数  GET(L,i) 取元素函数  PRIOR(L,elm)求前驱函数  NEXT(L,elm) 求后继函数  LOCATE(L,x) 定位函数  INSERT(L,i,b)插入操作  DELETE(L,i) 删除操作 有多种存储方式能将线性表存储在计算机内,其中最常用的是顺序存储和链接存储。根据存储方式的不同,其上述的运算实现也不一样。 ◆ 顺序存储:是最简单的存储方式,其特点是逻辑关系上相邻的两个元素在物理位置上也相邻。通常使用一个足够大的数组,从数组的第一个元素开始,将线性表的结点依次存储在数组中。 顺序存储方式优点:能直接访问线性表中的任意结点。 线性表的第i个元素a[i]的存储位置可以使用以下公式求得: LOC(ai)=LOC(a1)+(i-1)*l 式中LOC(a1)是线性表的第一个数据元素a1的存储位置,通常称做线性表的起始位置或基地址。 顺序存储的缺点: 1) 线性表的大小固定,浪费大量的存储空间,不利于节点的增加和减少; 执行线性表的插入和删除操作要移动其他元素,不够方便; ◆链式存储 线性表链接存储是用链表来存储线性表。 单链表(线性链表): 从链表的第一个表元开始,将线性表的结点依次存储在链表的各表元中。链表的每个表元除要存储线性表结点的信息以外,还要有一个成分来存储其后继结点的指针。 线性链表的特点是:每个链表都有一个头指针,整个链表的存取必须从头指针开始,头指针指向第一个数据元素的位置,最后的节点指针为空。当链表为空时,头指针为空值;链表非空时,头指针指向第一个节点。 链式存储的缺点: 1) 由于要存储地址指针,所以浪费空间; 直接访问节点不方便; 循环链表: 循环链表是另一种形式的链式存储结构,是单链表的变形。它的特点就是表中最后一个结点的指针域指向头结点,整个链表形成一个环。因此,从表中任意一个结点出发都可以找到表中的其他结点。 循环链表和单向链表基本一致,差别仅在于算法中循环的条件不是结点的指针是否为空,而是他们的指针是否等于头指针, 循环链表最后一个结点的 link 指针不为 0 (NULL),而是指向了表的前端。 为简化操作,在循环链表中往往加入表头结点。 循环链表的特点是:只要知道表中某一结点的地址,就可搜寻到所有其他结点的地址。 循环链表的示例: 带表头结点的循环链表 : 双向链表: 双向链表是另一种形式的链式结构,双向链表的结点中有两个指针域,其一指向直接后继,另一指向直接前趋。双向链表克服了单链表的单向性的缺点。 前驱方向 后继方向 双向链表也可以有循环表,链表中存在两个环。一个结点的前趋的后继和该结点的后继的前趋都是指向该结点的。 p == p→lLink→rLink == p→rLink→lLink 2.2 栈 栈(Stack)是限定仅在表尾进行插入或删除操作的线性表。表尾端称栈顶(top),表头端称栈底(bottom)。 若有栈 S=(s0,s1,…,sn-1)则s0为栈底结点,sn-1为栈顶结点。通常称栈的结点插入为进栈,栈的结点删除为出栈。因为最后进栈的结点必定最先出栈,所以栈具有后进先出的特点。可以用一下一个图形来形象的表示: 栈有两种存储结构:顺序栈和链栈 顺序栈即栈的顺序存储结构是,利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时设指针top指示栈顶元素的当前位置。 栈也可以用链表实现,链式存储结构的栈简称链栈。若同时需两个以上的栈,则最好采用这种结构。对于栈上的操作,总结如下,大家可以仔细看一下这些程序,一个大的程序都是由一些对数据结构的小的操作组成的。 顺序存储的栈的基本操作如下: 判断栈满: int stackfull(seqstack *s) { return (s->top= =stacksize-1); } 进栈: void push(seqstack *s,datatype x) { if (stackfull(s)) error(“stack verflow”); s->data[++s->top]=x; } 判断栈空: int stackempty(seqstack *s) { return (s->top= = -1) } 出栈: datatype pop(seqstack *s) { if (stackempty(s)) error(“stack underflow”); x=s->data[top]; s->top--; return (x); }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值