有关严蔚敏的数据结构

yun_5025 2005-08-05 08:36:47
习题集5.36广义表输出的递归算法
书后解答中说:
以下递归算法是典型的错误
if(Ls)
{
printf('(');
if(!Ls->tag) printf(Ls->atom);
else
{
P(Ls->ptr.hp);
printf(',');
P(Ls->ptr.tp);
}
printf('(');
}
为什么是典型错误?
...全文
191 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenzhichao2008 2005-08-10
  • 打赏
  • 举报
回复
if(!Ls- >tag) printf(Ls- >atom);
這一句錯了,例一個廣義表為:a,b,(c,e,f),g
那樣打印冊來是不是:(a
因此改為:
if(Ls)
{

if(!Ls- >tag)   
  {
     printf(Ls- >atom);
     printf(',');
     P(Ls- >下一個結點);
  }
else
{
    printf('(');
P(Ls- >ptr.hp);
printf(',');
P(Ls- >ptr.tp);
    printf(')');
}

}
chenzhichao2008 2005-08-09
  • 打赏
  • 举报
回复
能否将Ls的结构体放上来看看,
就递归本身,该题是没有错误
yun_5025 2005-08-09
  • 打赏
  • 举报
回复
原题:
5.36⑤ 试按教科书5.5节图5.8所示存储结构,编写按上题描述的格式输出广义表的递归算法。

完整的书后答案解释:
5.36 注意以下形式的递归算法是典型的错误:设过程名为P,存储结构如教科书图5.8所示结构形式:
if(Ls)
{
printf('(');
if(!Ls- >tag) printf(Ls- >atom);
else
{
P(Ls- >ptr.hp);
printf(',');
P(Ls- >ptr.tp);
}
printf(')');
}

说明:
"上题描述的格式"是指:
假设广义表按如下形式的字符串表示:(a1,a2,...,an)n>=0其中ai或为单字母表示的原子,或为广义表;n=0时为只含空格字符的空表( ).

5.5节图5.8所示存储结构是指:
//―――――广义表的头尾链表存储表示―――――
typedef enum {ATOM,LIST}ElemTag; //ATOM==0;原子,LIST==1:子表
typedef struct GLNode
{
ElemTag tag; //公共部分,用于区分原子结点和表结点
union //原子结点和表结点的联合部分
{
AtomType atom; //atom是原子结点的值域,AtomType由用户定义
struct
{
struct GLNode *hp,*tp;
}ptr; //ptr是表结点的指针域,ptr.hp和ptr.tp分别指向表头和表尾
};
}*GList; //广义表类型

问题:
为什么是典型错误?
yun_5025 2005-08-09
  • 打赏
  • 举报
回复
原题:
5.36⑤ 试按教科书5.5节图5.8所示存储结构,编写按上题描述的格式输出广义表的递归算法。

完整的书后答案解释:
5.36 注意以下形式的递归算法是典型的错误;设过程名为P,存储结构如教科书图5.8所示结构形式:
if(Ls)
{
printf('(');
if(!Ls->tag) printf(Ls->atom);
else
{
P(Ls->ptr.hp);
printf(',');
P(Ls->ptr.tp);
}
printf('(');
}

说明:
"上题描述的格式"是指:
假设广义表按如下形式的字符串表示:(a1,a2,...,an)n>=0其中ai或为单字母表示的原子,或为广义表;n=0时为只含空格字符的空表( ).

5.5节图5.8所示存储结构是指:
//―――――广义表的头尾链表存储表示―――――
typedef enum {ATOM,LIST}ElemTag; //ATOM==0;原子,LIST==1:子表
typedef struct GLNode
{
ElemTag tag; //公共部分,用于区分原子结点和表结点
union //原子结点和表结点的联合部分
{
AtomType atom; //atom是原子结点的值域,AtomType由用户定义
struct
{
struct GLNode *hp,*tp;
}ptr; //ptr是表结点的指针域,ptr.hp和ptr.tp分别指向表头和表尾
};
}*GList; //广义表类型

问题:
为什么是典型错误?
Kvci 2005-08-08
  • 打赏
  • 举报
回复
看看代码就错了啊
什么时候跳出去?
chenzhichao2008 2005-08-08
  • 打赏
  • 举报
回复
个人觉得没错
只是后面一个printf('(');
应改为printf(')');
yun_5025 2005-08-08
  • 打赏
  • 举报
回复
这是类c代码,不是c源码
printf('(')是个笔误,不好意思^_^
yun_5025 2005-08-07
  • 打赏
  • 举报
回复
少了一句
设过程明为P

我只抄了递归内部的部分
xiaocai0001 2005-08-07
  • 打赏
  • 举报
回复
没看明白是怎么递归起来的
楼主,代码是不是贴错了?

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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