当前位置: 首页 > news >正文

数据结构——广义表

介绍

在这里插入图片描述

注:广义表的元素既可以是一个元素(原子),也可以又是一个表(子表),()为原子是空元素,(())为子表是一个无元素的表

存储结构

对于表节点,需要有个标志域(tag表示他是子表还是原子)、指示表头的指针域(hp指示表内原子的地址)、指示表尾标志域(tp指向表尾,剩下的元素)

对于原子,需要需要有个标志域(tag表示他是子表还是原子)、值(atom)

在这里插入图片描述

typedef enum {ATOM, LIST} ElemTag;//ATOM==0:原子;LIST==1:子表
typedef struct GLNode
{ElemTag tag;//公共部分,区分子表和原子union //联合部分,各自特有的{AtomType atom;//原子的值struct{struct GLNode *hp, *tp;}ptr;//ptr是表节点的指针域}
}*GList//整个广义表的头指针

示例

广义表

在这里插入图片描述

用上面的存储结构,画出图如下,因为原子没有能力链接下一个元素,所以每个原子都要用一个表节点去指示

在这里插入图片描述

但是我们发现这样子很复杂,所以我们可以扩展一下,如下

在这里插入图片描述

操作

对于广义表中比较重要的操作:取表头(取表的第一个元素,可以是原子,也可以是子表,输出是元素)、取表尾(除了表头元素剩下的元素组成一个新广义表,输出为广义表)


http://www.mrgr.cn/news/51535.html

相关文章:

  • MATLAB和Python电车电池制造性能度量分析
  • 51单片机的厨房安全监控系统【proteus仿真+程序+报告+原理图+演示视频】
  • 提示msvcr100.dll丢失的解决方法,推荐这6种解决方法
  • c++前置和后置的运算符重载,红黑树的概念以及static关键字
  • 移动端面试问题笔记(一)
  • 【v5-Lite】模型导入使用-attempt_load
  • 【进阶OpenCV】 (16)-- 人脸识别 -- FisherFaces算法
  • 基于Arduino的简易收音机
  • DW-大模型生图安全疫苗注入作业记录
  • ES6新增特性
  • 60个java常用的代码(能够帮助您更好地理解Java编程)
  • Java 二分搜索
  • 二叉树——二叉树的前中后序遍历
  • 模型微调方法LoRA
  • 江大白 | 小目标检测的12种解决方案汇总,推荐收藏!
  • 【图解版】力扣第1题:两数之和
  • 小新学习Docker之Docker--harbor私有仓库部署与管理
  • GPTLink 源码快速搭建 ChatGPT 商用站点
  • 标准IO的函数接口
  • Linux——综合实用操作