博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
广义表的创建和遍历
阅读量:5884 次
发布时间:2019-06-19

本文共 1806 字,大约阅读时间需要 6 分钟。

#include
#include
#include
#include
#include
#include
using namespace std;class GLNode{ public: int tag; string node; class { public: GLNode *hp, *tp; } ptr;};typedef GLNode *GList;class MyGList{ public: static const int ERROR = -1; static const int OK = 1; static const int LIST = 2; static const int NODE = 3; list
sl;//广义表的描述字符串 map
mp; GList L = NULL; MyGList(list
sl){ this->sl = sl; initMap(); } void buildGList(){ string s = *sl.begin(); int pos = s.find_first_of("="); if(pos!=s.npos) createGList(L, s.substr(pos+1, s.length())); } void outGList(){ out(L); } private: void server(string &s, string &hs){ int k = 0;//记录尚未匹配的左括弧的个数 int i = 0; for(i; i
::iterator i = sl.begin(); i!=sl.end(); ++i){ string s = *i, first, second; int pos = s.find_first_of("="); if(pos!=s.npos){ first = s.substr(0, pos); second = s.substr(pos+1, s.length()); } else { cout<<"广义表的描述字符串出错!"<
tag==NODE){ cout<
node<
ptr.tp) out(p->ptr.hp); } void createGList(GList &L, string s){ if(s=="()"){ //创建空表 L = NULL; } else { L = new GLNode;//因为类中有string变量,不能用malloc, 否者赋值无效 if(s.find(",")==s.npos && s.find("(")==s.npos && s.find(")")==s.npos){//原子结点 if(mp.find(s) == mp.end()){ L->tag = NODE; L->node = s; } else {//当s是只有一个大写字母组成的时候,说明它是一个子表,继续扩展 createGList(L, mp[s]);//这块出了开始bug, 调了好长时间 } } else {//非原子结点 L->tag = LIST; GList p = L, q; s = s.substr(1, s.length()-2); do{ string hs; server(s, hs);//分离表头 createGList(p->ptr.hp, hs); q = p; if(s!=""){//表尾不空 p = new GLNode; p->tag = LIST; q->ptr.tp = p; } }while(s!=""); q->ptr.tp = NULL; } } }};int main(){ freopen("in.txt", "r", stdin); list
sl; string s; while(cin>>s){ sl.push_back(s); } MyGList myGList(sl); myGList.buildGList(); myGList.outGList(); return 0;}测试数据:D=(A,B,C)A=()B=(e)C=(a,(b,c,d))

转载地址:http://owtix.baihongyu.com/

你可能感兴趣的文章
linux c下输入密码不回显
查看>>
浏览器全屏与退出
查看>>
js判断浏览器类型
查看>>
Java中的NIO基础知识
查看>>
httpd虚拟主机起不来!!
查看>>
嵌入式操作系统内存管理有哪几种,各有何特性
查看>>
20145223《信息安全系统设计基础》第3周学习总结
查看>>
横屏设置坐标
查看>>
SpringCache学习实践
查看>>
zookeeper使用详解(命令、客户端、源码)
查看>>
使用getline输入一行字符串
查看>>
根css显示分类--元素分类
查看>>
DataGridViewCheckBoxColumn的Value值和EditFormatedValue值不一致
查看>>
shell学习之路:shell基础大全2
查看>>
mysql状态查看 QPS/TPS/缓存命中率查看
查看>>
AndroidGUI04:Button(Basic Button,ImageButton, Check Box, Toggle Button, Radio Button)的常用技巧...
查看>>
201314的总结和计划,继续加油吧
查看>>
memcached
查看>>
JavaScript初探二
查看>>
Linux环境下OpenSceneGraph的安装和配置
查看>>