广义表

  • 一、广义表的定义和运算
    • 1、广义表的定义
    • 2、广义表的性质
  • 二、广义表的存储
    • 1、头尾表示法
    • 2、孩子兄弟表示法

广义表是线性表的推广,也称为列表(Lists)。线性表中的元素仅限于单个数据元素(原子),即不可以再分割;而广义表中的元素即可以是原子,也可以是子表。

一、广义表的定义和运算

1、广义表的定义

广义表是n(n>=0)个数据元素a1,a2,a3…an的有序序列,一般记做:
LS=(a1,a2,a3…an)
其中LS是广义表的名称,n是广义表的长度。每个a3(1<=3<=n)是LS非空时,称第一个元素a1为LS的表头(head),称其余元素组成的表(a2,…,ai…,an)为LS的表尾(tail)。显然,广义表的定义是递归的。
广义表通常用圆括号起来,并用逗号分隔开来,通常用大写字母表示广义表,用小写字母表示单个数据元素。下面是广义表的例子:
A=()——A是一个空表,它的长度为零
B=(e)——列表B只有一个原子e,它的长度是1
C=(a,(b,c,d))——列表C的长度为2,两个元素分别为a和子表(b,c,d)
D=(A,B,C)——列表D的长度为3,三个元素都是列表,将A,B,C带入后得D=((),(e),(a,(b,c,d))
E=(a,E)——这是一个递归表,它的长度为2,正相当于一个无限的列表。
广义表的长度指该广义表中所包含的元素(原子和子表)的个数。广义表的深度指该广义表所包含扩号的层数

2、广义表的性质

(1)广义表是一种多层次的数据结构,其中的元素可以是单元素,也可以是子表
(2)广义表可以是递归的表,即广义表也可以是其自身的子表。
(3)广义表可以为其他表所共享。
广义表结构相当灵活,可以兼容线性表、数组、树和有向图等各种常用的数据结构。

二、广义表的存储

广义表中的数据元素可以是具有不同的结构,因此难以用顺序的存储结构来表示,而链式存储结构分配灵活,易于解决广义表的共享与递归问题,所以通常都采用链式的存储结构存储广义表。
广义表的元素可以是数据元素,也可以是表,因此结点的结构也需要两种:一种表结点,用以表示表;另一种是原子结点,用以表示原子。按结点形式的不同,广义表的链式存储结构又可以分为不同的两种存储方式。

1、头尾表示法

由于广义表中的数据元素即可能是表示也可能是单元素,相应地在头尾表示法中结点的结构形式有两种:一种是表结点,用以表示法;另一种是元素结点,用以表示原子。表结点由三个域:标志域(tag=1)、表头指针域(hp)、表尾指针域(tp)组成;而原子结点由两个域;标志域(tag=0)和值域(data)组成。广义表的存储结点可定义:

typedef enum{ATOM,LIST}ElemTag;
typedef struct GLNode{ElemTag tag;union{DataType atom;Struct{struct GLNod *hp, *tp;}ptr;}
}*GList;

在这种存储结构中有几种情况:
(1)除空表的表头指针为空外,对任何非空列表,其表头指针均指向一个表结点,且该结点中的hp域指示列表表头(或为原子结点,或为表结点),tp域指向列表表尾(除非表尾为空,则指针为空,否则必为表结点)
(2)容易分请列表中原子和子表所在层次,如在列表D中,原子a和e在同一层次上,而b、c和d在同一层次且比a和e低一层,B和C是同一层的子表。
(3)最高层的表结点个数即为列表的长度。

2、孩子兄弟表示法

广义表的另一种表示法称为孩子兄弟表示法。在孩子兄弟表示法中,也有两种结点形式:一种是有孩子结点,用以表示子表;另一种是无孩子结点,用以表示原子。在有孩子结点中包括一个指向第一个孩子的指针和一个指向兄弟的指针;而在无孩子结点中包括一个指向兄弟的指针和该原子的元素值,为了能区分这两类结点,在结点中设置一个标志域。如果标志为1,表示该结点为有孩子结点;如果标志为0,则表示结点为无孩子结点

typedef enum {ATOM ,LIST}ElemTag;
typedef struct GLNode{ElemTag tag;union{DataType atom;struct GLNode *hp;};struct GLNode *tp;
}*GList;

数据结构(C语言)-广义表相关推荐

  1. 数据结构C语言——广义表

    很久没有发博客记录了,不过应该也没人关心这个,哈哈哈. 突然想起来,学习也不能只是干学,稍微做点记录. 之前我对html.css.js基础有了一定的理解,也学了一些模板,不过现在我想先把计算机基础给补 ...

  2. 数据结构数组计算机中的应用,2018考研计算机:数据结构数组和广义表复习重点...

    2018考研计算机:数据结构数组和广义表复习重点 2017-08-17 16:00 | 考研集训营 <数据结构(C语言版)>复习重点在二.三.六.七.九.十章,考试内容两大类:概念,算法, ...

  3. c语言 静态链表插入排序,数据结构C语言版 表插入排序

    西门豹治邺奇计 数据结构C语言版 表插入排序.txt两个人吵架,先说对不起的人,并不是认输了,并不是原谅了.他只是比对方更珍惜这份感情./* 数据结构C语言版 表插入排序 算法10.3 P267-P2 ...

  4. 数据结构--数组和广义表

    数组 数组的定义: 数组:按一定格式排列起来,具有相同类型的数据元素的集合 一维数组:若线性表总的数据元素为非结构的简单元素,则称为一维数组 一维数组的逻辑结构:线性结构.定长的线性表 int num ...

  5. 数据结构14——求广义表深度(严5.30)

    Description 试按表头.表尾的分析方法编写求广义表的深度的递归程序. Input 输入一串以'('开始,以'('结束的字符串,并且输入的左右括号必须匹配,如:(),(())-- Output ...

  6. 数据结构----数组与广义表专题

    数组与广义表专题 数组的顺序表示和实现 前言 数组中任意一个元素存储地址的计算 一维数组 二维数组 更一般的二维数组 矩阵的压缩存储 前言 对称矩阵 三角矩阵 前言 上三角对应关系 下三角关系 三对角 ...

  7. 西北工业大学NOJ数据结构—014求广义表深度

    #include <stdio.h> #include <stdlib.h>typedef struct Node {int A_L;//使用枚举不熟练,A_T代表Atom或L ...

  8. 数据结构(C语言)顺序表的定义及基本操作

    顺序表的定义及基本操作 一.数据结构:顺序表的定义,创建,基本运算,实现 二.全部代码 定义顺序表 #include<stdio.h> #include<malloc.h> # ...

  9. 数据结构C语言顺序表入门简单题目你会了吗?

    通常,线性表可以采取顺序存储和链式存储两种,今天我们来讨论下顺序存储结构以及其对应的实现算法. 采用顺序存储是表示线性表的最简单的方法,具体做法是:将线性表中的元素一个接一个地存储在一片相邻的存储区域 ...

  10. 数据结构 习题 第五章 多维数组和广义表 (C语言描述)

    最近在复习数据结构,所以想把平时上课做的习题做个总结,如果大家有遇到这方面的问题就可以参考一下了,废话不多说,直接开始吧. 1.单选题 稀疏矩阵一般的压缩存储方法有两种,即( D) A. 二维数组和三 ...

最新文章

  1. Retrofit2 multpart多文件上传详解
  2. GMM_example(1)
  3. 启动Mysql时发生的一个关于PID文件错误问题
  4. 双项通过|百度点石通过信通院「可信数据流通平台」、「联邦学习」双项测评
  5. 一劳永逸:域名支持通配符,ASP.NET Core中配置CORS
  6. Eiblog 初体验,搭建教程
  7. HDFS的简介及基本操作(常用的命令参数介绍)
  8. Scala里Map()集合
  9. 小程序 实名信息_微信小程序+商城信息管理系统
  10. centos 6.5 安装rsync
  11. Redis的持久化 RDB AOF
  12. linux系统添加中文输入法
  13. 父与子编程之旅第六章节easyGUI下载+Python3.7下的安装问题解决
  14. Bootdo后台管理系统使用步骤详解
  15. python cnn模型_如何在Python中使用预训练的CNN模型
  16. 服务器虚拟机启动失败经验总结
  17. [kubernetes]-kubernetes+nfs创建高可用mysql
  18. iOS App-Mac文件共享操作
  19. Teardrop攻击初体验
  20. 腾讯云和阿里云对比哪个好?云计算优势测评

热门文章

  1. numpy的文件存储.npy .npz 文件详解
  2. [zz]从软件工程师到IT猎头:我的一点经历和感触zt
  3. Ubuntu18.04忘记密码解决(八十七)
  4. word的表格怎么转化成html,从WORD表格换成html.doc
  5. 深度学习——Dual Regression Networks for Single Image Super-Resolution(DRN)
  6. C# DataGridView控件选中行获取其值
  7. matlab整除方式
  8. 【CISSP】安全运营
  9. java命名规范(驼峰命名法)
  10. 爱奇艺小程序陪你嗨一夏