第五章广义表.pptVIP

  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文档。上传文档
查看更多
在这种存储结构中有几种情况: ????(1)除空表的表头指针为空外,对任何非空列表,其表头指针均指向一个表结点,且该结点中的hp域指示列表表头(或为原子结点,或为表结点),tp域指向列表表尾(除非表尾为空,则指针为空,否则必为表结点); ????(2)容易分清列表中原子和子表所在层次。如在列表D中,原子a和e在同一层次上,而b、c和d在同一层次且比a和e低一层,B和C是同一层的子表; ????(3)最高层的表结点个数即为列表的长度。以上三个特点在某种程度上给列表的操作带来方便。 也可采用另一种结点结构的链表表示列表。其形式定义说明如下: typedef enum{ATOM,LIST}ElemTag;????//ATOM=0:原子,LIST=1:子表 ????typedef struct GLNode{ ????????ElemTag tag; //公共部分,用于区分原子结点和表结点 ????????union { //原子结点和表结点的联合部分 ????????????AtomType atom; //原子结点的值域 ????????????struct GLNode *hp; //表结点的表头指针 ????????????}; ??????? Struct GLNode *tp; //相当于线性链表的next,指向下一个元素结点 ????}*GList; //广义表类型GList是一种扩展的线性链表 1) 单链表是一种顺序结构,必须从第一个结点起,逐个检查每个结点的数据元素; 分析: 2) 从另一角度看,链表又是一个递归结构,若 L 是线性链表 (a1, a2, ?, an) 的头指针,则 L-next是线性链表 (a2, ?, an)的头指针。 a1 a2 a3 an … ? L 例如: a1 a2 a3 an ? L a1 a2 a3 an ? L 已知下列链表 1) “a1=x”,则 L 仍为删除 x 后的链表头指针 2) “a1≠x”,则余下问题是考虑以 L-next 为头指针的链表 … … a1 L-next L-next=p-next p=L-next void delete(LinkList L, ElemType x) { // 删除以L为头指针的带头结点的单链表中 // 所有值为x的数据元素 if (L-next) { if (L-next-data==x) { p=L-next; L-next=p-next; free(p); delete(L, x); } else delete(L-next, x); } } // delete 删除广义表中所有元素为x的原子结点 分析: 比较广义表和线性表的结构特点: 相似处:都是链表结构。 不同处:1)广义表的数据元素可能还是个 广义表; 2)删除时,不仅要删除原子结点, 还需要删除相应的表结点。 回溯法是一种“穷举”方法。其基本思想为: 假设问题的解为 n 元组 (x1, x2, …, xn), 其中 xi 取值于集合 Si。 n 元组的子组 (x1, x2, …, xi) (in) 称为部分解,应满足一定的约束条件。 对于已求得的部分解 (x1, x2, …, xi) , 若在添加 xi+1?Si+1 之后仍然满足约束条件, 则得到一个新的部分解 (x1, x2, …, xi+1) , 之后继续添加 xi+2?Si+2 并检查之。 * 广义表是线性表的推广和扩充,在人工智能领域中应用十分广泛。 在第2章中,我们把线性表定义为n(n≧0 )个元素a1, a2 ,…, an的有穷序列,该序列中的所有元素具有相同的数据类型且只能是原子项(Atom)。所谓原子项可以是一个数或一个结构,是指结构上不可再分的。若放松对元素的这种限制,容许它们具有其自身结构,就产生了广义表的概念。 广义表(Lists,又称为列表 ):是由n(n ≧0)个元素组成的有穷序列: LS=(a1,a2,…,an) 广义表 5.4 广义表的类型定义 ADT Glist { 数据对象:D={ei | i=1,2,..,n; n≥0; ei∈AtomSet 或 ei∈GList, AtomSet为某个数据对象 } 数据关

文档评论(0)

kfcel5460 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档