1. // CTest.cpp : 定义控制台应用程序的入口点。
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <iostream>
  6. #include <string.h>
  7. #include <stdio.h>
  8. using namespace std;
  9.  
  10. typedef char ElemType;
  11. struct GLNode{
  12. bool tag; //标志位
  13. union{ //值域或子表的表头指针域
  14. ElemType data;
  15. GLNode *sublist;
  16. };
  17. GLNode *next;
  18. };
  19. //用来测试 (a,(b,(c)),(#),((d,e))),f,(g));
  20. //求广义表的长度 广义表的长度就是求单链表的长度
  21. int Lenth(GLNode *GL)
  22. {
  23. if(GL!=NULL){
  24. return +Lenth(GL->next);
  25. }else{
  26. return ;
  27. }
  28. }
  29. //求广义表的长度 广义表的长度就是求单链表的长度
  30. int Depth(GLNode *GL)
  31. {
  32. int max=;
  33. while(GL!=NULL){
  34. if(GL->tag==true){
  35. int dep = Depth(GL->sublist);
  36. if(dep>max) max=dep;
  37. }
  38. GL=GL->next;
  39. }
  40. return max+;
  41. }
  42. //创建广义表
  43. void Create(GLNode* &GL){
  44. char ch;//读一个字符
  45. cin>>ch;
  46. //若输入#,则置GL为空
  47. if(ch=='#') GL=NULL;
  48. //若输入为左括号则建立由GL所指向的子表结点并递归构造字表
  49. else if(ch='('){
  50. GL = new GLNode;
  51. GL->tag=true;
  52. Create(GL->sublist);
  53. }
  54. else{
  55. GL=new GLNode;
  56. GL->tag=false;
  57. GL->data=ch;
  58. }
  59. //此处读入的字符必为逗号,右括号或分号
  60. cin>>ch;
  61. //若GL为空,此时输入的字符必然为')',则什么都不用做
  62. if(GL==NULL);
  63. //若输入为逗号则递归构造后继表
  64. else if(ch==',') Create(GL->next);
  65. //若输入为右括号或分号则置GL的后继指针域为空
  66. else if((ch==')')||(ch==';')) GL->next=NULL;
  67. }
  68. //打印输出广义表
  69. void Print(GLNode *GL){
  70. if(GL->tag==true){
  71. cout<<'('; //对于表结点,则先输出左括号,作为开始符号
  72. if(GL->sublist==NULL)
  73. cout<<'#'; //若字表指针为空,则输出‘#’字符
  74. else
  75. Print(GL->sublist);//若为非空字表,则递归输出此表
  76. cout<<')'; //当一个字表输出结束后,应输出右括号作为终止符
  77. }
  78. else cout<<GL->data; //对于单元素结点,输出该结点的值
  79. if(GL->next!=NULL){ //输出GL结点的后继表
  80. cout<<','; //先输出括号及分割符后
  81. Print(GL->next); //再递归输出后继表
  82. }
  83. }
  84. int _tmain(int argc, _TCHAR* argv[])
  85. {
  86. GLNode *g=NULL;
  87. Create(g);
  88. Print(g);
  89. cout<<endl;
  90. cout<<"广义表的长度:"<<Lenth(g->sublist)<<endl;
  91. cout<<"广义表的深度:"<<Depth(g->sublist)<<endl;
  92. system("pause");
  93. return ;
  94. }

数据结构 c++ 广义表的更多相关文章

  1. javascript实现数据结构:广义表

    原文:javascript实现数据结构:广义表  广义表是线性表的推广.广泛用于人工智能的表处理语言Lisp,把广义表作为基本的数据结构. 广义表一般记作: LS = (a1, a2, ..., an ...

  2. 数据结构:广义表的实现(Java)

    广义表的简单理解在这篇博文中:https://blog.csdn.net/lishanleilixin/article/details/87364496,在此不做赘述. Java实现广义表: pack ...

  3. 数据结构(C语言第2版)-----数组,广义表,树,图

    任何一个算法的设计取决于选定的数据结构,而算法的实现依赖于采用的存储结构. 之前线性表的数据元素都是非结构的原子类型,元素的值是不可再分的.下面学习的这两个线性表是很特殊的,其中数据元素本身也可能是一 ...

  4. 数据结构算法C语言实现(十九)--- 5.5&5.6&5.7广义表

    一.简述 传说Lisp的基本数据结构就是广义表,广义表也是具有典型递归属性的数据结构,此外,由于建表要处理字符串,用C语言处理起来也是一脸懵逼.....最后自己还想写一个将广义表还原成字符串的函数,一 ...

  5. 广义表操作 (ava实现)——广义表深度、广义表长度、打印广义表信息

    广义表是对线性表的扩展——线性表存储的所有的数据都是原子的(一个数或者不可分割的结构),且所有的数据类型相同.而广义表是允许线性表容纳自身结构的数据结构. 广义表定义: 广义表是由n个元素组成的序列: ...

  6. 【C/C++】实现数据结构广义表

    1. 广义表的定义     每个元素可以为Atom,原子,也可以为线性表.      线性表的推广.线性表元素有唯一的前驱和后继,为线性表,而广义表是多层次的线性表      表头:第一个元素,可能是 ...

  7. 数据结构(C语言版)-第4章 串、数组和广义表

    补充:C语言中常用的串运算 调用标准库函数 #include<string.h> 串比较,strcmp(char s1,char s2) 串复制,strcpy(char to,char f ...

  8. 数据结构28:广义表及M元多项式

    广义表,又称为列表.记作: LS = (a1,a2,…,an) ;( LS 为广义表的名称, an 表示广义表中的数据). 广义表可以看作是线性表的推广.两者区别是:线性表中的数据元素只能表示单个数据 ...

  9. 数据结构之---C语言实现广义表头尾链表存储表示

    //广义表的头尾链表存储表示 //杨鑫 #include <stdio.h> #include <malloc.h> #include <stdlib.h> #in ...

随机推荐

  1. Jquery实现ajax常用属性

  2. 第七届蓝桥杯javaB组真题解析-剪邮票(第七题)

    题目 /* 剪邮票 如[图1.jpg], 有12张连在一起的12生肖的邮票. 现在你要从中剪下5张来,要求必须是连着的. (仅仅连接一个角不算相连) 比如,[图2.jpg],[图3.jpg]中,粉红色 ...

  3. Ubuntu 16.04 安装Redis服务器端

    ~ sudo apt-get install redis-server 安装完成后,Redis服务器会自动启动,我们检查Redis服务器程序 检查Redis服务器系统进程 ~ ps -aux|grep ...

  4. CentOS使用日常

    安装Teamview TeamViewer官网 下载rpm包 yum install -y teamviewer.x86_64.rpm 搞定 systemctl status firewalld #查 ...

  5. [转]Java监听器的原理与实现

    原文链接 监听器是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动.监听器其实就是一个实现特定接口的普通java程序,这个程序专门用 ...

  6. A*算法和K短路(A*)

    堪称最好的A算法 https://blog.csdn.net/b2b160/article/details/4057781 K短路(A) https://www.jianshu.com/p/27019 ...

  7. Linux centos7VMware Apache和PHP结合、Apache默认虚拟主机

    一.Apache和PHP结合 httpd主配置文件/usr/local/apache2.4/conf/httpd.conf 启动报错 [root@davery ~]# /usr/local/apach ...

  8. Java实现图片内容无损任意角度旋转

    转自:http://blog.csdn.net/heliang7/article/details/7309394 主要问题是如何在图片做旋转后计算出新图片的长宽. 在java 2d和基本math库的帮 ...

  9. delphi中的pansichar和pchar等类型的区别

    varc: Char; {Char 类型的取值范围是: #0..#255, 用十六进制表示是: #$0..#$FF}begin{用十进制方式赋值:}c := #65;ShowMessage(c); { ...

  10. python之函数名称空间,作用域,嵌套函数

    目录 嵌套函数 定义 名称空间的三大类(只存变量名) 名称空间加载顺序 变量名的查找顺序为 作用域 嵌套函数 定义 函数内部定义的函数,无法在函数外部使用内部定义的函数. def f1(): def ...