zoukankan      html  css  js  c++  java
  • 数据结构>广义表 小强斋

    广义表(List)

    一、广义表定义

    广义表一般记为LS=(a1,a2,…,an),其中LS是广义表(a1,a2,…,an)的名称,n是它的长度。在线性表中ai只限于单个元素,而在广义表的定义中,ai可以是单个元素,也可以是广义表,分别称为广义表LS的原子和子表。一般大写字母来表示广义表的名称,小写字母来表示广义表的原子。当广义表非空时,称第一个元素ai为LS的表头(Head),称其余元素组成的表(a2,…,an)是LS的表尾(Tail)。

    (1)A=()——A是一个空表,它的长度为零

    (2)B=(e)——列表B只有一个原子e,B的长度为1

    (3)C=(a,(b, c, d))——列表C的长度为2,两个元素分别为原子a和子表(b, c, d)。

    (4)E=(a, E)——这是一个递归的表,它的长度为2。E相当于一个无限的列表。

    广义表与线性表的区别和联系?

    广义表是线性表的推广,广义表中元素既可以是原子类型,也可以是列表;当每个元素都为原子且类型相同时,就是线性表。

    特点:

    • 有次序性     一个直接前驱和一个直接后继

    • 有长度       表中元素个数,

    • 有深度       表中括号的重数,

    • 可递归       自己可以作为自己的子表,如A=( a , (b, A) ),此时深度为∞

    • 可共享       可以为其他广义表所共享

    任何一个非空列表其表头可以是原子,也可以是列表,但其表尾必定是列表。

    列表()和(())不同。前者为空表,长度n=0;后者长度n=1,可以分解得到其表头、表尾均为空表()。

    两种特殊的基本操作:

    GetHead( L)   ——取表头(可能是原子或列表);

    GetTail( L)  ——取表尾(一定是列表) 。

    二、广义表的存储结构

    由于广义表的元素可以是不同结构(原子或列表),难以用顺序存储结构表示,通常用链式结构,每个元素用一个结点表示。列表的“元素”还可以是列表,所以结点可能有两种形式

    原子结点:表示原子,

     

    表结点:表示列表,若表不空,则可分解为表头和表尾,用3个域表示:标志域,表头指针,表尾指针。  表头指针指向子表,表位指针指向下一个节点 

    举例说明

  • 相关阅读:
    Java 函数式编程—@FunctionalInterface----functional interface
    人月神话的博客
    如何度量复杂度
    泛型沉思录:创建模版与使用模版生成代码
    ioc与bean管理
    模式(思维)匹配是什么
    简析散光的成因,以及什么是散光的度数和轴位?
    概括是什么?
    思维与模型、世界观
    抽象、维度、层次与分析、综合
  • 原文地址:https://www.cnblogs.com/xiaoqiangzhaitai/p/5429421.html
Copyright © 2011-2022 走看看