广义表的一些概念

本文首发于我的个人博客Suixin’s Blog
原文: https://suixinblog.cn/2019/02/generalized-list.html  作者: Suixin

基本概念

广义表(Lists,又称列表)是线性表的推广。广义表是n(n\geqslant 0)个元素a_1,a_2,a_3,…,a_n的有限序列,其中a_i或者是原子项,或者是一个广义表。

  • 元素:广义表的元素可以是原子,也可以是广义表,也可以为空。
  • 表头:若广义表LS(n\geqslant 1)非空,则a_1是LS的表头。表头可以是单元素值,也可以是表。空的广义表不能求表头。
  • 表尾:若广义表LS(n\geqslant 1)非空,则除去表头后剩下的元素组成的表是LS的表尾。表尾一定是表。空的广义表不能求表尾。

例子

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

考点

  1. 广义表是0个或多个单因素或子表组成的有限序列,广义表可以是自身的子表,广义表的长度n\geqslant 0,所以可以为空表。广义表的同级元素(直属于同一个表中的各元素)具有线性关系。
  2. 广义表的表头为空,并不代表该广义表为空表。广义表()(())不同。前者是长度为0的空表,对其不能做求表头和表尾的运算;而后者是长度为1的非空表(只不过该表中惟一的一个元素是空表),对其可进行分解,得到的表头和表尾均是空表()
  3. 已知广义表LS=((a,b,c),(d,e,f)),运用headtail函数取出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. 在(非空)广义表中:1、表头head可以是原子或者一个表;2、表尾tail一定是一个表;3.广义表难以用顺序存储结构;4.广义表可以是一个多层次的结构。

参考

数据结构:广义表

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 广义表(Lists,又称列表)是线性表的推广。线性表定义为n>=0个元素a1,a2,a3,…,an的有限序列。线性...
    Pitfalls阅读 7,900评论 0 2
  • 一些概念 数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这...
    Winterfell_Z阅读 6,075评论 0 13
  • 第三章 栈和队列 栈和队列的定义和特点 1、栈的定义和特点 栈(Stack)是限制在表的一端进行插入和删除运算的线...
    游戏原画设计阅读 2,442评论 0 1
  • 广义表广义表的定义广义表的存储结构广义表的M元多项式广义表的递归算法 一、广义表的定义:广义表(Lists,又称列...
    风吹过山阅读 2,227评论 0 2
  • 今天走进大学食堂吃晚餐,女儿点的稀饭包子,我买了冒菜。 吃着吃着,女儿扑哧一声笑起来。原来她看到削面的机器,穿着厨...
    曾子玲阅读 176评论 0 1