数据结构设计报告之静态链表.docVIP

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构设计报告之静态链表

数据结构设计报告之静态链表 普通链表均采用指针将多个随机的存储空间“连接”起来,形成链式结构线性表。然而,并不是所有语言都有指针操作(例如Basic、Fortran等),这些语言就无法实现传统的链表结构。 为了解决这类问题,前人就想出了一种用数组操作来代替指针操作的方式,描述单链表,我们把这种用数组描述的链表称为静态链表。 一、基本思想: 链表的节点中,包含数据域以及指针域;在静态链表中,指针域由下一节节点在数组中下标替代。即每个元素节点除了存放数据值以外,还需要标识其下一个节点的位置,由此在逻辑上形成一个链式结构的线性表。静态链表的主要设计思想有两点: 与顺序表一样,以数组的形式存储所有节点,需提前估计链表规模 每个节点除了包含数据元素,还需要存放下一节点在数组中的下标 虽然物理上,静态链表在初始时已经申请了足够的内存空间,但逻辑上链表的特性仍然需要使用一个节点,分配一个节点空间,用完之后,回收该节点空间。因此,可将静态链表中的节点分为两种:已使用节点、空闲节点。每次需要添加新数据时,从空闲节点中分配一个节点;每次删除一个元素时,将该节点回收到空闲节点之中。这些操作均为逻辑上的操作(仅修改节点属性值),在物理存储上并未真的申请空间或回收节点空间。 为了更加方便的分配、回收空闲节点,不妨将空闲节点也连成一条逻辑上的空闲节点链表。那么,静态链表在逻辑上包含两条链表: 数据链表:存放数据元素的链表 空间链表:空闲节点组成的链表 分配时,将空间链表的第一个节点从链表中删除,并分配给数据链表;回收时,将节点从数据链表中删除,再插回到空间链表之中。 二、抽象数据类型: 静态链表作为一种特殊的线性表,具备普通线性表的所有特性。抽象数据类型可以在线性表的抽象数据类型基础上进行封装及扩展,其抽象数据类型定义如下: ADT StaticSList{ 数据对象 D:{ai | ai ∈ElemSet, i = 1,2,…,n, n = 0} 数据关系 S:{ ai-1, ai | ai-1,ai ∈ D, i = 2,3,… n, n=0} 基本操作 P: InitSList(*L); // 构造一个空的静态链表 L DestorySList(*L); // 销毁静态链表L MallocNode(*L, e); // 在L中申请节点,存储数据元素 e FreeNode(*L, i); // 回收链表L中,第i个节点的空间 ClearSList(*L); // 清空一个静态链表 L SListLength(L); // 取静态链表L的长度,空表返回0 GetElem(L,i,*e); // 取静态链表中第 i 个元素值,赋给 e ,1=i=n LocateElem(L,e,compare()); // 返回L中值为e 的元素序号,若无返回0 SListInsert(*L, i, e); // 将元素 e 插入到L的第i个位置,1=i=n+1 SListDelete(*L,i,*e); // 删除L中第i个元素,并将其值赋给 e SListTraverse(L, visit()); // 依次遍历静态链表中所有元素,调用 visit() 函数 }//ADT StaticSList 三、代码实现(C语言) 抽象结构类型 预估静态链表的规模,此例中静态链表规模不超过9个数据元素(题目固定要求11个节点空间,其中0、1节点为指定的标识节点,故最多存放9个数据元素),然后抽象静态链表结构类型: 节点类型Node,包含数据域 data及指针域nexti(下一个节点的位置);静态链表类型SSList,包含空间域space(指针标记节点数组空间的起始地址)及头结点属性(标记头结点的位置)。 基本操作函数 InitSList(*L); // 构造一个空的静态链表 L DestorySList(*L); // 销毁静态链表L MallocNode(*L, e); // 在L中申请节点,存储数据元素 e FreeNode(*L, i); // 回收链表L中,第i个节点的空间 ClearSList(*L); // 清空一个静态链表 L SListLength(L); // 取静态链表L的长度,空表返回0 GetElem(L,i,*e); // 取静态链表中第 i 个元素值,赋给 e ,1=i=n LocateElem(L,e,compare()); // 返回L中值为e 的元素序号,若无返回0 SListInsert(*L, i, e); // 将元素 e 插入到L的第i个位置,1=i=n+1 SListDelete(*L,i,*e);

文档评论(0)

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

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

1亿VIP精品文档

相关文档