数据结构—基础知识(八):数组

本文介绍了数组的基础概念,包括一维、二维及n维数组的定义、逻辑结构以及在C语言中的声明方式。重点讲解了线性表与数组的关系,以及特殊矩阵如对称矩阵、三角矩阵的压缩存储方法。
摘要由CSDN通过智能技术生成

数据结构—基础知识(八):数组

数组定义

数组:按一定格式排列起来的具有相同类型的数据元素的集合。

一维数组:若线性表中的数据元素为非结构的简单元素,则称为一维数组。

一位数组的逻辑结构:线性结构。定长的线性表。

声明格式:数据类型 变量名称[长度]

​ 例:int num[5]={0,1,2,3,4};

二维数组:若一维数组中的数据元素又是一维数组结构,则称为二维数组。

二维数组的逻辑结构:

  • 非线性结构:每一个数据元素既在一个行表中,又在一个列表中。
  • 线性结构(定长的线性表):该线性表的每个数据元素也是一个定长的线性表。

声明格式:数据类型 变量名称[长度]

​ 例:int num[5] [8];

在C语言中,一个二维数组类型也可以定义为一维数组类型(其分量类型为一维数组类型),即:

typedf elemtype array2[m][n];

等价于:

typedf elemtype array1[n];
typedf array1 array2[m];

n维数组:若n-1维数组中的元素又是一个一维数组结构,则称作n维数组。

结论:线性表结构是数组结构的一个特例,而数组结构又是线性表结构的拓展。

数组特点:结构固定—定义后,维数和维界不在改变。

对于数组,一旦规定了其维数和各维长度,便可为它分配存储空间。反之,只要给出一组下标便可求得相应数组元素的存储位置。假如每个数据元素占L个存储单元,则二维数组A[0…m-1,0…n-1](即下标从0开始,共有m行n列)中任一元素aij的储存位置可由下式确定:

​ LOC(i,j)=LOC(0,0)+(n*i+j)L

LOC(i,j)是aij的存储位置;LOC(0,0)是a00的存储位置,即二维数组A的起始存储位置,也称为基地址或基址。

特殊矩阵的压缩存储

压缩存储,是指为多个值相同的元只分配一个存储空间,对零元不分配空间。
在这里插入图片描述

  1. 对称矩阵

    【特点】在n×n的矩阵a中满足性质:aij=aji (1≤i,j≤n)

    【存储方法】只存储下(或上)三角(包括主对角线)的数据元素。共占用n(n+1)/2个元素空间

    假设以一维数组sa[n(n+1)/2]作为n阶对称矩阵A的存储结构,则sa[k]和矩阵元aij之间存在着对应的关系:

    当i≥j时 k=[i(i-1)/2]+j-1

    当i<j时 k=[j(j-1)/2]+i-1

  2. 三角矩阵

    【特点】对角线以下(或以上)的数据元素(不包括对角线)全部为常数C。

    【存储方法】重复元素C共享一个元素存储空间,共占用n(n+1)/2个元素空间

    (1)上三角矩阵

    sa[k]和矩阵元aij之间的对应关系

    当i≤j k=[(i-1)(2n-i+2)/2]+(j-1)

    当i>j k=n(n+1)/2

    (2)下三角矩阵

    sa[k]和矩阵元aij之间的对应关系

    当i≥j k=[i(i-1)/2]+(j-1)

    当i<j k=n(n+1)/2

  3. 三对角矩阵

    k=2(i-1)+j(这里得到的数组下标k是从1开始的)

    i=[k%3] (向下取整)+1
    在这里插入图片描述

  • 16
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值