05数组和广义表2.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第五章 数组和广义表 第四节 广义表的逻辑结构 一、定义 线性表的扩展,每个元素的结构不等。 GList={a1,a2,…,an | ai∈AtomSet或ai∈GList} ai∈AtomSet:ai为原子 ai∈Glist :ai为子表 数据关系:顺序关系、层次关系。 a1为表头(head)元素, 其余为表尾(tail)。 表头:函数名; 表尾:参数表 二、基本操作 求长度:GList_Length(L) 求深度: GList_Depth(L) 表的最大层次数 原子深度=0 表深度=max{GList_Depth(ai)}+1 例:求长度、深度: (a), (), ((a),a), (((a),a),(a),a) 遍历表:Glist_Traverse(L) 复制表:Glist_Copy(L,T) 取表头:GList_Head(L) 取表尾:GList_Tail(L) 取第i个元素:GList_nth(L,i) 求表的深度:int GList_Depth(GLNODE *L) 求表的长度:int GList_Length(GLNODE *L) 第五节 广义表的存储结构 扩展的线性链表 两种结点:表结点、原子结点 typedef enum {ATOM,LIST} ElemTag; typedef struct GLNode { ElemTag tag; //区别子表结点、原子结点 union { AtomType atom; struct GLNode *child; //指向子表的指针、 } struct GLNode *next; //后继指针 }GLNODE, *Glist; 结构约定:所有广义表带特殊头结点(相当于最外层括号)。 能简化算法。 绘制存储结构: GLNODE A,B,C; A=() B=(1,2,3) C=(1,(2,3,4),5) ((a (b c) d)(e f))的广义表结构? 第六节 广义表的递归算法 typedef enum {ATOM,LIST} ElemTag; typedef struct GLNode { ElemTag tag; union { char atom; struct GLNode *child; }UNION; struct GLNode *next; }GLNODE; main() { char str[30]=(a (b c) d); //(a (b c) d)(e f) int i=0; GLNODE *L1,*L2; L1=Glist_Create(str,i); GList_Traverse(L1); printf(%d\n,GList_Depth(L1)); L2=GList_Copy(L1); GList_Traverse(L2); printf(%d\n,GList_Depth(L2)); } 一、建立广义表(带特殊头结点) typedef enum {LP=1,RP=2,Atom=3,End=4} ElemFlag; //从str[*pi]开始读入一个元素 ElemFlag GetElem(char str[],int *pi,char *pe) { while(str[*pi]== ) (*pi)++; if(str[*pi]==\0) return(End); if(str[*pi]==() { (*pi)++; return(LP); } if(str[*pi]==)) { (*pi)++; return(RP); } *pe=str[*pi]; (*pi)++; return(ATOM); } //建广义表 GLNODE *Glist_Create(char str[],int *pi) { GLNODE *p; char e; switch(GetElem(str,pi,e)) { case ATOM: { p=(GLNODE *)malloc(sizeof(GLNODE)); p-tag=ATOM; p-UNION.atom=e; p-next=Glist_Create(str,pi); return(p); } case LP: { p=(GLNODE *)malloc(sizeof(GLNODE)); p-tag=LIST; p-UNION.child=Glist_Create(str,pi);

文档评论(0)

飞扬的岁月 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档