• 友链

  • 首页

  • 文章归档
h u a n b l o g
h u a n b l o g

欢

HI,Friend

03月
30
数据结构

广义表

发表于 2022-03-30 • 字数统计 1993 • 被 2,555 人看爆

描述

广义表是线性表的推广。即广义表中放松对表元素的原子限制,容许它们具有其自身结构。

定义

广义表是n(n≥0)个元素a1,a2,…,ai,…,an的有限序列。

其中

  • ①ai--或者是原子或者是一个广义表。
  • ②广义表通常记作:Ls=( al,a2,…,ai,…,an)。
  • ③Ls是广义表的名字,n为它的长度。
  • ④若ai是广义表,则称它为Ls的子表。
  • ⑤一个表展开后所含括号的层数称为广义表的深度

注意

  • ①广义表通常用圆括号括起来,用逗号分隔其中的元素。
  • ②为了区分原子和广义表,书写时用大写字母表示广义表,用小写字母表示原子。
  • ③若广义表Ls非空(n>1),则al是Ls的表头(head),其余元素组成的表(al,a2,…,an)称为Ls的表尾(tail)
  • ④广义表是递归定义的

例如

(1)A=()--A是一个空表,其长度为零,深度为1。
(2)B=(a)--B是一个只有一个原子的广义表,其长度为1,深度为1。
(3)C=(a,(b,c))--c是一个长度为2的广义表,第一个元素是原子,第二个元素是子表,深度为2。
(4)D=(A,B,C)=((),(a),(a,(b,c)))--D是一个长度为3的广义表,其中三个元素均为子表,深度为3。
(5)E=(C,d)=((a,(b,c)),d)--E是一个长度为2的广义表,第一个元素是子表,第二个元素是原子,深度为3。
(6)F=(e,F)(e,(e,(e,...)))--F是一个递归的表,它的长度为2,第一个元素是原子,第二个元素是表自身,展开后它是一个无限的广义表,深度为∞

广义表性质

(1)广义表的元素可以是子表,而子表又可以含有子表,因此广义表是一个多层次结构的表,它可以用图来形象地表示。

广义表图表示.png

(2)广义表具有递归和共享的性质,例如,表F就是一个递归的广义表,n表是共享的表,在表D中可以不必列出子表的值,而是通过子表的名字来引用。

广义表运算

广义表的两个特殊的基本运算:取表头head(Ls)和取表尾tail(Ls)。任何一个非空的广义表其表头可能是原子,也可能是子表,而其表尾一定是子表。

例

已知有下列的广义表,试求出下面广义表的表头head()、表尾tail()、表长length()和深度depth()。
(1) A=(a,(b,c, d),e,(f,g));                               (2) B=((a));
(3) C=(y,(z,w),(x,(z,w),a));                              (4) D=(x,((y),B),D)。

解析

(1) head(A)=a,tail(A)=((b,c,d),e,(f,g)),length(A)=4,depth(A)=2;
(2) head(B)=(a),tail(B)=(),length(B)=1,depth(B)=2;
(3) head(C)=y,tail(C)=((z, w),(x,(z,w),a)) length(C)=3,depth(C)=3;
(4) head(D)=x,tail(D)=(((y),B),D),length(D)=3,depth(D)=∞

广义表的存储结构

tag data/slink link

说明:
(1) tag标志位,tag=1,该结点是子表,第二个域为slink,用以存放子表的地址,当tag=0时,该结点是原子结点,第二个域为data,用以存放元素值。
(2) link域是用来存放与本元素同一层的下一个元素对应结点的地址,当该元素是所在层的最后一个元素时,link的值为NULL。

例

以上面为例
广义表存储结构例.png

分享到:
树与二叉树
C#中this的几种用法
  • 文章目录
  • 站点概览
欢

网红 欢

你能抓到我么?

Email RSS
看爆 Top5
  • mac系统版本与Xcode版本有冲突 4,091次看爆
  • JAVA_HOME环境配置问题 3,741次看爆
  • AssetBundle使用 3,509次看爆
  • VSCode配置C++开发环境 3,264次看爆
  • Lua反射 3,140次看爆

Copyright © 2025 欢 粤ICP备2020105803号-1

由 Halo 强力驱动 · Theme by Sagiri · 站点地图