广义表的存储结构及其基本运算
目录
广义表存储结构构思:
广义表的相关操作分析,进而对图示进行改进:
改进方案 :
广义表节点的定义:
广义表链式存储实例:
求广义表的长度
求广义表的深度:
代码分析:
输出广义表
建立广义表的链式存储结构:
特殊情况汇总 :
答疑环节:
广义表存储结构构思:
通过上节广义表的定义 , 我相信大家对广义表有了大致的了解 , 广义表可以有多层嵌套 ,灵活多变 , 纵观四种表示方式 ,我们认为图解最直观 .
所以我们接下来的操作 ,就是在图的基础上来进行操作的.
广义表的相关操作分析,进而对图示进行改进:
数据操作:
(1) CreatGL(s): 创建广义表
(2) GLLength(L): 求广义表长度;
(3) GLDepth(L): 求广义表深度;
(4) DisGL(L): 输出广义表L;
(5) Head(L): 求表头
(6) Tail(L): 求表尾
通过观察左图 ,纵然直观 ,可以看出从 节点C出发,进行分叉 , 但是结合具体操作 ,我们会发现 ,有多出口 , 多入口 , 造成程序运行的多变性 , 不利于机器语言的模式化设计 , 多出口 ,给语言设计带来不确定性 , 检索困难 .
改进方案 :
所以我们要在直观的基础上 ,对广义表图示存储结构进行一些牺牲 , 根据广义表的定义 , 广义表是有先后顺序的 ,所以我们每一层都只保存一个出口 ,让每一层的第一个节点(也称表头节点 )当作链接入口节点 , 其他的同一层的节点 ,称作其的兄弟,如右图 :
所以我们就形成了 ,逻辑上的多层链表结构 ,如下图:
广义表节点的定义:
通过观察上面的广义表结构 , 广义表在同一层级的数据元素包括 单个数据元素(原子) 和 广义表的子表
所以我们需要对这两种类型的节点进行定义
我们可以为这两种节点设置类型标识 :
1 ---子表 , 0----原子
因为 原子和广义表子表的存储的数据也不一样 , 原子存放的是 数据data, 广义表子表节点存放的是指向下一个元素的指针数据
typedef struct lnode {int tag; //节点类型标识
广义表的存储结构及其基本运算相关推荐
- 【数据结构】广义表的存储结构及基本运算(C语言)
目录 1. 广义表基本概念 2. 广义表的存储结构 2.1 头尾链表存储结构 2.2 同层结点链存储结构 3. 广义表的基本运算 3.1 求表头.表尾 3.2 求长度.深度 3.3 统计原子数目 3. ...
- 5.4广义表的定义5.5广义表的存储结构
广义表是线性表的推广. 广义表一般记作LS=(α1,α2,...,αn) n是它的长度αi可以是单个元素也可以说广义表,分别称为广义表LS的原子和子表. 当广义表LS非空时,称第一个元素α1为LS的表 ...
- 广义表的存储结构--头尾链表存储表示/扩展线性链表存储表示
//广义表的存储结构 //1.头尾链表存储表示 typedef enum {ATOM,LIST} ElemTag;//0:原子,1:子表 typedef struct GLNode { Ele ...
- 不同表结构数据迁移_C语言:数据结构-广义表的存储结构
广义表相对于线性表﹑数组﹑串等线性结构是较为复杂的结构,其元素可以具有不同的结构(可以是原子,也可以是列表),通常采用链式结构存储广义表. (1)表头.表尾链式存储 链式结构中用结点储存列表中的数据元 ...
- 如何画出广义表的存储结构
这部分王道书没有提到,但是自主命题的学校考过这种题,为了方便自己复习,所以写的方法比较通俗,方便理解 例:画出广义表(a,(x,y),((x)))的存储结构 分析:可以这么理解 1.一个完整的括号相当 ...
- 广义表及其存储方式简介
广义表(Lists,又称列表)是线性表的推广.线性表定义为n>=0个元素a1,a2,a3,-,an的有限序列.线性表的元素仅限于原子项,原子是作为结构上不可分割的成分,它可以是一个数或一个结构, ...
- 【数据结构与算法】广义表的储存结构和结点定义的Java实现
广义表的存储结构 广义表中元素类型不统一,在Java语言的环境下难以用顺序结构存储.链式结构则相对灵活,可以解决广义表的递归和共享问题,所以常用链式存储结构来对广义表进行存储. 如果广义表不空,则可以 ...
- 线性表的存储结构总结
线性表 分为:顺序表 和 链表(单链表,双链表,循环链表(单双),静态链表) 顺序表的存储结构 :设MaxSize为一个整形常量 需要: 定义一个数组来存储线性表中的元素 定义一个整型变量来存储线性表 ...
- 【数据结构总结】第四章:串、数组和广义表(线性结构)
第四章:串.数组和广义表(线性结构) 提示:本文主要是以思维导图的形式概括数据结构第一章的精华内容,基本不会用到文字性的内容,目的是为了给大家梳理每个重要的知识点的相关概念,方便大家在复盘的时候快速阅 ...
- 递增有序顺序表的插入 (20分) 实验目的:1、掌握线性表的基本知识 2、深入理解、掌握并灵活运用线性表。3、熟练掌握线性表的存储结构及主要运算的实现 已知顺序表L递增有序,将X插入到线性表的适当位置
递增有序顺序表的插入 (20分) 实验目的:1.掌握线性表的基本知识 2.深入理解.掌握并灵活运用线性表.3.熟练掌握线性表的存储结构及主要运算的实现 已知顺序表L递增有序,将X插入到线性表的适当位置 ...
最新文章
- Java and Python: a perfect couple - Developer.com
- sql loader 导入数据时的问题
- 每日温度—leetcode739
- 直播预告|中台基石腾讯云TStack的正确使用姿势
- IIS Express 无法启动
- 精讲23种设计模式-基于观察者模式~设计异步多渠道群发框架
- 低脂肪肉能帮你减肥吗?
- IE浏览器中Image对象onload失效的解决办法
- 【Openstack】【Nova】开发者入门,开发工作流
- 安装nvm nodejs npm webpack vue vue-cli
- nginx匹配规则说明以及匹配的优先级
- 平面设计师必读的十本书
- 【PostgreSQL-9.6.3】约束
- apache+tomcat,搭建负载均衡服务器
- linux实训4文件系统管理,实训项目2 Linux文件系统管理
- SPSS基础教程:SPSS菜单命令详解(二)
- 2020安洵杯--MISC
- YYImage加载gif动态图原理
- 安装NVIDIA驱动与CUDA教程(+cuDNN)(终极版)
- java做橡皮擦效果_顶风作案,html5 canvas实现橡皮擦功能,擦了就知道有惊喜了...
热门文章
- cf3月活动大全 3月活动汇总2015
- 真人玩计算机图片大全集,微信真人表情图片大全 用自己的照片做微信真人表情包(好玩),各类搞笑素材任你选择...
- 如何用计算机测量图片景深,用比较仔细的测量搞清楚“景深”(1.实测景深与公式比较)...
- 交换机路由器常用命令大全
- python爬虫代码大作业_爬虫大作业
- 这三年沉淀的前端错误监控系统,一篇文章讲透给你
- 《A Study on Performance Benefifits of Core Morphing in an Asymmetric Multicore Processor》文献精读1
- 蚂蚁金融科技全面开放战略背后的技术布局
- 心跳检测,用oob实现
- 计算机应用 行动计划范文,制定计算机学习计划范文3篇0001.docx