BMP格式文件的数据结构

BMP格式文件的数据结构,第1张

BMP是一种与硬件设备无关的图像文件格式,其支持1,4,8,16,24,32位的图像存储,并且支持非压缩和压缩这两种存储方式,数据是以Little Endian依次存储。由于历史的原因,存在Windows和OS/2两种类型的BMP,目前Windows类型的BMP基本上可是说是事实上的标准,下面均以此类型BMP文件为例,其文件主要由以下3部分组成: (1)文件头和信息头 typedef struct _tag_BMP_FILEHEADER{ WORD bfType; //2Bytes,必须为"BM",即0x424D DWORD bfSize; //4Bytes,整个BMP文件的大小 WORD bfReserved1; //2Bytes,保留字,可设为0 WORD bfReserved2; //2Bytes,保留字,可设为0 DWORD bfOffBits; //4Bytes,文件起始位置到图像像素数据的偏移 } BMP_FILEHEADER; typedef struct _tagBMP_INFOHEADER{ DWORD biSize; //4Bytes,INFOHEADER结构体大小,存在其他版本INFOHEADER,用作区分 LONG biWidth; //4Bytes,图像宽度(以像素为单位) LONG biHeight; //4Bytes,图像高度,+:图像存储顺序为Bottom2Top,-:Top2Bottom WORD biPlanes; //2Bytes,图像数据平面,BMP存储RGB数据,因此总为1 WORD biBitCount; //2Bytes,图像像素位数 DWORD biCompression; //4Bytes,0:不压缩,1:RLE8,2:RLE4 DWORD biSizeImage; //4Bytes,4字节对齐的图像数据大小 LONG biXPelsPerMeter; //4 Bytes,用象素/米表示的水平分辨率 LONG biYPelsPerMeter; //4 Bytes,用象素/米表示的垂直分辨率 DWORD biClrUsed; //4 Bytes,实际使用的调色板索引数,0:使用所有的调色板索引 DWORD biClrImportant; //4 Bytes,重要的调色板索引数,0:所有的调色板索引都重要 } BMP_INFOHEADER; (2)调色板数据(可选) 1,4,8位图像会使用调色板数据,其它不需要调色板数据,即调色板最多只需要256项(索引0 - 255),调色板数据通常采用如下数据结构: typedef struct _tagRGBQUAD { BYTE rgbBlue; BYTE rgbGreen; BYTE rgbRed; BYTE rgbReserved; } RGBQUAD; (3)图像像素数据; 采用四字节对齐存放的方式。

1数字地质图

传统的纸质模拟地图是根据地图模型(map model),按照一定的数学法则、符号、制图综合原理和比例,将地球空间实体和现象的形状、大小、相互位置、基本属性等表示在二维平面上。“数字地图”,简单地说,就是存储在计算机中数字化了的地图。一般来讲,数字地图是以地图数据库为基础,以数字形式存贮于计算机外存储器上,并能在电子屏幕上实时显示的可视地图,又称“屏幕地图”或“瞬时地图”。

(1)地质图

“地质图”乃是一切地质工作中的基本图件,用规定的符号、不同的颜色、描绘一地区的地质现象,反映沉积岩、岩浆岩、变质岩、各类矿产、各种型式的地质构造线等,反映它们形成的时代、分布和相互关系,以三维空间的立体形状表示在二维空间的平面上。金泽兰等在《地质图编汇法》中,提出地质图是一种将出露在地表的地质构造现象按比例投影到平面图(通常带有地形等高线,即地形图)上,并用规定的符号、色谱、花纹予以表示的图件。它是为特定目的服务的、有选择性地表示地质对象的时间和空间分布的符号化表现形式。在地质图上表示的地质对象即可以根据地质属性分类集合进行选择,也可以按照地理范围进行表示,一般情况下是两者结合进行的。总的来说,地质图是现实世界中地质客体在人脑中抽象的、具体的表达,是现实地质对象在图纸上的映射。如图7-11所示。

图7-11 地质图认知模式

一幅地质图总的内容应有地理要素(经纬度、坐标、地物、地貌)和地质要素(地质界线、构造线、矿层、矿体等),但比例尺不同取舍不一,图件的负载量也就不同。本文重点在于介绍地质要素,主要包括以下几方面的内容:

1)地质界线:地质图上各种地质界线是表示各种地质体在地表的露头及剥土后的分布情形。具体地说,就是各类地质体(沉积岩、变质岩、岩浆岩、矿层、矿体、构造线、断层等等)在地表的露头及剥土后的分布连线的投影,以此阐明一地区的地质特征。

2)构造线:在地质图上的构造线,根据比例尺大小而取舍。比例尺大时,小型构造也应表示;比例尺小时,则只能表示大一些的构造。构造线有以下几种:①断裂构造:包括正断层、逆断层、逆掩断层、平移断层、复活断层;②褶皱构造:在地质图上,一般的产状表示褶皱构造,而不表示褶皱轴线。褶皱构造有:向斜、背斜、倒转背斜、倒转向斜、隐伏背斜、短轴背斜和短轴向斜、穹窿构造及盆状构造;③裂隙、节理、片理、劈理、流线或流纹构造等。

3)产状:主要指矿体或岩层的走向和倾斜。走向是倾斜的岩层层面或矿层层面与水平面相交直线的延伸方向。倾斜包括倾向和倾角。倾向是垂直于岩层走向的倾斜线的水平投影的指向。倾角是倾斜层面和水平面在倾向方位上所夹的角度。

4)岩层的接触关系有:①整合接触:指同一地区两套沉积岩层的接触关系,在沉积层序上是连续的,产状是一致的,在上覆地层沉积之前,下伏地层没有曲褶、翘起或被侵蚀过;②不整合接触:同一地区两套岩层之间没有明显的沉积间断或缺失,古生物演化顺序是不连续的。不整合接触的两套地层的产状,有的可以是一致的,有的具有明显的角度相交。不整合接触类型包括角度不整合、假不整合等。③假整合(平行不整合):新、老两套岩层之间互相平行,但二者之间往往有较长期的沉积间断和显著的侵蚀面。

5)矿体露头:是指矿体露出地面的部分。

6)矿化带:是地质图上的主要内容之一,对含有矿化带,蚀变岩,标志层,均应表示。一副地质图除应有上述内容之外,还应表示出经纬线网、比例尺、图例、图名以及责任表等。

其所显示的信息类型的种类来讲是非常复杂的,大多数地质图都包含有多边形的背景信息,它们表示了地质单元及其之上的覆盖物,如水、冰等。将多边形分离的边界线的表示是非常重要的,它们表示了地质界线类型的区别,如接触关系等。将这些背景数据叠置在一起,就可以得到许多线状要素,如断层、褶皱、堤等,以及不同类型的点状要素,如构造符号、样点位置符号等。

(2)数字地质图

数字地质图(digital geologic map,简称dgm)是地质图的数字表现形式;从认知科学来讲,数字地质图是计算机技术应用于地球科学的结果,它将地理基础和地质解译数据记录成计算机可读的数字形式,以反映客观的地质世界。从数学角度严格地讲,数字地质图是地质空间对象、地质对象描述数据、图例的交集。如果用集合数学表示,则为:

DGM={Oi,Aj,Lk} (7-1)

(i=1,2,…,n;j=1,2,…,m;k=1,2,…,y)

式中:Oi为地质空间对象集合,Aj为地质空间对象描述数据集合,Lk为图例集合。一般的,对于一幅给定地质图,在给定的空间域中可以有个地质空间对象;对于一个给定的地质空间对象可以有0个或j个描述数据;而对于一幅数字地质图只能有且有一个图例与之对应。

图7-12 数字地质图定义的图解表示

图7-12模型中每一闭合的圈表示每一类对象或其一部分。空间对象(spatial objects)是真实地质世界能够被观测到具有几何形态特征的地质要素(地质单元和地质构造)的数字化抽象,能被典型地以点、线、面展示在二维平面图上;属性数据(描述数据)(descriptive data)是空间对象代表的地质要素所具有的地质属性特征,这些特征包括具体可见的物理特征,如颜色、出露形态、纹理,还有看肉眼看不见的化学组成、变质特征、地质年代、地质成因等;地图图例(map legends)是用于抽取相似(分类)的空间对象进行符号化展示,图例还包括了地图范围、比例尺、所用的分类标准、每类空间对象与对应的展示符号。

空间对象(spatial objects)与描述数据(descriptive data)的交集是具有几何图形和属性描述数据的单个空间对象(singular object archive),描述数据(descriptive data)与地图图例(map legends)的交集是按描述属性进行的数据分类(data classification),空间对象(spatial objects)与地图图例(map legends)的交集是按空间对象类型进行的空间分类(spatial classification)。

地图(map)是空间对象(spatial objects)及其描述数据(descriptive data)和地图图例(map legends)的交集,也是单个空间对象(singular object archive),空间分类(spatial classification)和数据分类(data classification)二者的交集,它是真实地质世界在地质图上的可视化、数字化的表现。

根据这一定义,可以得出如下 *** 作(图7-12):

空间分类=地质空间对象∩图例

数据选取和分类=属性数据∩图例

地质对象=地质空间对象∩属性数据

因此,图例类似于一个过滤器,当地质空间数据库建立以后,要得到一幅数字地质图,只需要根据制图目的和用途,设计图例;再用图例对空间数据库中的地质对象进行提取,便可以得到所需要的数字地质图。而图例的不同,可以得到不同主题的地质图,如区域地质图、矿产图、石油地质图等。

数字地质图是矿产勘查与评价所需空间数据的主要来源之一,准确合理地使用这些空间数据是确定矿产资源储量及其空间位置的基本保证。虽然,多数地图制图学家并不都赞成数字地图在地图制图方面比传统方法更为有效和省时,但几乎都认为起码在数据更新方面数字地图比传统地图更加有效和省时,而且数字地质图在地质数据的重复使用方面已经远远地超过了最初设计的要求。数字地质图可以根据需要以不同比例尺和不同地图投影进行重绘与变换,很容易增添、删除和修改地图要素,生成新用途的专题地质图。数字地质图与地球物理、地球化学遥感地质等多源地学数据综合集成,可以进行地质矿产资源评价与预测,也可以与环境数据集成进行地质环境评价等等。总之,数字地质图的用途是多方面的,它使地质图在资源环境、国民经济建设和社会各个方面的使用无限制的拓宽,具有重要的意义。

2数字地质图数据库的构成要素

地质图空间数据库的各组成要素主要包括:对象类、要素类、关系类、综合要素类和要素数据集。组成地质图空间数据库要素数据集分为三大类:基本要素数据集、综合要素数据集和对象数据集。

(1)地质图数据库数据对象的定义

地质图空间数据库组织模型把地质图数据组织成关系型的数据对象:对象类、要素类、关系类、综合要素类和要素数据集。一个对象类在地理数据库是一个表,存储非空间数据。一个要素类是具有相同几何类型和相同属性的要素的集合。一个要素数据集是共享空间参考系统的要素类的集合。关系类是由一个关系规则构成的关联集合(可以用关联、依赖、组合和继承来描述对象之间的关系规则)。综合要素类与要素类相同,是共享空间参考系统的多个要素类的集合,在地质图数据模型中,由复合地质点、面、线要素实体类构成,但不与其他要素类构成拓扑关系。该数据模型对空间要素的定义更接近于现实世界,这种面向对象的数据模型,使用户可以根据具体的需要进行扩展,具有用户可定定义的特征(指对象类)。地质图数据对象定义如下。

(2)地质图要素数据集

地质图要素数据集是共享空间参考系统的要素类的集合。在地质图数据模型中,由地质点、面、线要素实体类构成。一个要素数据集的空间参考指定了包括坐标系统、投影系统和高程系统的空间参照系、空间域和精度。

地质图空间数据库的坐标系统可采用地理坐标系、北京54坐标系和西安80坐标系。地质图空间数据库的投影系统可根据比例尺不同进行选择。我国基本比例尺地形图除1:100万采用兰勃特投影(lambert)外,其他均采用高斯-克吕格投影。为减少投影变形,高斯-克吕格投影分为3度或6度带投影。地质图空间数据库的高程系统系统采用跟1956年黄海高程系,1985年国家高程基准。空间域为描述X和Y坐标范围、测量范围、Z范围,空间域描述了最大的空间范围。要素数据集的空间参考确定后,坐标系统可以改变,空间域则是固定的。

(3)地质图要素类

具有拓扑关系且具有相同几何类型和相同属性的要素的集合称为地质图要素类。构成地质图的点称为地质图点要素类,构成地质图的线称为地质图线要素类、构成地质图的面称为地质图面要素类。

(4)独立要素类

在地质图空间数据库中建立一个不属于任何要素数据集的要素类。其特点是独立要素类需要建立自己的空间参考坐标系统,并设定自己的投影系统参数和/X/Y域。在地质图数据模型中,图例及图饰部分(如:接图表、图例、综合柱状图、责任表、图切剖面、其他角图等)属于独立要素类。该独立要素类可采用平面坐标系。

(5)对象类

在地理数据库中,把实体分为对象。具有空间几何类型的对象称为要素类,把非空间几何类型的对象称为对象类。对象类在地理数据库中是一个表,存储非空间数据。在地质图数据模型中,一般一个要素类对应多个对象类。当一个表中的对象使用不同的属性域时,可以使用子类型来构成不同属性域的对象类。

(6)综合要素类

与要素类相同,是共享空间参考系统的要素类的集合。在地质图数据模型中,由复合地质点、线、面要素实体类构成。不与其他要素类构成拓扑关系。

(7)有效性规则

表和要素类存储相同类型的对象,具有相同的行为和属性。当要素类和表中的一个对象在所有的属性上具有有效值时,这个对象被称为有效对象;如果其中的一个属性包括无效值,则称为无效对象。在进行地理数据库设计时,通过建立一个或多个有效规则,可以确定如何判断要素类或表中一个特定对象的有效性。有效规则:属性域(attributedomain)、连接规则(connectivity rules)、关系规则(relationship rules)、定制规则(custom rules)。

(8)属性域

属性域(domains)是一个字段类型的合法值的规则,用于限制在表、要素类、或子类型的任何具体的属性字段内允许的值。每个要素类或表有一个属性域的集合,这些属性域用于不同的属性和子类型,并且可以在地理数据库的要素类和表之间共享。属性域可分为范围域和代码域。

3数字地质图数据库模型分析

研究数字地质图数据模型的目的是为了在计算机中对地质图数据的组织、存储和应用提供一种结构,该结构应当独立于任何计算机应用软件,可以在任何GIS系统中实现。数字地质图建模是把地质图所包含数据组织为有用的,且更能反映地质实体真实信息的数据集合的过程,它是一个逻辑组织方式。数据建模过程分为三步:首先,选择一种数据模型来对现实世界的数据进行组织;然后,选择一些数据结构来表达该数据模型;最后,选择一些适合记录该数据结构的文件格式。一种数据模型可能有几种可选的数据结构,而一种数据结构又可能有多种文件格式进行存储[ bonham-cater,1994;陈述彭,1999 ]。如何使地质图数据模型、数据结构和文件存储格式有机地统一起来、自然过渡,而且各自保持其独立性,即各部分不随其他部分变化而变化?如何使计算机更具智能化,能够理解复杂的地质空间?这都是数据模型要研究和解决的问题。

传统的地质图数据模型不能很好地解决上述问题,面向对象的技术和方法给我们带来了曙光。面向对象数据模型是以单个空间地理对象为数据组织和存储的基本单位的,与拓扑关系数据模型相反,以独立完整、具有地理意义的对象为基本单位对地理空间进行表达,典型实例是ESRI公司的GeoDa-taBase模型。在具体组织和存储时,将对象的坐标数据和属性数据(如建立了部分拓扑,拓扑关系也放在表中保存)统一存放在关系数据库中。利用面向对象的思想对数字地质图数据进行重新组织与存储,使得数据的表达更接近于人们对客观世界的认识,其语义关系和内部关系更加合理,大大增强了高层次的地质空间分析能力。该模型在本质上更加概念化,而且更注重未来的发展。它使得数字地质图独立于任何给定的软件和硬件结构。面向对象数据模型在诸如ArcGIS和Smallword软件中可以实现。

面向对象数据模型要求点、线、面、注记分开存贮。对同一类空间对象赋予唯一的一个编码,存储时仅存储简单的点、线、面实体对象,显示输出时根据编码显示其相应的符号或线型。这即是实体符号化,它减少了空间数据的冗余,提高了空间分析的效率,体现了GIS与CAD的最大区别是内容与表现形式分离。通常用全要素编码(class id)标识区分各类空间对象,借助相应的(点)符号、线型和(面)填充形象化表达实体对象,实体的编码、符号用外挂的符号库存储。面向对象数据模型的组成结构图(图7-13)。

图7-13 面向对象数据模型的组成结构图

基于GIS的地质数据库建立涉及的主要问题是系统的数据库结构。空间数据库结构建设应从GIS理论基本概念出发,所涉及的主要内容有空间点、线、面图形数据以及空间图元组合图层、图类等,一般以GIS图层为基本出发点采用层状树形结构管理各图层。结构化的表格数据,例如属性数据、文本数据由关系数据库系统(rdbms)管理,利用oledb等数据通信技术实现空间数据和属性数据的同时存储。从而,系统实现综合查询、数据统计、分析预测、制图输出、报表生成、数据表现等多方面的应用。建立一个geodatabase数据库,包含上述所有数据类型,通过在catalog 92 中的树状文件目录管理图层(catalog tree),我们可以清晰地看到,一个geodatabase所能包含的所有数据类型。包含所有数据类型的geodatabase树状展开图,如图7-14所示。

ESRI提出的geodatabase空间数据模型,将空间数据存放在关系数据表中,空间对象或特征是具有geometry属性的表(table)中的一个行(bow)to geodatabase的对象模型包括对象(object)、特征(feature)、关系(relationship)三种类型的对象,这些对象在关系数据库中表示如表格7-1所示:

表7-1 geodatabase对象及其在关系数据库中的表示方法

图7-14 包含所有数据类型的GeoDatabase树状展开图

面向对象数据模型具有对象管理、修改方便,查询检索、空间分析容易的优点。根据存储的数据类型,面向对象数据模型具体包括空间特征集、栅格数据集、TIN数据集、空间定位数据、域和规则等六大类型。该模型采用面向对象技术,将各类专题对象按点、线、面和注记四大空间特征抽象为空间对象类,分别用不同的空问表存储;将空间对象的几何特征(图形)、属性特征连同一些 *** 作封装为对象的属性和行为,统一存放在数据表的列中,一条记录对应一个点、线或面类型的空间对象,其存贮结构如图7-15所示:

图7-15 以对象为中心的面向对象数据模型实现图形和属性统一存储

这种数据模型彻底解决了长期以来空间对象与其属性数据,在物理上分离带来的诸多难题,进而实现基于关系数据库的GIS空间数据一与其他非空间关系数据一体化管理,给GIS系统开发、应用带来了极大的便捷性。如利用空间引擎对空间与非空间数据进行 *** 作,同时可以利用大型关系数据库海量数据管理、事务处理(transaction)、记录锁定、并发控制、数据仓库等功能。

4GIS与数字地质图数据库的结合

GIS是分析和处理海量地理数据的通用技术,借助GIS,基于大量综合信息,可进行空间采样,对构造演化、火成活动、沉积相、矿产形成、模拟区域地质演化等复杂问题进行时空和多元统计分析,对成矿预测和矿产勘查提供有力分析工具。在数据量充裕前提下,GIS分析具有定量、定时、定位的特点,可给出动态(不同时间、不同位置)结果。借助深部与时间数据,GIS分析实际上可拓展到四维空间。

PGardenfors提出在客观世界和符号表达之间存在着概念层,他将知识表达分为三个层次,即:亚概念层、概念层、符号层,通过亚概念层感知客观世界,然后通过概念层将感知的内容抽象成为概念进行分类,将概念(分类)通过符号层表达出来。地理信息在概念层形成,在符号层表达,所以地理信息库的建立就是通过概念层对地理空间(客观世界)的抽象而形成地理信息概念空间,将该概念空间形式化后就成为本体化的地理信息空间,即可在计算环境下通过符号层(图形)表达出来。

地质信息系统研究的关键问题之一,就是构造图7-16中的地质模型,目的是通过有限的、不完全的并且含有各种噪声的观测数据来推断地下空间的物质、能量的分布和流动情况。

图7-16 地质认知过程的简化示意图

大部分矿产都不是暴露在表面,而是埋在地表深部。利用GIS的方法通过了解地表上层物质的空间分布,就可以判断矿藏存在的可能性。在一个找矿预测区域往往已知部分矿区和矿点,这些矿区和矿点具有很多的空间属性和地理属性,要想很直观的用以往普通的数据库管理系统去把它表达出来,可谓耗时费力。而GIS的出现为矿产资源评价和管理提供了前所未有的评价工具与手段。GIS是采集、管理、处理、分析、显示、输出多种来源的与地理空间位置相关信息的计算机系统。随着GIS与RS(遥感)、GPS(全球卫星定位系统)相结合的“3 S”集成以及计算机互联网的迅速发展,GIS在地质找矿中将发挥更加重要的作用。

目前,GIS与地质空间数据库的结合主要体现在以下几点:

(1)建立地质矿产资源数据库

描述矿产地属性的数据内容繁杂,类别众多,可分为属性数据和空间数据,矿产地各类属性信息认识、分析和评价该矿区也很重要。因此,地理空间信息在矿产资源管理中占有非常重要的地位。地质矿产数据库在GIS的支持下,结合矿产资源数据类型可建立多种地理空间数据库和属性数据库,利用GIS先进的数据库和图库管理对于各种地质图件和数据的长期保存及修改变得容易。

(2)图形显示的直观性和形象性

专题图不仅是一种重要的研究手段,同时也能有效而直观的反映研究成果。在地质数据库基础上,GIS可将各种数据或分析成果以专题图的形式直观而有效的显示,并可进行人机交互式地设计、编辑、修改。在成果输出方面,GIS能够提供高质量的预测成果图件,直观清晰,一目了然。GIS的这些功能,能将各种矿产资源的文字描述与空间地理位置有效的结合与表达,大大提高了矿产资源数据的直观性和形象性。

(3)空间分析功能

GIS的空间分析功能是GIS区别于其他计算机系统的主要标志。地质数据库系统涉及GIS多种空间分析功能,结合地质“专家知识”,为大范围大区域内实现快速、准确的成矿预测创造了有利条件。GIS吸取专家的经验及知识较容易,并且进行成矿预测具有空间直观性,避免了预测中的人为因素;能够弥补一些人工方法的缺陷(如对于断裂控矿影响宽度带的确定)。与传统的方法相比,GIS空间分析功能可以更加迅速地对大量数据进行对比和分析,大大节约了时间,缩短了研究周期,

(4)多源信息的集成

地质数据库的数据是多源数据。有不同精度、不同比例尺、不同数据源、不同格式的数据,借助GIS能将这些多源的数据有机地集成在一起,能提供集成管理多源地学数据(包括以文字、数字为主的属性信息和以图形图像为主的空间信息),具有方便建立模型及进行空间模拟分析的能力,使数据的分析更有效和定量化。进而,可以以多尺度、多方位反映某个地区的地质成矿信息。

由此可见,海量的地质数据与GIS强大的空间信息处理和分析功能的有机结合,是地质领域对多源地学信息综合分析进行成矿预测划时代的理想工具。

通过以上三个章节的分析论述,GIS在理论和技术上的日臻完善和强大,使得基于GIS地质图数据库的应用更加深入人心。在理论上,地理空间和地理信息空间的点本质认识以及地理信息元组概念的提出对地理信息应用特别是在地质领域的应用理论体系的建立提供了一条理论依据和入口;在技术上,以ArcGIS为代表的新一代地理信息系统的日益完善:在地理信息表达上,以本体为核心的地理信息表达方式为地质信息的表达及应用提供了强有力的工具,使得原有地理信息所不能完成的知识发现、复杂环境建模等复杂应用在新地理信息系统下成为现实;在地理信息分析技术上,ArcGIS从地理信息库(知识库)、基于知识库的智能可视化,以及地理信息处理三个角度为地理信息的各种应用提供了强有力的工具支持,特别是90版本开发以后,对探索式空间数据分析方法整合使从海量日益复杂的地理信息中进行数据挖掘和知识发现可以在空间、时间、属性一体化方式下进行。

数据结构分为8类有:数组、栈、队列、链表、树、散列表、堆、图。数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成 。

1、数组

数组是可以再内存中连续存储多个元素的结构,在内存中的分配也是连续的,数组中的元素通过数组下标进行访问,数组下标从0开始。例如下面这段代码就是将数组的第一个元素赋值为 1。

2、栈

栈是一种特殊的线性表,仅能在线性表的一端 *** 作,栈顶允许 *** 作,栈底不允许 *** 作。 栈的特点是:先进后出,或者说是后进先出,从栈顶放入元素的 *** 作叫入栈,取出元素叫出栈。

3、队列

队列与栈一样,也是一种线性表,不同的是,队列可以在一端添加元素,在另一端取出元素,也就是:先进先出。从一端放入元素的 *** 作称为入队,取出元素为出队。

4、链表

链表是物理存储单元上非连续的、非顺序的存储结构,数据元素的逻辑顺序是通过链表的指针地址实现,每个元素包含两个结点,一个是存储元素的数据域 (内存空间),另一个是指向下一个结点地址的指针域。根据指针的指向,链表能形成不同的结构,例如单链表,双向链表,循环链表等。

5、树

树是一种数据结构,它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做 “树” 是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。

6、散列表

散列表,也叫哈希表,是根据关键码和值 (key和value) 直接进行访问的数据结构,通过key和value来映射到集合中的一个位置,这样就可以很快找到集合中的对应元素。

7、堆

堆是一种比较特殊的数据结构,可以被看做一棵树的数组对象,具有以下的性质:堆中某个节点的值总是不大于或不小于其父节点的值;堆总是一棵完全二叉树。将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。

8、图

图是由结点的有穷集合V和边的集合E组成。其中,为了与树形结构加以区别,在图结构中常常将结点称为顶点,边是顶点的有序偶对,若两个顶点之间存在一条边,就表示这两个顶点具有相邻关系。

参考资料来源:百度百科—数据结构

共有:邻接表,邻接矩阵

有向图独有:十字链表,边集数组  

无向图独有:邻接多重表  

一个一维数组存储图中顶点信息,一个二维数组(称为邻接矩阵)存储图中的边或弧的信息。

设图G有n个顶点,则邻接矩阵是一个nxn的方阵,定义为:Arc[i][j]=1,若<vi,vj>∈E或<vi,vj>∈E,反之等于0。

可以看出,无向图的邻接矩阵是对称矩阵,要想知道某个顶点的度,其实就是这个顶点vi在邻接矩阵中第i行(或第i列)的元素之和。

在有向图的邻接矩阵中,某个顶点的出(入)度是这个顶点vi在邻接矩阵中第i 行(列)的元素之和;

        我们发现,当图中的边数相对于顶点较少时,邻接矩阵是对存储空间的极大浪费。我们可以考虑对边或弧使用链式存储的方式来避免空间浪费的问题。回忆树结构的孩子表示法,将结点存入数组,并对结点的孩子进行链式存储,不管有多少孩子,也不会存在空间浪费问题。

邻接表的创建过程如下:

1)  图中顶点用一个一维数组存储,当然也可以用单链表来存储,不过用数组可以较容易的读取顶点信息,更加方便。另外,对于顶点数组中,每个数据元素还需要存储指向第一个邻接点的指针,以便于查找该顶点的边信息。

2)  图中每个顶点vi的所有邻接点构成一个线性表,由于邻接点的个数不定,所以用单链表存储,无向图称为顶点vi的边表,有向图则称为以vi为弧尾的出边表。

从图中我们知道,顶点表的各个结点由data和firstedge两个域表示,data是数据域,存储顶点的信息。

firstedge是指针域,指向边表的第一个结点,即此顶点的第一个邻接点。

边表结点由adjvex和next两个域组成。adjvex是邻接点域,存储某顶点的邻接点在顶点表中的下标,next则存储指

向边表中下一个结点的指针,比如v1顶点与v0、v2互为邻接点,则在v1的边表中,adjvex分别为v0的0和v2的2

如果想知道某个顶点的度,就去查找这个顶点的边表中结点的各数。

若要判断顶点vi和vj是否存在边,只需要测试顶点vi的边表adjvex中是否存在结点vj的下标就行了。

若求顶点的所有邻接点,其实就是对此顶点的边表进行遍历,得到的adjvex域对应的顶点就是邻接点。

有向图的邻接表中顶点vi的边表是指以vi 为弧尾 的弧来存储的,这样很容易就可以得到每个顶点的出度。

有时为了便于确定顶点的入度或以顶点为弧头的弧,可以建立一个有向图的逆邻接表,即对每个顶点vi都建立

一个链接为vi为弧头的表。如下图所示:

此时我们很容易就可以算出某个顶点的入度或出度是多少,判断两顶点是否存在弧也很容易实现。

对于带权值的网图,可以在边表结点定义中再增加一个weight的数据域,存储权值信息即可

对于有向图来说,邻接表是有缺陷的。关心了出度问题,想了解入度就必须要遍历整个图才能知道。反之,逆邻接表解决了入度

却不了解出度的情况。有没有可能把邻接表和逆邻接表结合起来呢?

答案是肯定的,就是把它们整合在一起。这种存储有向图的方法是:十字链表(Orthogonal List)

我们重新定义顶点表结点结构为:   

|    data    |     firstin   |    firstout    |

其中firstin表示入边表头指针,指向该顶点的入边表中第一个结点,firstout表示出边表头指针,指向该顶点的出边表中的第一个结点。

重新定义的 边表 结点结构如下表:

|    tailvex    |    headvex    |    headlink    |    taillink    |

其中tailvex是指弧起点在顶点表的下标,headvex是指弧终点在顶点表中的下标,headlink是指入边表指针域,指向终点(弧头)相同的

下一条边,taillink是指出边表指针域,指向起点(弧尾)相同的下一条边。如果是带权值的网,还可以再增加一个weight域来存储权值。

如下图表示的十字链表:

顶点表依然是存入一个一维数组{v0,v1,v2,v3},以顶点v0来说,firstout指向的是出边表中的第一个结点v3。所以v0边表结点的headvex=3,

而tailvex其实就是当前顶点v0的下标0,由于v0只有一个出边顶点,所以headlink和taillink都是空。

这里虚线箭头的含义,其实就是逆邻接表的表示。对于v0来说,它有两条入边,分别来自顶点v1和v2。因此v0的firstin指向顶点v1的边表

结点中headvex为0的结点,虚线(1),接着由入边结点的headlink指向下一个入边顶点v2,虚线(2)。

对于顶点v1,它有一个入边顶点v2,2个出边顶点v0和v2,所以它的firstin指向顶点v2的边表结点中headvex为1的结点,虚线(3)

十字链表的好处就是因为把邻接表和逆邻接表整合在了一起,这样既容易找到以vi为尾的弧,也容易找到以vi为头的弧,因而容易求得

顶点的出度和入度。除了结构复杂一点外,其实创建图算法的时间复杂度和邻接表是相同的,因此很好的应用在有向图中。

十字链表主要是针对有向图的存储结构进行了优化,那么对于无向图的邻接表,有没有问题呢?如果我们在无向图的应用中,关注的重点是顶点,那么邻接表是不错的选择,但如果我们更关注边的 *** 作,比如对已访问过的边做标记,删除某一条边等 *** 作,那就意味着需要找到这条边的两个边表结点进行 *** 作。如下图,若要删除(v0,v2)这条边,需要对邻接表结构中右边表的两个结点进行删除,显然这是比较繁琐的。

因此,我们也仿照十字链表的方式,对边表结点的结构进行一些改造,重新定义的边表结点结构如下表:

|    ivex    |     ilink    |     jvex    |     jlink    |

其中ivex和jvex是指某条边依附的两个顶点在顶点表中的下标。ilink指向依附顶点ivex的下一条边,jlink指向依附顶点jvex的下一条边。

这就是邻接多重表结构。如上图有4个顶点和5条边,先将边表结点画出来。由于是无向图,所以ivex,jvex正反过来都可以,为了绘图

方便,都将ivex值设置的与一旁的顶点下标相同。

下面开始连线,首先连线的(1)(2)(3)(4)是将顶点的firstedge指向一条边,顶点下标要与ivex的值相同。接着,由于顶点v0的(v0,v1)边的

邻边有(v0,v3)和(v0,v2)。因此(5)(6)的连线就是满足指向下一条依附于顶点v0的边的目标,注意ilink指向的结点的jvex(ivex)一定要与它本身

的jvex(ivex)的值相同。同理,连线(7)就是指(v1,v0)这条边,它是相当于顶点v1指向(v1,v2)边后的下一条。v2有三条边依附,所以(3)之后就有

了(8)(9)。连线(10)就是顶点v3在连线(4)之后的下一条边。左图一共有5条边,所以右图有10条连线,完全符合预期。

邻接多重表与邻接表的差别, 仅仅是在于同一条边在邻接表中用两个边表结点表示,而在邻接多重表中只有一个结点 。这样对边的 *** 作就方便

多了,若要删除左图的(v0,v2)这条边,只需要将右图的(6)(9)的链接指向改为^即可。

---- 边集数组是由两个一维数组构成。一个是存储顶点的信息;另一个是存储边的信息,这个边数组每个数据元素由一条边的起点下标(begin)、终点下标(end)和权(weight)组成。

如上图所示,边集数组关注的是边的集合,在边集数组中要查找一个顶点的度需要扫描整个边数组,效率并不高。因此它更适合对边依次

进行处理的 *** 作,而不适合对顶点相关的 *** 作

路径长度:路径上各活动持续时间的总和(即路径上所有权之和)。

完成工程的最短时间:从工程开始点(源点)到完成点(汇点)的最长路径称为完成工程的最短时间。

关键路径:路径长度最长的路径称为关键路径。

二分图是一类特殊的图,又称为双分图、二部图、偶图。二分图的顶点可以分成两个互斥的独立集 U 和 V 的图,使得所有边都是连结一个 U 中的点和一个 V 中的点。顶点集 U、V 被称为是图的两个部分。等价的,二分图可以被定义成图中所有的环都有偶数个顶点。可以将 U 和 V 当做一个着色:U 中所有顶点为蓝色,V 中所有顶点着绿色,每条边的两个端点的颜色不同,符合图着色问题的要求。相反的,非二分图无法被二着色

完全二分图 是一种特殊的二分图,可以把图中的顶点分成两个集合,使得第一个集合中的所有顶点都与第二个集合中的所有顶点相连。

欧拉图是指通过图(无向图或有向图)中所有边且每边仅通过一次通路,相应的回路称为欧拉回路。具有欧拉回路的图称为欧拉图(Euler Graph),具有欧拉通路而无欧拉回路的图称为半欧拉图。欧拉证明了如下定理: 一个非空连通图是欧拉图当且仅当它的每个顶点的度数都是偶数。 由此可得如下结论:一个连通图有欧拉迹当它至多有两个度数是奇数的顶点。

AOE网Activity On Edge Network:在现代化管理中,人们常用有向图来描述和分析一项工程的计划和实施过程,一个工程常被分为多个小的子工程,这些子工程被称为活动(Activity),在带权有向图中若以顶点表示事件,有向边表示活动,边上的权值表示该活动持续的时间,这样的图简称为AOE网。

图的存储结构-邻接助阵和邻接表  >

看看你要找的这里有没有?

※数据库的概念与用途

?数据库的概念

什么是数据库呢当人们从不同的角度来描述这一概念时就有不同的定义(当然是描述性的)。例如,称数据库是一个"记录保存系统"(该定义强调了数据库是若干记录的集合)。又如称数据库是"人们为解决特定的任务,以一定的组织方式存储在一起的相关的数据的集合"(该定义侧重于数据的组织)。更有甚者称数据库是"一个数据仓库"。当然,这种说法虽然形象,但并不严谨。严格地说,数据库是"按照数据结构来组织、存储和管理数据的仓库"。在经济管理的日常工作中,常常需要把某些相关的数据放进这样"仓库",并根据管理的需要进行相应的处理。例如,企业或事业单位的人事部门常常要把本单位职工的基本情况(职工号、姓名、年龄、性别、籍贯、工资、简历等)存放在表2063中,这张表就可以看成是一个数据库。有了这个"数据仓库"我们就可以根据需要随时查询某职工的基本情况,也可以查询工资在某个范围内的职工人数等等。这些工作如果都能在计算机上自动进行,那我们的人事管理就可以达到极高的水平。此外,在财务管理、仓库管理、生产管理中也需要建立众多的这种"数据库",使其可以利用计算机实现财务、仓库、生产的自动化管理。

JMartin给数据库下了一个比较完整的定义:数据库是存储在一起的相关数据的集合,这些数据是结构化的,无有害的或不必要的冗余,并为多种应用服务;数据的存储独立于使用它的程序;对数据库插入新数据,修改和检索原有数据均能按一种公用的和可控制的方式进行。当某个系统中存在结构上完全分开的若干个数据库时,则该系统包含一个"数据库集合"。

数据库的优点

使用数据库可以带来许多好处:如减少了数据的冗余度,从而大大地节省了数据的存储空间;实现数据资源的充分共享等等。此外,数据库技术还为用户提供了非常简便的使用手段使用户易于编写有关数据库应用程序。特别是近年来推出的微型计算机关系数据库管理系统dBASELL, *** 作直观,使用灵活,编程方便,环境适应广泛(一般的十六位机,如IBM/PC/XT,国产长城0520等均可运行种软件),数据处理能力极强。数据库在我国正得到愈来愈广泛的应用,必将成为经济管理的有力工具。

数据库是通过数据库管理系统(DBMS-DATA BASE MANAGEMENT SYSTEM)软件来实现数据的存储、管理与使用的dBASELL就是一种数据库管理系统软件。

数据库结构与数据库种类

数据库通常分为层次式数据库、网络式数据库和关系式数据库三种。而不同的数据库是按不同的数据结构来联系和组织的。

1数据结构模型

(1)数据结构

所谓数据结构是指数据的组织形式或数据之间的联系。如果用D表示数据,用R表示数据对象之间存在的关系集合,则将DS=(D,R)称为数据结构。例如,设有一个电话号码簿,它记录了n个人的名字和相应的电话号码。为了方便地查找某人的电话号码,将人名和号码按字典顺序排列,并在名字的后面跟随着对应的电话号码。这样,若要查找某人的电话号码(假定他的名字的第一个字母是Y),那么只须查找以Y开头的那些名字就可以了。该例中,数据的集合D就是人名和电话号码,它们之间的联系R就是按字典顺序的排列,其相应的数据结构就是DS=(D,R),即一个数组。

(2)数据结构种类

数据结构又分为数据的逻辑结构和数据的物理结构。数据的逻辑结构是从逻辑的角度(即数据间的联系和组织方式)来观察数据,分析数据,与数据的存储位置无关。数据的物理结构是指数据在计算机中存放的结构,即数据的逻辑结构在计算机中的实现形式,所以物理结构也被称为存储结构。本节只研究数据的逻辑结构,并将反映和实现数据联系的方法称为数据模型。

目前,比较流行的数据模型有三种,即按图论理论建立的层次结构模型和网状结构模型以及按关系理论建立的关系结构模型。

2层次、网状和关系数据库系统

(1)层次结构模型

层次结构模型实质上是一种有根结点的定向有序树(在数学中"树"被定义为一个无回的连通图)。例如图2064是一个高等学校的组织结构图。这个组织结构图像一棵树,校部就是树根(称为根结点),各系、专业、教师、学生等为枝点(称为结点),树根与枝点之间的联系称为边,树根与边之比为1:N,即树根只有一个,树枝有N个。这种数据结构模型的一般结构见图2065所示。

图2064 高等学校的组织结构图 图2065 层次结构模型

图2065中,Ri(i=1,2,…6)代表记录(即数据的集合),其中R1就是根结点(如果Ri看成是一个家族,则R1就是祖先,它是R2、R3、R4的双亲,而R2、R3、R4互为兄弟),R5、R6也是兄弟,且其双亲为R3。R2、R4、R5、R6又被称为叶结点(即无子女的结点)。这样,Ri(i=1,2,…6)就组成了以R1为树根的一棵树,这就是一个层次数据结构模型。

按照层次模型建立的数据库系统称为层次模型数据库系统。IMS(Information Manage-mentSystem)是其典型代表。

(2)网状结构模型

在图2066中,给出了某医院医生、病房和病人之间的联系。即每个医生负责治疗三个病人,每个病房可住一到四个病人。如果将医生看成是一个数据集合,病人和病房分别是另外两个数据集合,那么医生、病人和病房的比例关系就是M:N:P(即M个医生,N个病人,P间病房)。这种数据结构就是网状数据结构,它的一般结构模型如图2067所示。在图中,记录Ri(i=1,2,8)满足以下条件:

①可以有一个以上的结点无双亲(如R1、R2、R3)。

②至少有一个结点有多于一个以上的双亲。在"医生、病人、病房"例中,"医生集合有若干个结点(M个医生结点)无"双亲",而"病房"集合有P个结点(即病房),并有一个以上的"双亲"(即病人)。

图2066 医生、病房和病人之间的关系

图2067 网状结构模型

按照网状数据结构建立的数据库系统称为网状数据库系统,其典型代表是DBTG(Data Base Task Group)。用数学方法可将网状数据结构转化为层次数据结构。

(3)关系结构模型

关系式数据结构把一些复杂的数据结构归结为简单的二元关系(即二维表格形式)。例如某单位的职工关系就是一个二元关系(见表2068)。这个四行六列的表格的每一列称为一个字段(即属性),字段名相当于标题栏中的标题(属性名称);表的每一行是包含了六个属性(工号、姓名、年龄、性别、职务、工资)的一个六元组,即一个人的记录。这个表格清晰地反映出该单位职工的基本情况。

表2068 职工基本情况

通常一个m行、n列的二维表格的结构如表2069所示。

表中每一行表示一个记录值,每一列表示一个属性(即字段或数据项)。该表一共有m个记录。每个记录包含n个属性。

作为一个关系的二维表,必须满足以下条件:

(1)表中每一列必须是基本数据项(即不可再分解)。

(2)表中每一列必须具有相同的数据类型(例如字符型或数值型)。

(3)表中每一列的名字必须是唯一的。

(4)表中不应有内容完全相同的行。

(5)行的顺序与列的顺序不影响表格中所表示的信息的含义。

由关系数据结构组成的数据库系统被称为关系数据库系统。

在关系数据库中,对数据的 *** 作几乎全部建立在一个或多个关系表格上,通过对这些关系表格的分类、合并、连接或选取等运算来实现数据的管理。dBASEII就是这类数据库管理系统的典型代表。对于一个实际的应用问题(如人事管理问题),有时需要多个关系才能实现。用dBASEII建立起来的一个关系称为一个数据库(或称数据库文件),而把对应多个关系建立起来的多个数据库称为数据库系统。dBASEII的另一个重要功能是通过建立命令文件来实现对数据库的使用和管理,对于一个数据库系统相应的命令序列文件,称为该数据库的应用系统。因此,可以概括地说,一个关系称为一个数据库,若干个数据库可以构成一个数据库系统。数据库系统可以派生出各种不同类型的辅助文件和建立它的应用系统。

数据库的要求与特性

为了使各种类型的数据库系统能够充分发挥它们的优越性,必须对数据库管理系统的使用提出一些明确的要求。

1建立数据库文件的要求

(1)尽量减少数据的重复,使数据具有最小的冗余度。计算机早期应用中的文件管理系统,由于数据文件是用户各自建立的,几个用户即使有许多相同的数据也得放在各自的文件中,因而造成存储的数据大量重复,浪费存储空间。数据库技术正是为了克服这一缺点而出现的,所以在组织数据的存储时应避免出现冗余。

(2)提高数据的利用率,使众多用户都能共享数据资源。

(3)注意保持数据的完整性。这对某些需要历史数据来进行预测、决策的部门(如统计局、银行等)特别重要。

(4)注意同一数据描述方法的一致性,使数据 *** 作不致发生混乱。如一个人的学历在人事档案中是大学毕业,而在科技档案中却是大学程度,这样就容易造成混乱。

(5)对于某些需要保密的数据,必须增设保密措施。

(6)数据的查找率高,根据需要数据应能被及时维护。

2数据库文件的特征

无论使用哪一种数据库管理系统,由它们所建立的数据库文件都可以看成是具有相同性质的记录的集合,因而这些数据库文件都有相同的特性:

(1)文件的记录格式相同,长度相等。

(2)不同的行是不同的记录,因而具有不同的内容。

(3)不同的列表示不同的字段名,同一列中的数据的性质(属性)相同。

(4)每一行各列的内容是不能分割的,但行的顺序和列的顺序不影响文件内容的表达。

3文件的分类

对文件引用最多的是主文件和事物文件。其他的文件分类还包括表文件、备份文件、档案的输出文件等。下面将讲述这些文件。

(1)主文件。主文件是某特定应用领域的永久性的数据资源。主文件包含那些被定期存取以提供信息和经常更新以反映最新状态的记录。典型的主文件有库存文件、职工主文件和收帐主文件等。

(2)事务文件。事务文件包含着作为一个信息系统的数据活动(事务)的那些记录。这些事务被分批以构成事务文件。例如,从每周工资卡上录制下来的数分批存放在一个事务文件上,然后对照工资清单文件进行处理以便打印出工资支票和工资记录簿。

(3)表文件。表文件是一些表格。之所以单独建立表文件而不把表设计在程序中是为了便于修改。例如,一个公用事业公司的税率表或国内税务局的税率就可以存储在表中文件。

(4)备用文件。备用文件是现有生产性文件的一个复制品。一旦生产性文件受到破坏,利用备用文件就可以重新建立生产性文件。

(5)档案文件。档案文件不是提供当前处理使用的,而是保存起来作为历史参照的。例如,国内税务局(IRS)可能要求检查某个人最近15年的历史。实际上,档案文件恰恰是在给定时间内工作的一个"快照"。

(6)输出文件。输出文件包含将要打印在打印机上的、显在屏幕上的或者绘制在绘图仪上的那些信息的数值映象。输出文件可以是"假脱机的"(存储在辅存设备上),当输出设备可

用时才进行实际的输出。

以上就是关于BMP格式文件的数据结构全部的内容,包括:BMP格式文件的数据结构、基于GIS数字地质图数据库的组成、常用数据结构有哪些等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10187041.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存