数据结构--数组和广义表

数组

数组的定义:

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

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

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

    • int num[5]

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

    • 二维数组的逻辑结构

      • 非线性结构:每一个数据元素即在一个行表中,又在一个列表中·

      • 线性结构定长的线性表:该线性表的每一个数据元素也是一个定长的线性表

      • int num[5][8]

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

typedef elemtype array2[m][n];
// 等价于
typedef elemtype array1[n];
typedef array1 array2[m];
  • 三维数组:若二维数组中的元素又是一个一维数组,则称为三维数组

  • n维数组:若n - 1 维数组中的元素又是一个一维数组结构,则成为n维数组

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

数组特点:结构固定--定义后,维数和维界不再改变

数组基本操作:除了结构的初始化和销毁之外,只有取元素和修该元素值的操作。

 

数组的顺序存储

存储单元是一维结构,而数组是个多维结构,则用一组连续存储单元存放数组的数据元素就由个次序约定问题。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWFVOfk1MRg==,size_20,color_FFFFFF,t_70,g_se,x_16

 watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWFVOfk1MRg==,size_20,color_FFFFFF,t_70,g_se,x_16

 watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWFVOfk1MRg==,size_20,color_FFFFFF,t_70,g_se,x_16

 watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWFVOfk1MRg==,size_20,color_FFFFFF,t_70,g_se,x_16

 

特殊矩阵的压缩存watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWFVOfk1MRg==,size_20,color_FFFFFF,t_70,g_se,x_16

  1. 什么是矩阵压缩?

    若多个数据元素的值都相同,则只分配一个元素值的存储空间,且零元素不占存储空间。

  2. 什么样的矩阵能够压缩?

    一些特殊矩阵,如:对称矩阵,对角矩阵,稀疏矩阵

  3. 什么叫稀疏矩阵?

    矩阵中非零元素的个数比较少(一般小于5%)

 

对称矩阵

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWFVOfk1MRg==,size_20,color_FFFFFF,t_70,g_se,x_16

 

三角矩阵

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWFVOfk1MRg==,size_20,color_FFFFFF,t_70,g_se,x_16

对角矩阵

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWFVOfk1MRg==,size_20,color_FFFFFF,t_70,g_se,x_16

稀疏矩阵

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWFVOfk1MRg==,size_20,color_FFFFFF,t_70,g_se,x_16

 

  1. 三元组顺序表又称有序的双下标法。

  2. 三元组顺序表的优点:非零元在表中按行序有序存储,因此便于进行依次顺序处理的矩阵运算

  3. 三元组顺序表的缺点:不能随机存取,若按行号存取某一行中的非零元,则需从头开始进行查找。

 

稀疏数组的链式存储结构:十字链表

  • 优点:他能够灵活的插入因运算而产生的新的非零元素,删除因运算而产生的新的零元素,实现矩阵的各种运算

  • 在十字链表中,矩阵的每一个非零元素用一个节点表示,该结点除了( row ,col , value)以外,还有两个域

    • right:用于链接同一行中的下一个非零元素

    • down:用于链接同一列中的下一个非零元素

  • 十字链表中结点的结构示意图

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWFVOfk1MRg==,size_20,color_FFFFFF,t_70,g_se,x_16

 

广义表

 

广义表(又称列表Lists)是n>=0 个元素a0,a1,...,an-1的有限序列,其中每一个ai或者原子,或者是一个广义表。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWFVOfk1MRg==,size_20,color_FFFFFF,t_70,g_se,x_16

 

广义表的性质

  1. 广义表中的数据元素有相对次序,一个直接前驱和一个直接后继

  2. 广义表的长度定义为最外层所包含元素的个数;

  3. 广义表的深度定义为该广义表展开后所含括号的层数;

  4. 广义表可以为其他表共享;

  5. 广义表可以是一个递归的表

  6. 广义表是多层次的结构,广义表的元素可以是单元素,也可以是子表,而子表的元素还可以是子表

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWFVOfk1MRg==,size_20,color_FFFFFF,t_70,g_se,x_16

 

广义表和线性表的区别

广义表可以看成是线性表的推广,线性表是广义表的特例

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWFVOfk1MRg==,size_20,color_FFFFFF,t_70,g_se,x_16

 广义表的基本运算

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWFVOfk1MRg==,size_20,color_FFFFFF,t_70,g_se,x_16

 

案例分析与实现

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWFVOfk1MRg==,size_20,color_FFFFFF,t_70,g_se,x_16

 

 

 

 

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

XUN~MLF

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

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

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

打赏作者

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

抵扣说明:

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

余额充值