数据结构(C语言)-数组

数组

  • 一、数组的抽象数据类型定义
  • 二、数组的顺序存储
  • 三、特殊矩阵的压缩存储
    • 1、对称矩阵
    • 2、三角矩阵
    • 3、对角矩阵
    • 4、稀疏矩阵

学习视频
数组:按一定格式排列起来的具有相同类型的数据元素的集合
一维数组:若线性表中的数据元素为非结构的简单元素则称为一维数组。
一维数组的逻辑结构:线性结构。定长的线性表
格式:数据类型 变量名称[长度]
二维数组:若一维数组中的数据元素又是一维数组结构,则称为二维数组
二维数组的逻辑结构分为:

  • 非线性结构:每一个数据元素即在一个行表中又在一个
    列表中。
  • 线性结构:改线性表的每个数据元素也是一个定长的线
    性表。
    格式:数据类型 变量名称[行数][列数]
    数据结构(C语言)-数组_第1张图片
    数据结构(C语言)-数组_第2张图片
  • 即定义一个m行n列的二维数组
    三维数组:若二维数组中的元素又是一个一维数组,则称作三维数组
    n维数组:若n-1维数组中的元素又是一个一维数组结构则称为n维数组。
    结论:线性表结构是数组结构的一个特例,而数组结构又是线性表结构的扩展。

一、数组的抽象数据类型定义

数据结构(C语言)-数组_第3张图片
数组前驱与后继只与数组维度有关。
数据结构(C语言)-数组_第4张图片

二、数组的顺序存储

数组的特点:结构固定—维数和维界不变
数组基本操作:初始化、销毁、取元素、修改元素值。一般不做插入和删除。
一般都是采用顺序存储结构来表示数组
注意:数组可以是多维的,但存储数据元素的内存单元地址是一维的,因此,在存储数组结构之前,需要解决将多维关系映射到一维关系的问题。
数据结构(C语言)-数组_第5张图片
数据结构(C语言)-数组_第6张图片
数据结构(C语言)-数组_第7张图片
数据结构(C语言)-数组_第8张图片
数据结构(C语言)-数组_第9张图片
数据结构(C语言)-数组_第10张图片
数据结构(C语言)-数组_第11张图片

三、特殊矩阵的压缩存储

矩阵:一个由m*n个元素排成的m行n列的表
矩阵的常规存储:将矩阵描述成一个二维数组
矩阵的常规存储的特点:可以对其他元素进行随机存取;矩阵运算非常简单;存储的密度为1。
不适宜常规存储的矩阵:值相同的元素很多且呈某种规律分布;零元素多。
矩阵的压缩存储:为多个相同的非零元素只分配一个存储空间;对零元素不分配空间。适用于一些特殊矩阵,如:对称矩阵,三角矩阵,稀疏矩阵等。
稀疏矩阵:矩阵中非零元素的个数较少(一般小于%5)
在这里插入图片描述

1、对称矩阵

特点:在n*n的矩阵中,满足如下性质
在这里插入图片描述
存储方法:只存储下(或者上)三角(包括主对角线)的数据元素。共占用n(n+1)/2个元素空间
对称矩阵的存储结构:
对称矩阵上下三角中的元素数均为:n(n+1)/2
可以以行序为主序将元素放在一个一维数组Sa[n(n+1)/2]中。数据结构(C语言)-数组_第12张图片

例如:以下为主序存储下三角:数据结构(C语言)-数组_第13张图片
在这里插入图片描述

2、三角矩阵

特点:对角线以下(或者以上)的数据元素(不包括对角线)全部为常数C。
在这里插入图片描述在这里插入图片描述
存储方法:重复元素C共享一个元素存储空间,共占用n(n+1)/2+1个元素空间Sa[1…n(n+1)/2+1]

在这里插入图片描述

3、对角矩阵

特点:在n*n的方阵中,所有非零元素都集中在以主对角线为中心的带状区域中,区域外的值全为0,则称为对角矩阵,常见的有三对角矩阵,五对角矩阵,七对角矩阵等。
数据结构(C语言)-数组_第14张图片
存储方法:

数据结构(C语言)-数组_第15张图片

4、稀疏矩阵

在这里插入图片描述
(1)三元组 (顺序存储结构)
数据结构(C语言)-数组_第16张图片在这里插入图片描述

压缩存储的原则:存各非零元的值、行列位置和矩阵的行列数。
三元组的不同表示方法可决定稀疏矩阵不同的压缩存储方法。
三元顺序表,如下: i表示非零元素在稀疏矩阵的第几行,j表示非零元素在稀疏矩阵的第几列 v表示该元素的值。 0行的i是记录该稀疏矩阵一共有几行,j是记录稀疏矩阵一共有多少列,v表示稀疏矩阵一共有多少非零的元素。
数据结构(C语言)-数组_第17张图片
三元组顺序表又称为有序的双下标法
三元组顺序表的优点:非零元在表中按行序有序存储,因此便于进行依行顺序处理的矩阵运算。
三元组顺序表的缺点:不能随机存取,若按行号存取某一行中的非零元,则需要从头开始进行查找。
(2)十字链表(链式存储结构)
优点:它能够灵活地插入因运算而产生的新的非零元素,删除因运算而产生的新的零元素,实现矩阵的各种运算。
在十字链表中,矩阵的每一个非零元素用一个结点表示,该结点除了(row、col、value)以外,还要有两个域:

  • Right:用于链接同一行中的下一个非零元素。
  • Down:用以链接同一列中的下一个非零元素。
    数据结构(C语言)-数组_第18张图片
    例如:

数据结构(C语言)-数组_第19张图片数据结构(C语言)-数组_第20张图片

你可能感兴趣的:(学习分享,数据结构,数组,c语言,程序设计)