关于广义表的一些问题(在线等待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; //这个字符只能是','或')'
}
}