怎么写广义表的存储结构图 50

麻烦问一下,写广义表的存储结构图的方法是什么,如((()),a,((b,c),(),d),谢谢!... 麻烦问一下,写广义表的存储结构图的方法是什么,如((()),a,((b,c),(),d),谢谢! 展开
 我来答
蒋蒋
推荐于2017-09-30 · 谢谢关注
蒋蒋
采纳数:2255 获赞数:13906

向TA提问 私信TA
展开全部

  广义表的存储结构代码:


  /* c5-5.h 广义表的头尾链表存储表示 */

  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是表结点的指针域,prt.hp和ptr.tp分别指向表头和表尾 */

  }a;

  }*GList,GLNode; /* 广义表类型 */


  

  广义表的存储结构图:

  


  

光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
gaiement
2019-06-26 · TA获得超过8779个赞
知道答主
回答量:34
采纳率:0%
帮助的人:2.5万
展开全部

广义表储存图

/*---------------------------------------------------------------------

广义表的存储结构 

---------------------------------------------------------------------*/ 

#include<stdio.h> 

#include<stdlib.h>

typedef 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));  

else

return(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 =   

}   

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==1){ //存在子表,则输出左括号,作为开始符号   

printf("(");   

if(GL->sublist==NULL)//若子表为空则输出‘#’字符    

printf("#");   

else//若子表非空,则递归输出子表    

PrintGList(GL->sublist);   

printf(")");//当一个子表输出结束后,应输出一个右括号终止符

}   

else//对于单元素结点,则输出该结点的值   

printf("%c", GL->data);   

if(GL->next!=NULL)//输出结点的后继表  

{   

printf(",");//先输出逗号分隔符    

PrintGList(GL->next);//再递归输出后继表   

}

}   

//查找等于给定字符的单元素结点,查找成功则返回1,否则返回0 

int SearchGList(struct GNode *GL, ElemType e)

{  

while(GL!=NULL){   

if(GL->tag == 1)//存在子表,则递归搜索本层该子表   

{   

if(SearchGList(GL->sublist, e))

return(1);   

}   

else//存在单元素结点,则查询是否存在值e ,若存在则返回1   

{   

if(GL->data == e)    

return(1);  

}  

GL = GL->next;//使GL指向同一层的下一个结点      

}   

return(0);//剩下来的情况,GL值为NULL,代表搜索不到值e ,输出0  

}

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
3342800392
2014-06-15 · TA获得超过395个赞
知道小有建树答主
回答量:305
采纳率:0%
帮助的人:125万
展开全部

按层次来,先看整体有多少个“子表”,从表头指针出来就有多少个表结点,然后从出来的表结点按次序在进行延展,对于第一个表结点代表的是第一个子表,那么第一个子表里有多少个子表或者原子节点,从这个表结点里就延伸出多少个  “二代”表结点,层层向下,直到表结点指示原子节点为止,然后回溯到最开始的表结点层,重复以上的过程即可,是一种递归的思想感觉

 

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
moaiyijun
2012-06-11 · 超过22用户采纳过TA的回答
知道答主
回答量:159
采纳率:0%
帮助的人:83.1万
展开全部
1、头尾链表存储
2、扩展性链表存储
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式