大家帮忙看看啦、

weixiaoshashou 2009-05-18 07:57:53
#include<iostream>
#include<malloc.h>
using namespace std;
typedef struct node
{
int tag;//如果为1就为子表,0就为元素
union
{
char data;
struct node *sublist;//子表指针
}val;
struct node *link;//后继指针
}GLnode;
GLnode *CreatGL(char*s)//创建广义表
{
GLnode *h;char ch;//用一个广义表形式的字串参数S
h=NULL;
ch=*s;//取扫描字符
s++;//串指针下移一位
if(ch!='\0')
{
h=(GLnode *)malloc(sizeof(GLnode));//创建新节点
if(ch=='(')//当为左括号
{
h->tag=1;
h->val.sublist=CreatGL(s);//递归构造子表并链接到表头结点
}
else if(ch==')')//当为空子表时
h=NULL;
else
{
h->tag=0;
h->val.data=ch;
}
}
else h=NULL;//串结束,子表为空
ch=*s;//取下个扫描字符
s++;//指针后移
if(h!=NULL)//串未结束判断
if(ch==',')//遇到字符“,”
h->link=CreatGL(s);//递归构造后续子表
else
h->link=NULL;//串结束,处理最后一个元素
return h;//返回指针
}
void DispGL(GLnode *g)
{
if(g!=NULL)
{
if(g->tag==1)
{
cout<<"(";
if(g->val.sublist==NULL)
cout<<")";
else
DispGL(g->val.sublist);
}
else
cout<<g->val.data;
if(g->tag==1)
cout<<")";
if(g->link!=NULL)
{
cout<<",";
DispGL(g->link);
}
}
}
int main()
{
char *L="((q,c,d),a,b,c,(d,e))";//这里只输出((q,c,d))??????????????问题来了
GLnode *H;
H=CreatGL(L);
DispGL(H);
system("pause");
}能帮我改一下算法么?急急急急急急急急

...全文
123 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
TADICAN 2009-05-19
  • 打赏
  • 举报
回复
#include "stdafx.h"

#include <iostream>
#include <malloc.h>
using namespace std;
typedef struct node
{
int tag;//如果为1就为子表,0就为元素
union
{
char data;
struct node *sublist;//子表指针
}val;
struct node *link;//后继指针
}GLnode;
GLnode *CreatGL(char**s)//创建广义表
{
GLnode *h;char ch;//用一个广义表形式的字串参数S
h=NULL;
ch=**s;//取扫描字符
(*s)++;//串指针下移一位
if(ch!='\0')
{
h=(GLnode *)malloc(sizeof(GLnode));//创建新节点
if(ch=='(')//当为左括号
{
h->tag=1;
h->val.sublist=CreatGL(s);//递归构造子表并链接到表头结点
}
else if(ch==')')//当为空子表时
{
free(h);//小心内存泄漏
h=NULL;
return h;//这里应该直接返回,其它地方没什么问题
}
else
{
h->tag=0;
h->val.data=ch;
}
}
else {//串结束,子表为空
h=NULL;
}
ch=**s;//取下个扫描字符
(*s)++;//指针后移
if(h!='\0')//串未结束判断
if(ch==',')//遇到字符“,”
h->link=CreatGL(s);//递归构造后续子表
else
h->link=NULL;//串结束,处理最后一个元素
return h;//返回指针
}
void DispGL(GLnode *g)
{
if(g!=NULL)
{
if(g->tag==1)
{
cout <<"(";
if(g->val.sublist==NULL)
{
//cout <<")"; //not necessary
}
else
DispGL(g->val.sublist);
}
else
cout <<g->val.data;
if(g->tag==1)
cout <<")";
if(g->link!=NULL)
{
cout <<",";
DispGL(g->link);
}
}
}
int main()
{
char *L="((q,c,d),a,b,c,(),(d,e))";//这里只输出((q,c,d))??????????????问题来了
GLnode *H;
H=CreatGL(&L);
DispGL(H);
system("pause");
return 0;
}
weixiaoshashou 2009-05-18
  • 打赏
  • 举报
回复
太谢谢你了,我就结贴。
TADICAN 2009-05-18
  • 打赏
  • 举报
回复
忘记说了。
如果你不是用vs,请去掉#include "stdafx.h"
TADICAN 2009-05-18
  • 打赏
  • 举报
回复
看了一下,你的游标移动有问题。
修改了一下,输出正常了。
代码如下:
// algorithm.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <malloc.h>
using namespace std;
typedef struct node
{
int tag;//如果为1就为子表,0就为元素
union
{
char data;
struct node *sublist;//子表指针
}val;
struct node *link;//后继指针
}GLnode;
GLnode *CreatGL(char**s)//创建广义表 //这里
{
GLnode *h;char ch;//用一个广义表形式的字串参数S
h=NULL;
ch=**s;//取扫描字符 //这里
(*s)++;//串指针下移一位 //这里
if(ch!='\0')
{
h=(GLnode *)malloc(sizeof(GLnode));//创建新节点
if(ch=='(')//当为左括号
{
h->tag=1;
h->val.sublist=CreatGL(s);//递归构造子表并链接到表头结点
}
else if(ch==')')//当为空子表时
h=NULL;
else
{
h->tag=0;
h->val.data=ch;
}
}
else h=NULL;//串结束,子表为空
ch=**s;//取下个扫描字符 //这里
(*s)++;//指针后移 //这里
if(h!=NULL)//串未结束判断
if(ch==',')//遇到字符“,”
h->link=CreatGL(s);//递归构造后续子表
else
h->link=NULL;//串结束,处理最后一个元素
return h;//返回指针
}
void DispGL(GLnode *g)
{
if(g!=NULL)
{
if(g->tag==1)
{
cout <<"(";
if(g->val.sublist==NULL)
cout <<")";
else
DispGL(g->val.sublist);
}
else
cout <<g->val.data;
if(g->tag==1)
cout <<")";
if(g->link!=NULL)
{
cout <<",";
DispGL(g->link);
}
}
}
int main()
{
char *L="((q,c,d),a,b,c,(d,e))";//
GLnode *H;
H=CreatGL(&L); //这里
DispGL(H);
system("pause");
return 0;
}

wangganggggmqj 2009-05-18
  • 打赏
  • 举报
回复
干什么的?还没看就头痛。
特等奖标准成品论文(Word无水印纯净版) 硬核结构:全文包含完整的摘要、问题重述与分析、模型假设、符号说明、模型建立与求解、灵敏度分析及结论。 即插即用:排版严格遵循官方规范,逻辑严密。拿到手即可作为绝佳的高分参考模板,稍作替换与个性化润色即可极速完稿,彻底解决写论文难的痛点。 双源硬核解题代码(Python与MATLAB双版本) 拒绝假代码:提供底层逻辑清晰、模块化设计的全套可运行源码。 全流程覆盖:涵盖从前期数据清洗预处理,到中期核心数学模型训练,再到后期启发式算法寻优。 傻瓜式运行:代码自带详尽的逐行中文注释,并支持一键生成高质量结果可视化图表,编程小白也能轻松复现与二次开发。 全量数据与结果展示表 所有中间处理数据、模型输出参数以及最终结论,均已精细整理成高质量表格。直观呈现性能评估指标与多模型对比分析,可直接作为论文正文或附件使用,极大提升学术说服力。 独家硬核思路解析 深入浅出剖析出题人意图,详细拆解每一小问的数学本质与底层逻辑,让你不仅知其然更知其所以然。 【四大核心产品优势】 高效实用:所有代码与论文均经过严格测试,确保结果精准无误、完全可复现,省去熬夜试错的时间。 全栈覆盖:从思路分析到跑出结果,再到写出高质量论文,提供一站式全流程资料矩阵。 排版辅助:资料内提供专业的论文排版一键转换工具与官方标准模板,告别格式调整的繁琐。 持续迭代:网盘直发,开赛后资料库将持续滚动更新,所有用户均可免费同步获取最新包。 【适用人群】 想要打破建模瓶颈的参赛队长与主攻手;急需高质量底层代码的编程小白;目标直指特等奖需要高分模板对标的精英团队。

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧