数据结构(C语言)5.数组&特殊矩阵&广义表

1.数组

   1.数组的相关知识

  • 数组概念
  1. 数组:由下标和值组成的序对集合
  2. 数组声明:三要素:名称、维数及维长度、元素类型
  3. 特点:所有元素同一类型

      元素个数确定不变

            所需的存储空间确定不变,没有插入和删除操作

     4. 二维数组

Am*n       m个行向量    组成的线性表

         n个列向量

可以将每列看做一个元素,然后构成一个线性表

同时,每一列也是一个线性表

也可以将每行看作一个元素,然后构成一个线性表

同时,每一行也是一个线性表

线性表:N个元素的有限序列

这里元素可以扩展为:带有结构信息的元素

       所以数组属于线性表

  • 数组的顺序存储    
  1. 二维数组

按行存储                      按列存储

  a00

a00

a01

a10

……

a(n-1)0

a10

  a01

  1. 数组地址计算
  1. 二维数组按行存储

                                     

                                     

                                     

                                     

aij的存储地址等于a00的存储地址+(i*n+j)*sizeof(数据类型)


  1. 二维数组按列存储

aij的存储地址等于a00的存储地址+(j*n+i)*sizeof(数据类型)

  1. 注意:如果二维数组的下标从1开始

按行存储:

aij的存储地址等于

a11的存储地址+((i-1)*n+j-1)*sizeof(数据类型)

按列存储

a11的存储地址+((j-1)*m+i-1)*sizeof(数据类型)

计算某元素存储地址:

aij的地址=第一个元素的地址+(aij前面的元素个数)*每个元素占的字节

    2.多维数组的实现——待实现

2.特殊矩阵

    1.矩阵的压缩存储相关知识点

  

  • 特殊矩阵和稀疏矩阵
  1. 特殊矩阵:

矩阵中有很多值相同的元素并且它们的分布有一定的规律

  1. 稀疏矩阵:

矩阵中有很多零元素

  • 压缩矩阵的基本思想:
  1. 为多个值相同的元素只分配一个存储空间
  2. 元素不分配存储空间
  • 特殊矩阵的压缩存储

如果用一维数组存储,算下标

     下标=前面元素的

  1. 对称矩阵:aij=aji
  1. 只存储下三角部分的元素(包含对角线)

            从第一行开始

                          

  1. 三角矩阵

                 C为常量

  1. 只存储上三角(或下三角)部分元素,常数只存一个
  2. 下三角矩阵

  1. 上三角矩阵

  1. 对角矩阵

下标:|i-j|<=d 说明在带状区域

下标为(i-1)*L-d+d+j-i

  1. 稀疏矩阵

百分之五以下的非零元素

三元组存放 矩阵行数、列数、

每个元素的行、列、内容

    2.代码实现——待实现

3.广义表

     1.相关知识

  • 广义表的概念

1.是线性表的一种推广。是 n个数据元素的有限序列,但它存储的数据还可以是一个广义表。

2.广义表通常记作:GL=(d1,d2,……,dn)

GL是表名,n是广义表的长度(元素个数)

表名 大写元素 小写

3.若di是一个广义表,则称它为GL子表

4.在GL中,d1是GL的表头,其余部分组成的表称为GL的表尾

广义表是递归定义的

例如:

D=()空表,长度为0

A=(a,(b,c))表长度为2的广义表,

第一个元素是数据a, 第二个元素是一个子表(b,c)

  B=(A,A,D),长度为3,前两个元素为表A,第三个元素为空表D

  C=(a,C)长度为2的递归定义广义表,C相当于无穷表C=(a,(a,(a,(……))))。

head=(A)=a 表A的表头是a

 tail(A)=((b,c)) 表A的表尾是((b,c))

  • 广义表性质
  1. 元素可以是子表,子表还可以是子表,广义表是多层结构
  2. 广义表可以被其他广义表共享
  3. 具有递归性
  • 广义表的存储结构

1.表节点:tag=1;表头;表尾

单元素:tag=0 data

        子表:  tag=1;表头;表尾

     2.第二种方法,结构更简单

      

       

      

     

      代码实现:

      

  • 广义表的操作实现
  1. 求表头
  2. 复制广义表
  3. 求广义表长度(元素个数)
  4. 求广义表深度(括号的层次)

      2.广义表操作实现——待实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值