数据结构 c++ 广义表
// CTest.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std; typedef char ElemType;
struct GLNode{
bool tag; //标志位
union{ //值域或子表的表头指针域
ElemType data;
GLNode *sublist;
};
GLNode *next;
};
//用来测试 (a,(b,(c)),(#),((d,e))),f,(g));
//求广义表的长度 广义表的长度就是求单链表的长度
int Lenth(GLNode *GL)
{
if(GL!=NULL){
return +Lenth(GL->next);
}else{
return ;
}
}
//求广义表的长度 广义表的长度就是求单链表的长度
int Depth(GLNode *GL)
{
int max=;
while(GL!=NULL){
if(GL->tag==true){
int dep = Depth(GL->sublist);
if(dep>max) max=dep;
}
GL=GL->next;
}
return max+;
}
//创建广义表
void Create(GLNode* &GL){
char ch;//读一个字符
cin>>ch;
//若输入#,则置GL为空
if(ch=='#') GL=NULL;
//若输入为左括号则建立由GL所指向的子表结点并递归构造字表
else if(ch='('){
GL = new GLNode;
GL->tag=true;
Create(GL->sublist);
}
else{
GL=new GLNode;
GL->tag=false;
GL->data=ch;
}
//此处读入的字符必为逗号,右括号或分号
cin>>ch;
//若GL为空,此时输入的字符必然为')',则什么都不用做
if(GL==NULL);
//若输入为逗号则递归构造后继表
else if(ch==',') Create(GL->next);
//若输入为右括号或分号则置GL的后继指针域为空
else if((ch==')')||(ch==';')) GL->next=NULL;
}
//打印输出广义表
void Print(GLNode *GL){
if(GL->tag==true){
cout<<'('; //对于表结点,则先输出左括号,作为开始符号
if(GL->sublist==NULL)
cout<<'#'; //若字表指针为空,则输出‘#’字符
else
Print(GL->sublist);//若为非空字表,则递归输出此表
cout<<')'; //当一个字表输出结束后,应输出右括号作为终止符
}
else cout<<GL->data; //对于单元素结点,输出该结点的值
if(GL->next!=NULL){ //输出GL结点的后继表
cout<<','; //先输出括号及分割符后
Print(GL->next); //再递归输出后继表
}
}
int _tmain(int argc, _TCHAR* argv[])
{
GLNode *g=NULL;
Create(g);
Print(g);
cout<<endl;
cout<<"广义表的长度:"<<Lenth(g->sublist)<<endl;
cout<<"广义表的深度:"<<Depth(g->sublist)<<endl;
system("pause");
return ;
}
数据结构 c++ 广义表的更多相关文章
- javascript实现数据结构:广义表
原文:javascript实现数据结构:广义表 广义表是线性表的推广.广泛用于人工智能的表处理语言Lisp,把广义表作为基本的数据结构. 广义表一般记作: LS = (a1, a2, ..., an ...
- 数据结构:广义表的实现(Java)
广义表的简单理解在这篇博文中:https://blog.csdn.net/lishanleilixin/article/details/87364496,在此不做赘述. Java实现广义表: pack ...
- 数据结构(C语言第2版)-----数组,广义表,树,图
任何一个算法的设计取决于选定的数据结构,而算法的实现依赖于采用的存储结构. 之前线性表的数据元素都是非结构的原子类型,元素的值是不可再分的.下面学习的这两个线性表是很特殊的,其中数据元素本身也可能是一 ...
- 数据结构算法C语言实现(十九)--- 5.5&5.6&5.7广义表
一.简述 传说Lisp的基本数据结构就是广义表,广义表也是具有典型递归属性的数据结构,此外,由于建表要处理字符串,用C语言处理起来也是一脸懵逼.....最后自己还想写一个将广义表还原成字符串的函数,一 ...
- 广义表操作 (ava实现)——广义表深度、广义表长度、打印广义表信息
广义表是对线性表的扩展——线性表存储的所有的数据都是原子的(一个数或者不可分割的结构),且所有的数据类型相同.而广义表是允许线性表容纳自身结构的数据结构. 广义表定义: 广义表是由n个元素组成的序列: ...
- 【C/C++】实现数据结构广义表
1. 广义表的定义 每个元素可以为Atom,原子,也可以为线性表. 线性表的推广.线性表元素有唯一的前驱和后继,为线性表,而广义表是多层次的线性表 表头:第一个元素,可能是 ...
- 数据结构(C语言版)-第4章 串、数组和广义表
补充:C语言中常用的串运算 调用标准库函数 #include<string.h> 串比较,strcmp(char s1,char s2) 串复制,strcpy(char to,char f ...
- 数据结构28:广义表及M元多项式
广义表,又称为列表.记作: LS = (a1,a2,…,an) ;( LS 为广义表的名称, an 表示广义表中的数据). 广义表可以看作是线性表的推广.两者区别是:线性表中的数据元素只能表示单个数据 ...
- 数据结构之---C语言实现广义表头尾链表存储表示
//广义表的头尾链表存储表示 //杨鑫 #include <stdio.h> #include <malloc.h> #include <stdlib.h> #in ...
随机推荐
- Vue项目的准备
1.下载nodejs 检查是否安装成功 2.使用gitee作为线上仓库 3.使用脚手架工具--命令行工具 能在8080里显示出以下画面即为成功
- 解决IDEA部署web项目时,jar包拷贝不全的问题
原因 先前已部署过,输出目录有lib文件夹. 再次部署时,IDEA一检测,发现输出目录已经存在lib文件夹,认为已经拷贝过了,为节省时间,不再重新拷贝jar包,殊不知我们新添加了jar包. 于是我们新 ...
- JavaScript - String对象,字符串,String包装类型
1. 字符串 1.1 字符串的不可变性 var str = 'abc'; str = 'hello'; // 当重新给str赋值的时候,常量'abc'不会被修改,依然在内存中 // 重新给字符串赋值, ...
- C#多态学习总结
面向对象编程三大特点 封装 继承 多态.今天我把自己学习多态的过程进行总结 多态 就是 同一个方法在不同情况下,会表选不同的效果(多个形态).在代码上表现就是 同一个父类对象 赋予不同的子类对象 就 ...
- 【剑指Offer面试编程题】题目1362:左旋转字符串--九度OJ
题目描述: 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S=&qu ...
- 什么是Socket:
先了解一些前提: 网络由下往上分为 物理层 .数据链路层 . 网络层 . 传输层 . 会话层 . 表现层 和 应用层.通过初步了解,我知道IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对 ...
- android下创建文件夹和修改其权限的方法
原文:http://www.cnblogs.com/wanqieddy/archive/2011/12/28/2304906.html 由于工作的需要,今天研究了在android下创建文件夹和修改其权 ...
- Linux centos7 Linux网络相关、firewalld和netfilter、netfilter5表5链介绍、iptables语法
一. Linux网络相关 yum install net-tools ifconfig查看网卡ip ifup ens33开启网卡 ifdown ens33关闭网卡 设定虚拟网卡ens33:0 mii- ...
- JavaScript高级程序设计(第3版)每章小结(1-5)
第一章 JavaScript的简介 第二章 在HTML中使用JavaScript 把JavaScript插入到HTML页面中要使用<Script>元素.使用这个元素可以把JavaScrip ...
- CentOS6.9安装redis
目录 Centos6.9下的Redis安装和配置(最简易方式) redis客户端登录方式 Centos6.9下的Redis安装和配置(最简易方式) 在服务器上创建一个目录/service,然后下载re ...