广义表的存储结构算法.docxVIP

  • 6
  • 0
  • 约2.38千字
  • 约 4页
  • 2018-02-15 发布于河南
  • 举报
广义表的存储结构算法

/*---------------------------------------------------------------------广义表的存储结构---------------------------------------------------------------------*/#includestdio.h#includestdlib.htypedef char ElemType;//元素类型是字符型//广义表的存储结构struct GNode{int tag;//标志域union{//值域或子表的表头指针域ElemType data;struct GNode *sublist;};struct GNode *next;//指向后继结点的指针域};/*----------------------函数声明----------------------*/int LengthGList(struct GNode *GL);//求广义表的长度int DepthGList(struct GNode *GL);//求广义表的深度void CreateGList(struct GNode **GL);//建立广义表的存储结构void PrintGList(struct GNode *GL);//打印输出广义表int SearchGList(struct GNode *GL, ElemType e);//查找等于给定字符的单元素结点,查找成功则返回1,否则返回0/*----------------------主函数----------------------*/void main(){struct GNode *GL;//带表头附加结点printf(输入一个广义表,以分号结束\n);CreateGList(GL);printf(输出广义表:);PrintGList(GL);printf(\n);printf(广义表的长度:);printf(%d\n, LengthGList(GL-sublist));printf(广义表的深度:);printf(%d\n, DepthGList(GL-sublist));printf(搜索值d 的结果:);printf(%d\n, SearchGList(GL, d));}/*----------------------函数----------------------*///求广义表的长度int LengthGList(struct GNode *GL){if(GL!=NULL)return(1 + LengthGList(GL-next));elsereturn(0);}//求广义表的深度int DepthGList(struct GNode *GL){int max=0;//给max赋初值//遍历表中每一个结点,求出所有子表的最大深度while(GL!=NULL){if(GL-tag==1){int dep = DepthGList(GL-sublist);//递归调用求出一个子表的深度if(dep max)max = dep;//让max始终为同一层所求过的子表中深度的最大值}GL = GL-next;//使GL指向同一层的下一个结点}return(max + 1);//返回表的深度}//建立广义表的存储结构void CreateGList(struct GNode **GL){char ch;scanf(%c, ch);//读入一个字符,此处只可能读入空格#、左括号或英文字母if(ch==#)//若输入为空格,则置表头指针为空*GL = NULL;else if(ch==()//若输入为左括号则建立由*GL所指向的子表结点并递归构造子表{*GL = malloc(sizeof(struct GNode));(*GL)-tag = 1;CreateGList(((*GL)-sublist));}else{//若输入为字符则建立由*GL所指向的单元素结点*GL = malloc(sizeof(struct GNode));(*GL)-tag = 0;(*GL)-data = ch;}scanf(%c, ch);//此处读入的字符必为逗号、右括号或分号if(*GL==NULL);//若*GL为空,则什么都不做else if(ch==,)//若输入逗号则递归构造后继表CreateGList(((*GL)-next));else if((ch==)) || (ch==;))//若输入为右括号或分号则置*GL的后继指针域为空(*GL)-next = NULL;}//打印输出广义表void PrintGList(struct GNode *GL){//对于表结点的处理情况if(GL-tag=

文档评论(0)

1亿VIP精品文档

相关文档