5.5广义表

广义表存储结构|数据结构 文章目录一、头尾链表的存储结构1、表头和表尾2、表结点和原子结点二、扩展线性链表的存储结构 一、头尾链表的存储结构 由于广义表的数据元素可以分为原子和广义表,由此需要两种结构的结点,一种是表结点(广义表),一种是原子结点(原子)。 非空广义表可以分解为表头和表尾。 1、表头和表尾 表头:非空广义表的第一个元素,可以是一个单原子,也可以是一个子表 表尾:去除表头之外其余元素构成的表,表尾一定是一个广... 阅读详情

5.5广义表

广义表,也是线性表的一种推广。它被广泛的应用于人工智能等领域的表处 理语言 LISP 语言中。在 LISP 语言中,广义表是一种最基本的数据结构,LISP 语言 编写的程序也表示为一系列的广义表。

一、 广义表的概念

在第 2 章中,线性表被定义为一个有限的序列( a1 ,a2 ,a3 ,…, an),其中 ai被限定 为是单个数据元素。

广义表也是 n 个数据元素( d1 ,d2 ,d3 ,…, dn)的有限序列,但不 同的是,广义表中的 di 既可以是单个元素,还可以是一个广义表,通常记做: GL =( d1 ,d2 ,d3 ,…, dn)。

GL 是广义表的名字,通常广义表的名字用大写字母表示。

n 是广义表长度。

若其中 di是一个广义表,则称 di是广义表 GL 的子表。

在广义表 GL中,d1是广义表表头,而广义表GL其余部分组成的表( d2 ,d3 ,…, dn)称为广义表表尾。

由此可见广义表的定义是递归定义的,因为在定义广义表时又使用了广义 表的概念。

下面给出一些广义表的例子,以加深对广义表概念的理解。

  • D=() 空表;其长度为零。
  • A=(a,(b,c)) 表长度为 2 的广义表,其中第一个元素是单个数据 a, 第二个元素是一个子表(b,c)。
  • B=(A,A,D) 长度为 3 的广义表,其前两个元素为表 A,第三个元素 为空表 D。
  • C=(a,C) 长度为 2 递归定义的广义表,C 相当于无穷表 C=(a,(a, (a,(…))))。

其中,A、B、C、D 是广义表的名字。

下面以广义表 A 为例,说明求表头、表尾的操作。
head(A)= a;表 A 的表头是: a
tail(A)=((b,c));表 A 的表尾是((b,c))。广义表的表尾一定是一个表。

从上面的例子可以看出:

  • ( 1 )广义表的元素可以是子表,而子表还可以是子表……,因此,广义表是一个 多层的结构。
  • ( 2 )广义表可以被其他广义表共享。如广义表 B 就共享表 A。在表 B 中不必 列出表 A 的内容,只要通过子表的名称就可以引用该表。
  • ( 3 )广义表具有递归性,如广义表 C。

二、 广义表的存储结构

由于广义表 GL=( d1 ,d2 ,d3 ,…, dn)中的数据元素既可以是单个元素,也可以是 子表,因此对于广义表来说,难以用顺序存储结构来表示它,通常用链式存储结构来表示。

1 .广义表的头尾链表存储结构

广义表中的每个元素用一个结点来表示,表中有两类结点:
一类是单个元素结 点,另一类是子表结点。

任何一个非空的广义表都可以将其分解成表头和表尾两部分,反之,一对确定的表头和表尾可以惟一地确定一个广义表。

因此,一个表结点可由三个域构成:标志域、指向表头的指针域和指向表尾的指针域,而元素结点只需要两个域:标志域和值域,其结点结构如下图所示。
在这里插入图片描述
广义表的头尾链表存储结构类型定义如下:

typedef enum {ATOM, LIST} ElemTag;  /* ATOM=0,表示原子;LIST=1, 表示子表*/ 
typedef struct GLNode 
{   
	ElemTag   tag;             /*标志位 tag 用来区别原子结点和表结点 */  
	union 
	{ 
		AtomType   atom;                 /*原子结点的值域 atom*/ 
		struct 
		{ 
			struct GLNode  * hp, *tp;
		}htp;   /*表结点的指针域 htp, 包括 表头指针域hp和表尾指针 域 tp*/
	}atom_htp;              /* atom_htp 是原子结点的值域 atom 和 表结点的指针域 htp 的联合体域*/ 
} GLNode,*GList; 

前面提到的广义表 A、B、C、D 的存储结构如下图所示:
在这里插入图片描述
在这种存储结构中,能够很清楚地分清单元素和子表所在的层次,在某种程度 上给广义表的操作带来了方便。

2 .广义表的同层结点链存储结构

在这种结构中,无论是单元素结点还是子表结点均由三个域构成。其结点结 构如下图所示。
在这里插入图片描述
广义表 A、 B、 C、 D 的扩展线性链表存储结构如下图所示
在这里插入图片描述
广义表的同层结点链存储结构类型定义如下:

typedef enum {ATOM,LIST} ElemTag; /* ATOM=0,表示原子;LIST=1,表 示子表*/ 
typedef struct GLNode 
{  
	ElemTag   tag;             
	union                      
	{ 
		AtomType   atom;     
		struct GLNode  * hp;     /*表头指针域*/ 
	}atom_hp;               /* atom_hp 是原子结点的值域 atom 和 表结点的表头指针域 hp 的联合体域*/ 
	struct GLNode  * tp;         /*同层下一个结点的指针域*/  
}GLNode,*GList; 
华为eNSP Pro实战:NE/CE设备SSH远程配置避坑指南 本文针对华为eNSP Pro用户在模拟多台NE路由器或CE交换机时遇到的浏览器卡顿问题,提供了详细的SSH远程配置避坑指南。通过对比浏览器与SSH客户端的资源占用和操作体验,文章详细阐述了为NE和CE设备配置SSH服务的关键步骤、命令差异及常见错误排查方法,旨在帮助用户提升实验效率,实现稳定高效的远程管理。 阅读详情

相关推荐

silvaco(TCAD)击穿特性仿真,的不收敛问题

在silvaco仿真学习过程中,最近这段时间一直有一个很大的问题困扰着我,那就是我在仿真击穿特型曲线的过程中,在电压加到后期比较大的情况下,往往会出现仿真不收敛的情况,正常情况下器件的击穿应该在一个外加偏压上,电流出现迅速的上升,这才是击穿的定义,但是我仿真的过程中程序跑到一个较大的电压时,器件出现击穿,我观察电压电流曲线,在击穿电压(程序报告的)电流并没有出现迅速的变化,类似于下图这种形式。(2)解决方法,将初始电压调整到合适的值,这个值可能是更大的也可能是更小的,要注意多多尝试。

zm19992533002908的博客 4947

数据结构:深入理解广义表常用的两种存储结构(头尾链,孩子兄弟链)

深入学习广义表的两种存储结构,还有遇到空表时候画图,主要将两种结构给放在一期进行比较;巩固学习知识,特别是表尾要注意加一层,还有头尾链空表时候破坏层次结构。最后写广义表的算法一定要掌握递归。

Supine_0的博客 1万+

以太网硬件核心:MAC、PHY、MII与交换机原理与实战排查

计算机网络通信的基础依赖于一套完整的硬件协议栈。在OSI模型中,数据链路层和物理层是实现设备间可靠、高效数据传输的基石。其核心原理在于将上层数据包封装成帧,并通过特定的介质访问控制与物理信号转换机制进行传输。这一过程的技术价值在于为上层应用提供了透明、稳定的通信信道,是互联网和所有局域网通信的物理承载。在嵌入式系统、网络设备开发及运维等应用场景中,深入理解底层硬件交互至关重要。本文将聚焦于以太网硬件的两大核心组件:负责逻辑成帧与流量控制的MAC控制器,以及负责数模转换与链路协商的PHY芯片。它们通过MII、

dgqvhtlwq472235338的博客 424

【数据结构】广义表的存储结构及基本运算(C语言)

目录1. 广义表基本概念2. 广义表的存储结构2.1 头尾链表存储结构2.2 同层结点链存储结构3. 广义表的基本运算3.1 求表头、表尾3.2 求长度、深度3.3 统计原子数目3.4 广义表的复制 1. 广义表基本概念 广义表是n个数据元素(d1,d2,d3,…,dn)的有限序列,di 既可以是单个元素,也可以是一个广义表。通常记作GL =(d1,d2,d3,…,dn),n是广义表长度。若其中 di 是一个广义表,则称 di 是广义表GL的子表。在广义表GL中,d1是广义表表头,其余部分组成的表称为广义表

weixin_51450101的博客 7821

Akamai移动端Sensor数据采集与BMP风控机制深度解析

本文深度解析了Akamai在移动端风控中的核心机制,重点阐述了Sensor数据如何通过采集陀螺仪、加速度计等硬件信息,结合设备指纹生成连续且符合物理规律的行为轨迹。详细剖析了数据从采集、加密校验到通过BMP风控三重验证(校验位、时间差、数据逻辑)的完整流程,并提供了从模拟优化到自建风控模型的实用应对思路。

quiet的专栏 286

Ubuntu声卡检测与故障排查:从基础命令到驱动修复

本文详细介绍了在Ubuntu系统中进行声卡检测与故障排查的完整流程。从使用lspci、aplay等基础命令识别硬件,到排查驱动冲突、修复权限问题,再到调整PulseAudio高级配置,提供了一套系统性的解决方案。文章结合实战案例,帮助用户快速诊断并解决Ubuntu系统常见的“无声”问题,恢复音频功能。

g2h3i4j5的博客 228

数据结构5-广义表

文章目录广义表一、基本概念1.定义2.术语3.性质二、广义表的头尾表示 广义表 一、基本概念 1.定义 广义表是一种不同构的线性结构:LS=(α0,α1,⋯ ,αn)LS=(\alpha_0,\alpha_1,\cdots,\alpha_n)LS=(α0​,α1​,⋯,αn​) 其中LSLSLS是表名。αi\alpha_iαi​是表中元素,它可能是原子atom(数据元素),也可能是广义表。 2.术语 表头:LS的第一个元素 表尾:其余元素组成的表 表长:最外层包含的元素的个数 深度:所含括号的重数。原子

m0_55213627的博客 690

老司机避坑指南:UC3842自举驱动电路发热严重?这样选C39/C37电容值最稳

本文针对UC3842自举驱动电路发热严重的问题,深入剖析了驱动波形边沿速度与损耗的矛盾根源。通过实测数据与热成像分析,重点阐述了关键电容C39/C37的选型策略,提供了从经验公式到量化计算的优化方法,帮助工程师在发热与效率间找到最佳平衡点,并探讨了分立方案与专用驱动IC的适用场景。

lambda的博客 747

【数据结构】广义表的同层链表结构

广义表的同层链表结构 广义表除了同层链表结构还有头尾链表存储结构 头尾链表存储结构较同层链表简单,容易求深度和长度。 同层链表较头尾链表优势是占据空间较少。 代码收获 同层链表和头尾链表结构主要区别在于头尾链表是所有表节点连接,而同层链表因为共用体的原因,原子节点可以链接表节点。 复习了枚举类型的写法,枚举类型结构体中间都是逗号。 由于同层链表连接结构,用递归可以求出其物理上实际的深度,但是...

不忘初心,坚定道路! 784

利用wolcmd.exe批处理执行远程唤醒

代码如下: @echo off cls :check if exist wolcmd.exe goto targetmac echo 缺少wolcmd.exe echo. goto end :targetmac cls echo -------------------------------------------------------- echo 目标主机PC-01地址:40235678A...

Chriseo的博客 6949

【论文汇总】Diffusion Models视频生成/视频编辑/可控视频生成/跨模态视频生成

本文总结了Diffusion Models视频生成领域相关的工作,目前共收录142篇,持续更新中。

沉迷单车的追风少年 1674

广义表取表头表尾_5.4 广义表

返回目录:Chilan Yu:《数据结构》目录链接​zhuanlan.zhihu.com5.4.1 广义表的概念广义表也是线性表的一种推广。广义表也是n个数据元素(d1,d2,d3,…,dn)的有限序列,但不同的是,广义表中的di既可以是单个元素,还可以是一个广义表,通常记作:GL=(d1,d2,d3,…,dn)。GL是广义表的名字,通常用大写字母表示。n是广义表的长度。若 di是一个广义表,则称...

weixin_33201531的博客 4205

Python-增加b站视频播放量

如果条件允许的情况下,有代理API更好,每次请求url调用API也更方便。如果没有的话,也不用担心,网上本身也有着很多免费国内代理,不过代理是否可用需要自己花点时间去检测,检测方法笔者这里就不详述了,后面有时间的话会单独针对这一块做详细说明。在开始之前,需准备代理IP。总之,在每次请求url的时候,随机带入某个IP防止被平台检测,便于达到增加播放量预期。大致思路就是针对你的目标代理平台进行IP抓取,并存入到自己本地的IP代理池。本文是该专栏的第1篇,后面会持续更新对应平台干货知识,记得关注。

Python进阶专栏《爬虫实战进阶》,《Pyppeteer从入门到精通》原创作者 5211

广义表head tail 运算_5.4 广义表

返回目录:Chilan Yu:《数据结构》目录链接​zhuanlan.zhihu.com5.4.1 广义表的概念广义表也是线性表的一种推广。广义表也是n个数据元素(d1,d2,d3,…,dn)的有限序列,但不同的是,广义表中的di既可以是单个元素,还可以是一个广义表,通常记作:GL=(d1,d2,d3,…,dn)。GL是广义表的名字,通常用大写字母表示。n是广义表的长度。若 di是一个广义表,则称...

weixin_39629617的博客 4143

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

4.5、广义表

数组即可以存储不可再分的数据元素(如数字 5、字符 'a'),也可以存储数组(即 n 维数组)。

融码一生:专注 Python、C/C++、Linux、机器学习 & 深度学习、NLP、算法领域分享 931

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

5.4广义表的定义&5.5广义表的存储结构

5.4广义表的定义&5.5广义表的存储结构

IT1995的博客 1万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

5.5 广义表的存储结构

/* c5-5.h 广义表的头尾链表存储表示 */  typedef enum{ATOM,LIST}ElemTag; /* ATOM==0:原子,LIST==1:子表 */  typedef struct GLNode  {    ElemTag tag; /* 公共部分,用于区分原子结点和表结点 */    union /* 原子结点和表结点的联合部分 */    {      A

SJMP 8975

数据结构 总结5 广义表

数据结构复习5 广义表

qq_50918834的博客 561

chap 5 数组与广义表

单选题 2-1 广义表 ( (a, b), c, d, e) 的表头和表尾分别是()。 (2分) a和e a和 (c, d, e) (a, b) 和e (a, b) 和 (c, d, e) 该广义表的长度:4 当广义表LS非空时,称第一个元素为表头,称其他元素组成的表为表尾 广义表的深度:广义表中括弧的重数 2-2 广义表是一种()数据结构。 (2分) 非递归的 递归的 ...

寒舟不渡的博客 2645

广义表head tail 运算_专业课笔记 5 数组和广义表

计算对应元素位置将矩阵的上三角保存到一维数组中,则原本个元素的矩阵可以压缩到 n*(n+1)/2,则 i,j 对应一维数组中的规律是等差数列的前 i 项和+j 的规律,注意数组和矩阵起始的位置例如,下三角以行序或者上三角以列序为主序放在一维数组 M[0, (n+1)/2-1]中,最左上角为对应数组中的第 k 个,则 i,j 位置对应一维数组的关系为,i * ( i + 1 ) / 2 +...

weixin_39619174的博客 1077

5-5 广义表练习题

例题: 广义表A=(a , b ,(c , d),(e , (f , g))),则Head(Tail(Head(Tail(Tail(A)))))的值为( D ) A. (g) B. (d) C. c D. d 2、扩展线性链表(孩子兄弟链表) 结点的结构形式 两种结点形式:有孩子结点,用以表示列表; 无孩子结点,用以表示单元素。 结点的链接 A=( ) ...

Log.e的博客 5710

数据结构5.5_广义表的递归算法

对一些可以用递归算法解决的问题,通常可以先写出问题求解的递归定义。 和第二数学归纳类似,递归定义由基本项和归纳项两部分组成。 递归定义的基本项描述了一个或几个递归过程的终结状态。虽然一个有限的递归可以描述一个无限的计算过程。 但任何实际应用的递归过程,除错误情况外,必定能经过有限层次的递归而终止。 所谓的终结状态,指的是不需要继续递归而可直接求解的状态。 递归定义的归纳项描述...

weixin_33938733的博客 1347

第5章 数组和广义表

第5章 数组和广义表 5.1数组的定义 5.2 数组的顺序表示和实现 二维数组的两种存储方式 数组的顺序表示和实现 5.3 矩阵的压缩存储 5.3.1 特殊矩阵 5.3.2 稀疏矩阵 三元组顺序表 行逻辑连接的顺序表 十字链表 5.4 广义表的定义 5.5 广义表的存储结构 5.6 n元多项式的表示 5.7 广义表的递归算法 5.7.1 求广义表的深度 5.7.2 复制广义表 5.7.3 建立广义表的存储结构 ...

ChaselWang的博客 660

面试必考!广义表深度/长度计算的5种边界案例与图解分析

本文深入解析了数据结构面试中广义表的深度与长度计算,通过图解和5种典型边界案例(如空表处理、嵌套结构)进行精讲,帮助读者掌握递归思想和易错点,从容应对技术面试。

spice的博客 618

5.4 广义表的定义

广义表 定义 一般记作 LS = ( a1 , a2 , … , an ) n 是广义表 LS 的长度。 ai 可以是单个元素,也可以是广义表。分别称为 LS 的原子和子表。(支持递归定义)通常小写表示原子,大写表示子表。 当广义表 LS 非空,则称第一个元素 a1 为 LS 的表头,剩下的所有元素组成 LS 的表尾。表头可能是原子或者列表,表尾一定是列表 举例 1、A = ( ) 空表,表长为0 2、B = (e ) 只有1个原子元素,表长为1 3、C = (a, (b,

engineer0的博客 486

[数据结构]第5章 数组和广义表

数组是相同类型的数据元素的集合数组是一种定长的线性表int n=10;int A[n] //在C/C++是错误的int *p;//C++malloc //C语言如此动态分配数组一般不作插入和删除操作一旦建立了数组.则结构中的数据元素个数和数据元素之间的关系就不再发生变动数组中每个元素都对应于一组下标//这里讨论的数组与高级语言中的数组有所不同:高级语言中的数组是顺序结构;而这里的数组既可以是顺序的,也可以是链式结构,用户可根据需要选择.

2301_80078575的博客 1076
上一篇: 5.4稀疏矩阵压缩存储下
下一篇: 6.1树的基本概念
亓木Wilson
博客等级 码龄7年 51粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值