关于数据结构(七)

数据结构计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法索引技术有关。

目录

1.数组

1.数组的类型定义

2.数组的顺序存储

3.特殊矩阵的压缩矩阵

1.对称矩阵

2.三角矩阵

3.对角矩阵

4.小总结


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.小总结

本次内容主要了讲解了数据结构中的一些基础知识点,主要内容顺序表的有关知识本篇内容都为数据结构的基本思想,若想更深的理解以及体会,还请大家在日常学习中多多努力,希望大家学有所成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Joker700

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值