【数据结构】数组和广义表总结——基本知识要点汇总

halo~我是bay_Tong桐小白
本文内容是桐小白个人对所学知识进行的总结和分享,知识点会不定期进行编辑更新和完善,了解最近更新内容可参看更新日志,欢迎各位大神留言、指点


【时间原因,先重点记述稀疏矩阵及广义表的相关内容,后续持续更新】

【更新日志】

最近更新:

  • 暂时没有编辑记录,后续会持续完善优化

一维数组、二维数组及多维数组的存储

  • 数组的再认识:一组有固定个数的元素的集合,且存储单元地址连续。数组的维数和每一维的上下限一旦被定义,则数组的元素个数就被固定。
  • n维数组:可以看成线性表的推广

数组与矩阵的联系与应用

对称矩阵

对于对称矩阵,可以为每一对对称元分配一个存储空间,则可将n^2个元压缩存储到n(n+1)/2个元的空间中。一般的,习惯以行序为主序存储下三角矩阵(包括对角线)中的元
对称矩阵描述

带状矩阵

【后续更新】

稀疏矩阵的压缩存储(十字链表)

【问题引入:对于上述矩阵的存储,当用二维数组存储,但矩阵为稀疏矩阵(即矩阵中包含大量0元素)时会造成大量的存储空间浪费。因此引入多重链表进行存储。】

  • 多重链表:链表中的结点可能同时隶属于多个链
  • 多重链表中结点的指针域会有多个,但包含多个指针域的链表不一定是多重链表,比如在双向链表中每个结点含有多个指针域但结点不同时隶属于多个链,因此它不是多重链表
  • 多链表在树、图中会大量被使用

对于上述例子,采用典型的多重链表——十字链表来存储稀疏矩阵
即每个结点通过两个指针域(行指针Right与列指针Down)把同行同列串起来,结点的数据域存储行坐标Row、列坐标Col、数值Value

具体存储结构:
十字链表描述

  • 表中的head为行列的头结点,通过next指针相连,通过Right与Down将矩阵行与列进行联系串联
  • 最左上角的Term可看作是矩阵的访问入口,其指针域只用一个即可,通过它即可进行矩阵的遍历访问。其中的数据元素表明矩阵有几行几列共几个存储单元
  • 表中的head与Term中,通过down指针依次访问形成的一个循环链表,即为矩阵中的某一行的遍历,对应的,通过right指针依次访问形成的一个循环链表,即为矩阵中的某一列的遍历

【详细讲解后续持续更新调整】

广义表工作原理

广义表相关概念

广义表定义,顾名思义,就是线性表的推广,也有人称其为列表。对于线性表,表中的n个元素都是基本的单元素;对于广义表,这些元素可以是单元素也可以是另一个广义表

广义表存储

多重链表实质就是广义表的一种存储体现
在C语言中可用Union和一个标记Tag来区分广义表中的元素是单元素还是另一个广义表
广义表存储描述

持续更新中……
我是桐小白,一个摸爬滚打的计算机小白

猜你喜欢

转载自blog.csdn.net/bay_Tong/article/details/107049168