数据结构——数组

本文通过日常生活中的书籍管理例子,介绍了数组作为数据结构的基本概念,包括顺序存储的一维和二维数组,以及地址计算方法。重点强调了数组的高效查找和添加特性,同时讨论了其满载时的扩展问题和插入删除操作的局限性。
摘要由CSDN通过智能技术生成

1.经典举例

        以放书为例,如果你的房间很乱,床上床下有书,桌子上有书,地上也有书,当你去寻找一本书的时候,你找起来非常麻烦;

        于是,你在房间里安装了一个书架,把他们都放在书架上,依次编号。查找的时候,根据书的编号就能很快找到。即使找不到,也可以根据顺序依次查找,总比满屋子乱翻效率高很多。

        当你买来一本新书的时候,你直接把新书放在最后一个位置就行了;

        书架类似数组,数组是计算机内存里一片连续的存储空间,用来有序存放元素。

根据上面例子,

        数组有两个巨大优势。一:根据编号就可以直接查找到元素;二:添加元素只需放在最后一个位置;

        但是数组也有缺点:

        一,书架上的书有满的时候,此时,我们想存放书就必须再安装一个书架,数组一一样,满的时候也必需再创建一个数组;

       二,同顺序存储的插入删除相同,数组的插入删除会比较麻烦;

2.数组介绍

(1)数据结构讲到的数组不同于高级语言中提到的数组,高级语言中的数组是顺序存储,而这里讲到的数组是循序存储和链式存储;

(2)数组元素有固定的上界下界

(3)数组的基本操作是初始化,销毁,以及获取特定元素和修改元素;

 3.数组分类

一维数组:即为一个线性表;

二维数组:”其数据元素为一维数组“的线性表;

下图分别是 以列序为主序存储,以行序为主序存储;


4.地址计算:

(1)一维数组

一维数组的实质是线性表;存储方式与线性表相同;A=a1,a2,a3,........,an;

Loc( A(i) )=Loc( A [1] ) + (i-1) * k ; k为每个数据元素占用的存储长度;

(2)  二维数组

以名称为A mn 的二维数组为例

以行序为主序的存储方式:

Loc( a ij ) = Loc( a(00) ) + ( i*n + j ) * k ; //   Loc( a ij ) = Loc( a(11) ) + ( (i-1)*n +( j-1) ) * k;

Loc(a(00))为二维数组的起始存储地址;k为每个数据元素占用的存储长度;

以列序为主序的存储方式:

Loc( a ij ) = Loc( a(00) ) + ( j*m + i ) * k ; //Loc( a ij ) = Loc( a(11) ) + ( (j-1)*m +( i-1) ) * k

Loc(a(00))为二维数组的起始存储地址;k为每个数据元素占用的存储长度;

(3)多维数组

如三维数组A r*m*n

Loc( a (i j k) )=Loc( A [1] [1] [1] ) +[ (i-1) * m * n + ( j - 1 ) *n + (k-1) ] * size ;

再比如 五维数组 ,A  [10] [20] [30] [40] [50],每个数据元素所占的存储长度为 4,基地址为1024

求:a[1][2][3][4][5]的地址;

1024 + [ 1*20*30*40*50 + 2*30*40*50 + 3*40*50 + 4*50 + 5 ] *4 = 1327229;

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值