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

c语言数据结构---广义表

#include<stdio.h>
#include<stdlib.h>
typedef struct GNode{//广义表  int NodeTag;      //标志域union{           char data;struct GNode *sublist;};struct GNode *next;  
}*PGNode,PG;
void CreateGList(PGNode &GL)
{char ch;scanf("%c", &ch);//读入一个字符,此处只可能读入空格#、左括号或英文字母if(ch=='#')//若输入为空格,则置表头指针为空{GL = NULL;}else if(ch=='(')   {GL = (PGNode)malloc(sizeof(struct GNode));GL->NodeTag = 1;CreateGList(GL->sublist);}else{       GL =  (PGNode) malloc(sizeof(struct GNode));GL->NodeTag = 0;GL->data = ch;}scanf("%c", &ch);//逗号、右括号或分号if(GL==NULL)      //若*GL为空,则什么都不做
{
return ;
}else if(ch==',')//若输入逗号则递归构造后继表{
CreateGList(GL->next);
}else if((ch==')') || (ch==';')){GL->next = NULL;
}
}int DepthGList(PGNode GL)
{int max=0;//遍历表中每一个结点,求出所有子表的最大深度while(GL!=NULL){if(GL->NodeTag==1){int dep = DepthGList(GL->sublist);if(dep > max)max = dep;}GL = GL->next;}return(max + 1);//返回表的深度
}int LengthGList(PGNode GL)
{if(GL!=NULL)return(1 + LengthGList(GL->next));elsereturn(0);
}void PrintGList(PGNode GL)
{if(GL->NodeTag==1){   printf("(");if(GL->sublist==NULL)//若子表为空则输出'#'字符{
printf("#");}else{PrintGList(GL->sublist);
}              
printf(")");}else//对于单元素结点{printf("%c", GL->data);}       
if(GL->next!=NULL){printf(",");//先输出逗号分隔符PrintGList(GL->next);//再递归输出后继表}
}int main()
{//建议尝试案例(a,b,c,(d,e,f,g,(h,i,j,k,(l,m,n),o),p),q); 
PGNode GL;
int depth,length;
printf("请输入一个广义表,以分号结束 :  ");
CreateGList(GL);printf("\n此方法输出的输出广义表->  :");PrintGList(GL);printf("\n\n");
depth =  DepthGList( GL->sublist );
printf("广义表的深度depth为-> %d \n",depth);
length = LengthGList( GL->sublist );
printf("广义表的长度width为-> %d \n",length);
return 0;
}

相关文章:

  • Centos 7rc.local脚本命令开机不执行及指定用户启动的方法
  • Android手势识别类,GestureDetector,ScaleGestureDetector
  • RT-DETR算法优化改进:Backbone改进 | LSKNet:遥感旋转目标检测新SOTA | ICCV 2023
  • SQL 部分解释。
  • [云原生案例2.3 ] Kubernetes的部署安装 【多master集群架构高可用 ---- (二进制安装部署)】
  • 2023华为ict网络赛道初赛(部分)试题
  • 【chat】2:vs2022 连接远程ubuntu服务器远程cmake开发
  • TDengine数据迁移之数据对比
  • idea生成代码(一):实现java语言的增删改查功能(基于EasyCode插件)支持自定义模板【非常简单】
  • excel用RAND函数生成一个大于0小于1的随机数
  • 使用 HTTP Client 轻松进行 API 测试
  • clickhouse的安装和配置
  • 超详细!必看!!STM32--系统滴答SysTick
  • 鸿蒙系统扫盲(一):鸿蒙OS和开源鸿蒙什么关系?
  • 2023网络钓鱼状况报告:ChatGPT等工具致网络钓鱼电子邮件数量激增1265%
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • Python 反序列化安全问题(二)
  • scrapy学习之路4(itemloder的使用)
  • 创建一种深思熟虑的文化
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 排序算法之--选择排序
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 算法-图和图算法
  • 在Mac OS X上安装 Ruby运行环境
  • const的用法,特别是用在函数前面与后面的区别
  • linux 淘宝开源监控工具tsar
  • 移动端高清、多屏适配方案
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • #数学建模# 线性规划问题的Matlab求解
  • #微信小程序:微信小程序常见的配置传旨
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (175)FPGA门控时钟技术
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (3)(3.5) 遥测无线电区域条例
  • (day 12)JavaScript学习笔记(数组3)
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (三)docker:Dockerfile构建容器运行jar包
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (四)模仿学习-完成后台管理页面查询
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (转)平衡树
  • *1 计算机基础和操作系统基础及几大协议
  • .apk 成为历史!
  • .NET 动态调用WebService + WSE + UsernameToken
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .netcore 获取appsettings
  • .net分布式压力测试工具(Beetle.DT)
  • .NET中的Exception处理(C#)
  • @Bean, @Component, @Configuration简析
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • @media screen 针对不同移动设备
  • @private @protected @public
  • @RequestBody与@ModelAttribute
  • [20150321]索引空块的问题.txt
  • [3D基础]理解计算机3D图形学中的坐标系变换