当前位置: 首页 > 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;
}

http://www.lryc.cn/news/229697.html

相关文章:

  • 2023.11.12使用flask对图片进行黑白处理(base64编码方式传输)
  • MATLAB中Filter Designer的使用以及XILINX Coefficient(.coe)File的导出
  • js 深度学习(四)
  • leetcode刷题日记:121. Best Time to Buy and Sell Stock( 买卖股票的最佳时机)
  • Mac 本地部署thinkphp8【部署环境以及下载thinkphp】
  • 【汽车电子】CAN总线分析仪使用介绍(PCAN/同星CAN卡)
  • C //例 7.13 有一个3*4的矩阵,求所有元素中的最大值。
  • 基于SSM的供电所档案管理系统
  • excel用RAND函数生成一个大于0小于1的随机数
  • 详解IP安全:IPSec协议簇 | AH协议 | ESP协议 | IKE协议
  • mysql使用--数据库的基本操作
  • 计算机毕业设计选题推荐-个人记账理财微信小程序/安卓APP-项目实战
  • 如何利用IP代理进行海外推广?
  • 使用FFmpeg转封装为hls(m3u8)流
  • npm install导致的OOM解决方案
  • HTTP和HTTPS详解
  • 设计模式之模版方法(TemplateMethod)
  • 为什么数据安全很重要?哪些措施保护数据安全?
  • git push 操作代码回退
  • ESP32 Arduino引脚分配参考:您应该使用哪些 GPIO 引脚?
  • 【链接装载与库】 Linux共享库的组织
  • 大模型时代的机器人研究
  • devops步骤 -- jenkins安装
  • docker命令大全
  • 【EI会议征稿】第三届区块链、信息技术与智慧金融国际学术会议 (ICBIS2024)
  • 算法岗面经
  • Vue 事件修饰符
  • FD-Align论文阅读
  • bug:Junit5报错,@SpringBootTest没有运行
  • Clickhouse学习笔记(4)—— Clickhouse SQL