数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
目录
1.数组
1.数组的类型定义
数组是由类型相同的数据元素构成的有序集合,每个元素称为数组元素,每个元素收n个线性关系的约束,每个元素在n个线性关系中的序号,称为该元素的下标,可以通过下标访问该数据元素。因为数组中每个元素处于n个关系中,故称该数组为n维数组。数组可以看成线性表的推广,其特点是结构中的元素本身可以可以是具有某种结构的数据,但属于同一数据类型。
抽象数据类型数组可以定义为:
ADT Array
{
InitArray(&A,n,boundi,...,boundn)
操作结果:若维数n和各维长度合法,则构造相应的数组A,并返回OK。
DestroyArray(&A)
操作结果:销毁数组A
Value(A,&e,indexi,...,indexn)
初始条件:A是n维数组,e为元素变量,随后是n个下标值
操作结果:若各下标不越界,则e赋值为所指定的A的元素值,并返回OK
Assign(&A,e,index,...,indexn)
初始条件:A是n维数组,e为元素变量,随后是n个下标值。
操作结果:若下标不越界,则将e的值赋给所指定的A的元素,并返回OK
}ADT Array
2.数组的顺序存储
由于对数组一般不进行插入或删除操作,也就是说,一旦建立了数组,则结构中的数据元素个数和元素之间的关系一般就不再发生变动,因此,采用顺序存储结构表示数组比较合适。
由于存储单元是一维结构,而数组可能是多维的结构,则用一组连续存储单元存放数组数据元素就有次序约定问题。例如二维数组可以看成所示的一维数组,也可以看成一维数组,对应的,对二维数组也可以看成所示的以列序为主序的存储方式,一种是以行序为主序的存储结构,在扩展Basic,Pascal,Java和C语言中,用的都是以行序为主序的存储结构;而在FORTRA语言中,用的是以列序为主序的存储结构。
由此,对于数组,一旦规定了其维数和各维的长度,便可为它分配存储空间。反之,只要给出一组下标便可以求得相应数组元素的存储位置。
3.特殊矩阵的压缩矩阵
矩阵是很多科学与工程计算问题中探究的数学对象,矩阵用二维数组来表示是最自然的方法。但是,在数值分析中经常出现一些阶数很高的矩阵,同时在矩阵中有很多值相同的元素或者是零元素。有时为了节省存储空间,可以对这类矩阵进行压缩存储。所谓压缩存储,是指为多个值相同的原只分配一个存储空间,对零元不分配空间。
假若值相同的元素或者零元素在矩阵中的分布有一定规律,则称此类矩阵为特殊矩阵。特殊矩阵主要包括对称矩阵、三角矩阵和对角矩阵等,下面我们重点讨论这三种特殊矩阵的压缩存储。
1.对称矩阵
对于对称矩阵,可以为每一对对称元分配一个存储空间,则可将n方个元压缩存储到n(n+1)/2个元的空间中,不失一般性,可以行序为主序存储其下三角(包括对角线)中的元。
假设以一维数组sa[n(n+1)/2]作为n阶对称矩阵A的存储结构,则sa[k]和矩阵元aij之间存在着一一对应的关系
对于任意给定的一组下标(i,j),均可以在sa中找到矩阵元aij;反之,对所有的k=0,1,2,...n(n+1)/2-1,都能确定sa[k]中的元在矩阵中的位置(i,j)。由此,称sa[n(n+1)/2]为n阶对称矩阵A的压缩存储。
2.三角矩阵
以对角线划分,三角矩阵上有上三角矩阵和下三角矩阵两种。上三角矩阵是指矩阵下三角(不包括对角线)中的元均为常数C或0的n阶矩阵,下三角矩阵与值相反。对三角矩阵进行压缩存储,除了和对称矩阵一样,只存储其上(下)三角中的元素之外,再加一个存储常数C的存储空间即可。
3.对角矩阵
对角矩阵所有的非零元都集中再以对角线为中心的带状区域中,即除了对角线上和直接在对角线上、下方若干条与对角线平行的线上的元之外,所有其他的元皆为零,对这中矩阵,也可按某个原则(或以行为主,或以线的顺序)将其压缩存储到一维数组上。
在上述这些特殊矩阵中,非零元的分布都有明显的规律,从而可将其压缩存储到一维数组中,并找到每个非零元在一维数组中的对应关系。
然而,在实际应用中还会遇到另一类矩阵,其非零元较零元少,且分布没有一定规律,称之为稀疏矩阵。这类矩阵的压缩存储就要比特殊矩阵复杂,在此不进行讨论。
4.小总结
本次内容主要了讲解了数据结构中的一些基础知识点,主要内容顺序表的有关知识本篇内容都为数据结构的基本思想,若想更深的理解以及体会,还请大家在日常学习中多多努力,希望大家学有所成。