关于广义表的一些问题(在线等待ing)

swsg 2005-12-10 11:13:21
我得这个输入子程序子能处理字符型的广义表,如果遇到广义表中的元素是实数型,浮点型的该怎么处理啊??
也就是说广义表中实数或是定点数浮点数以及科学计数法记录的数是怎么存储的啊?是不是一个数字占一个结点(568.23,(-23,2.3E2))是不是其中5 6 8 . 2 3 等等分别占一个结点进行存储,还是568.23一共占一个结点存储啊??
知道的给个回复啊?在线等待ing
#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#define NUM 30

typedef char datatype;

/*存储结构*/

typedef struct Node{/*内嵌整数*/

char tag;/*0为单元素,1为子表*/

union{

datatype d;/*单元素*/

struct Node *h;/*指向子表*/

};

struct Node *t;/*指向后继*/

}Node,*GList;

void Gets(GList &L,char* &s)
{//本算法识别一个待输入的广义表字符串,其中单字母表示原子,
//建立相应的存储结构,Ls为指向第一个结点的指针,若输入的字母为字符串“( )”
//则相应的广义表为空即Ls=NULL
char ch;
getch(ch); //从键盘上得到一个字符
if(ch!='(')
{
printf("error"); 广义表的第一个字符必须是“(”
return;
}
else return SetLs(L);
}

void SetLs(Glist &Ls)
{
//本算法识别一个待输入的从字符'('或‘,’之后的广义表字符串
//并建立相应的存储结构
char ch;
GLNode p;
getch(ch); //从键盘得到一个合法字符
if(ch=='') //空表
{
Ls=NULL;
getch(ch); //得到下一个字符,应该是‘)'
if(ch!=')') return ERROR;
}
else //广义表非空
{
Ls=(Glist)malloc(sizeof(GLNODE));
Ls->tag=1;
if(isalpha(ch) //表头为单原子
{
Ls->h=(Glist)malloc(sizeof(GLNode));
p=ls->h;
p->tag=0;
p->d=ch;
}
else if(ch=='(') SetLs(Ls->h); //表头为广义表
else return ERROR;
getch(ch); //输入下一个字符
if(ch==')') Ls->t=NULL; //广义表或其中一个表输入结束
else if(ch==',') SetLs(Ls->t); //当前表尾不尾空,等待输入下一个表
else return ERROR; //这个字符只能是','或')'
}
}
...全文
99 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
swsg 2005-12-11
  • 打赏
  • 举报
回复
那就不看程序,只说下怎么实现吧!!
cunsh 2005-12-11
  • 打赏
  • 举报
回复
错误太多了改了一堆还有一堆.楼主再改改.有很多地方抄错了呀.
fiftymetre 2005-12-11
  • 打赏
  • 举报
回复
广义表的概念,是数据结构里第一次出现的。它是线性表或表元素的有限序列,构成该结构的每个子表或元素也是线性结构的,
greenteanet 2005-12-11
  • 打赏
  • 举报
回复
我觉得用一个节点存储就可以啦,你可以修改你的datatype.你自己再修改你自己的程序吧.
cunsh 2005-12-10
  • 打赏
  • 举报
回复
我看你的datatype是char我想应该是5 6 8 . 2 3 等等分别占一个结点进行存储

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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