数组和广义表(列表)

数组和广义表可以看成是一种特殊的线性表,其特殊在于:表中的元素本身也是一种线性表,内存连续,根据下标在O(1)时间读写任何元素。

二维数组,多维数组,广义表,树,图都属于非线性结构

数组

数组的顺序存储:行优先顺序,列优先顺序。数组中的任意元素可以在相同的时间内存取,即顺序存储的数组是一个随机存取结构。

关联数组(Associative Array),又称映射(Map)、字典(Dictionary)为抽象数据结构,包含着类似于(键,值)的有序对,不是线性表。

矩阵的压缩

  1. 对称矩阵、三角矩阵:直接存储矩阵的上三角或下三角元素,注意区分i>=j和i<j的情况。
  2. 对角矩阵:除了主对角线和主对角线相邻两侧的若干条对角线上的元素之外,其余元素皆为零。
  3. 稀疏矩阵:非零元素个数远小于矩阵元素总数,比如三元组或十字链表,十字链表更适合矩阵的加法乘法等操作。
    • 三元组顺序表,虽然节省了存储空间,但其时间复杂度比一般矩阵转置的算法还要复杂,同时还有可能增加算法的难度。因此,此算法仅适用于t(非零元素个数)<<m*n的情况。
    • 稀疏矩阵,在采用压缩存储后将失去随机存储的功能。因为在这种矩阵中,非零元素的分布是没有规律的。为了压缩存储,就将每一个非零元素的值和它所在的行、列号做为一个结点存放在一起,这样的结点组成的线性表叫三元组表,它已经不是简单的向量,所以无法用下标直接存取矩阵中的元素。
    • 对于三元组存储稀疏矩阵,每个元素要用行号,列号,元素值来表示,此外还要三个整数来记录矩阵的行数、列数和总的元素个数。
    • 三元组转置:将数组的行列值相互交换,将每个三元组的i和j相互交换,重排三元组之间的次序,实现矩阵的转置。

广义表

广义表(Lists),又称列表,是线性表的推广。广义表是n(n>=0)个元素的a^1^,a^2^,a^3^,...,a^n^有限序列,其中a~i~或者是原子项,或者是一个广义表。若广义表LS(n>=1)非空,则a^1^是LS的表头,其余元素组成的表(a^2^,a^3^,...,a^n^)称为LS的表尾。广义表的元素可以是广义表,也可以是原子,也可以为空。表尾是指去除表头之后剩下的元素组成的表,表头可以为表或单个元素值,但表尾不可以是单个元素值

例子

  1. A=(),A是一个空表,其长度为零。
  2. B=(e),表B只有一个原子e,B的长度为1。
  3. C=(a,(b,c,d)),表C的长度为2,两个元素分别为原子a和子表(b,c,d)。
  4. D=(A,B,C),表D的长度为3,三个元素都是广义表。
  5. E=(a,E),表E是一个递归表,它的长度为2,E相当于一个无限的广义表E=(a,(a,E=(a,(a,...))))。

三个结论

  1. 广义表的元素可以是子表,而子表的元素还可以是子表。由此,广义表是一个多层次的结构,可以用图形象的表示。
  2. 广义表可以为其他表所共享。如例4中,A,B,C是D的子表,在D中可以通过子表的名称来引用。
  3. 广义表的递归性。

考点

  1. 广义表是0个或者多个单因素或子表组成的有限序列。广义表可以是自身的子表,广义表的长度n>=0,所以可以为空表。广义表的同级元素(只属于同一个表中的各个元素)具有线性关系。
  2. 广义表的表头可以为空,并不代表该广义表为空表。广义表()和广义表(())不同,前者是长度为零的空表,对其不能做求表头和表尾的运算;而后者是长度为1的非空表,对其进行分解,得到表头和表尾均是空表()。
  3. 已知广义表LS=((a,b,c),(d,e,f)),运用head和tail函数取出LS中原子e的运算是head(tail(head(tail(LS))))。根据表头、表尾的定义可知:任何一个非空广义表的表头是表中第一个元素,它可以是原子,也可以是子表,而其表尾必定是子表。也就是说,广义表的head操作,取出的元素是什么,那么结果就是什么。但是tail操作取出的元素外必须加一个表——"()"。tail(LS)=((d,e,f)),head(tail(LS))=(d,e,f),tail(head(tail(LS)))=(e,f),head(tail(head(tail(LS))))=e。
  4. 二维以上的数组,其实是一种特殊的广义表
  5. 在非空广义表中,表头head可以是原子或一个表;表尾tail一定是一个表;广义表难以用顺序存储结构;广义表可以是一个多层次的结构

原文地址:https://www.cnblogs.com/KX-Lau/p/12386378.html

时间: 2024-10-21 14:40:13

数组和广义表(列表)的相关文章

数据结构与算法系列研究四——数组和广义表

稀疏矩阵的十字链表实现和转置 一.数组和广义表的定义 数组的定义1:一个 N 维数组是受 N 组线性关系约束的线性表.           二维数组的逻辑结构可形式地描述为:           2_ARRAY(D,R)              其中 D={aij} | i=0,1,...,b1-1; j=0,1,...,b2-1;aij∈D0}              R={Row,Col}              Row={<aij,ai,j+1>|0<=i<=b1-1;

数据结构实践项目——数组和广义表

本文针对 [数据结构基础系列网络课程(5):数组和广义表] 1. 数组的基本概念与存储结构 2. 特殊矩阵的压缩存储 3. 稀疏矩阵的三元组表示 4. 稀疏矩阵的十字链表表示 5. 广义表 6. 广义表的存储结构及基本运算的实现 [项目1 - 猴子选大王(数组版)] 一群猴子,编号是1,2,3 -m,这群猴子(m个)按照1-m的顺序围坐一圈.从第1只开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,最后一只出圈的猴子为大王.输入m和n,输出猴子离开圈子的顺序,从中也可以看出最后为大王是几号

第五章:1.数组和广义表 -- 数组

前言: 2.3.4章讨论的线性结构中的数据元素都是非结构的原子类型,元素的值是不再分解的.本章讨论的两种数据结构---数组和广义表可以看成是线性表在下述含以上的扩展:表中的数据元素本身也是一个数据结构. 其中.数组是一种比较熟知的数据类型,几乎所有程序语言都把数组类型设定为固有类型,前两节节以抽象数据类型的形式讨论数组的定义和实现,使读者加深对数组的理解. 目录: 1.数组的定义 2.数组的顺序表示和实现 3.矩阵的压缩存储 4.广义表的定义 5.广义表的存储结构 6.m元多项式的表示 7.广义

数据结构期末复习第五章数组和广义表

数据结构期末复习第五章 数组和广义表 二维数组A[m][n]按行优先 寻址计算方法,每个数组元素占据d 个地址单元.     设数组的基址为LOC(a11) :LOC(aij)=LOC(a11)+((i-1)*n+j-1)*d     设数组的基址为LOC(a00) :LOC(aij)=LOC(a00)+( i*n+j )*d    二维数组A[m][n]按列优先 寻址计算方法,每个数组元素占据d 个地址单元.     设数组的基址为LOC(a11) :LOC(aij)=LOC(a11)+((j

数组和广义表-第5章-《数据结构题集》答案解析-严蔚敏吴伟民版

习题集解析部分 第5章 数组和广义表 ——<数据结构题集>-严蔚敏.吴伟民版        源码使用说明  链接??? <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明        课本源码合辑  链接??? <数据结构>课本源码合辑        习题集全解析  链接??? <数据结构题集>习题解析合辑       本习题文档的存放目录:数据结构\▼配套习题解析\▼05 数组和广义表       文档中源码的存放目录:数据结构\▼配

5-5-广义表(头尾链表存储表示)-数组和广义表-第5章-《数据结构》课本源码-严蔚敏吴伟民版

课本源码部分 第5章  数组和广义表 - 广义表(头尾链表存储表示) ——<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接??? <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明        课本源码合辑  链接??? <数据结构>课本源码合辑        习题集全解析  链接??? <数据结构题集>习题解析合辑        本源码引入的文件  链接? Status.h.SequenceString.c    

5-6-广义表(扩展线性链表存储表示)-数组和广义表-第5章-《数据结构》课本源码-严蔚敏吴伟民版

课本源码部分 第5章  数组和广义表 - 广义表(扩展线性链表存储表示) ——<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接??? <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明        课本源码合辑  链接??? <数据结构>课本源码合辑        习题集全解析  链接??? <数据结构题集>习题解析合辑        本源码引入的文件  链接? Status.h.SequenceString.c  

数据结构习题之多维数组和广义表

第五章 多维数组和广义表 一.基本要求.重点.难点 本章目的是介绍多维数组的逻辑结构特征及其存储方式.特殊矩阵和稀疏矩阵的压缩存储方法.本章重点是熟悉多维数组的存储方式.矩阵的压缩存储方式,难点是稀疏矩阵的压缩存储方示下实现的算法. 二.考核目标.考核要求 1.多维数组,要求达到"理解"层次 1.1多维数组的逻辑特征. 1.2多维数组的顺序存储结构及地址计算方式. 1.3数组是一种随机存取结构的原因. 2.矩阵的压缩存储,要求达到"理解"层次 2.1特殊矩阵和稀疏矩

5-3-行逻辑链接的顺序表(稀疏矩阵)-数组和广义表-第5章-《数据结构》课本源码-严蔚敏吴伟民版

课本源码部分 第5章  数组和广义表 - 行逻辑链接的顺序表(稀疏矩阵) ——<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接??? <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明        课本源码合辑  链接??? <数据结构>课本源码合辑        习题集全解析  链接??? <数据结构题集>习题解析合辑        本源码引入的文件  链接? Status.h.Scanf.c        相关测试