广义表和数组

简介:

一、前言

    由于数组一般不作插入或删除操作,也就是说,一旦建立了数组,则结构中的数据元素个数和元素之间的关系就不再发生变动。因此采用顺序存储结构标示数组是自然的事情了

二、二维数组的存储方式

    1、以行序为主序的存储方式和以列序为主序的存储方式。

        行序存储的存储顺序为a00,a01,a02,a10,a11,a12,a20,a21,a22

        列序存储的存储顺序为a00,a10,a20,a01,a11,a21,a20,a21,a22

    2、以行序为主序的存储结构,假设每一个数据元素占L个存储单元,则二维数组A中任一元素aij的存储位置可由下面这个式子确定:

    LOC(i,j) = LOC(0,0) + (b2*i+j)*L;

 
    其中LOC(0,0)是数组的其实位置,也称为基地址或者基址。
三、广义表
     1、广义表是线性表的推广,也有人称其为列表。
     2、广义表一般记做:LS = (a1,a2,a3,…..,an);
         其中,LS是广义表的名称,n是它的长度。再线性表的定义中,ai只是限于单个元素。而再广义表中ai可以是党元素,也可以是广义表,分别称为广义表LS的原子和子表。习惯上,用大写字母表示广义表的名称,小写字母表示原子。
     当广义表LS非空时,称第一个元素a1为LS的表头(Head),称其余元素组成的表(a2,a3,......an)是LS的表尾(Tail)。
     
上边的5个是一些广义表的例子。
     3、重要结论:
          1⃣️、列表的元素可以是子表,而子表的元素还可以是子表。。。。。
          2⃣️、列表可为其他列表所共享。
          3⃣️、列表可以是一个递归的表,即列表其可以是其本身。
     4、任何一个非空列表其表头可能是原子,也可能是列表,其表尾必定为列表。
          例如GetHead(B,C) = B,GetTail(B,C) = (C)。
     5、列表()和(())不一样,前者为空表,长度为0;后者长度为1,可分解得到表头、表尾均为空表()。
     6、广义表的深度
          广义表的深度定义为广义表中括弧的重数,是广义表的一种量度。
          空表的深度为1.因为有一个括弧
相关文章
|
20天前
|
存储 人工智能 C语言
什么是广义表
什么是广义表
13 0
|
3月前
|
存储 机器学习/深度学习 人工智能
4.线性表之数组
4.线性表之数组
48 0
|
3月前
|
人工智能 Java C++
数组与链表
数组与链表
|
9月前
|
存储
数据结构实验八 数组和广义表的基本操作及应用
数据结构实验八 数组和广义表的基本操作及应用
56 0
|
4月前
|
算法 程序员
【算法训练-链表 五】【链表求和】:链表相加(逆序)、链表相加II(顺序)
【算法训练-链表 五】【链表求和】:链表相加(逆序)、链表相加II(顺序)
50 0
|
4月前
遍历一维数组
遍历一维数组
34 0
|
6月前
|
存储 缓存 算法
【算法基础】数组和链表,动态数组,循环数组,链表的变种
【算法基础】数组和链表,动态数组,循环数组,链表的变种
44 0
|
10月前
|
存储 NoSQL 算法
数组和链表
数组和链表
56 0
|
存储
广义表-求广义表深度,建立广义表,复制广义表
广义表-求广义表深度,建立广义表,复制广义表
80 0
|
存储 机器学习/深度学习 人工智能
八、串,数组和广义表
八、串,数组和广义表
八、串,数组和广义表