- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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);
您可能关注的文档
- 支座铸造课程设计说明书.pdf
- 攀枝花co氧化项目蓄热式高温氧化炉RTO技术方案.doc
- 改版大学生活规划.ppt
- 摩恩销售人员培训资料.pdf
- 政府呼叫中心系统设计方案.doc
- 政府投资引导基金简介.docx
- 扬州“戏曲园”项目方案设计.pdf
- 政府绩效目标形成及指标设置-.ppt
- 挑战杯大学生创业计划大赛答辩ppt——福图科技.ppt
- 教学设计方案的编制2016.doc
- 2025年浙江财经大学东方学院单招语文测试模拟题库汇编.docx
- 2025年浙江药科职业大学单招语文测试题库及完整答案1套.docx
- 2025年浙江科技学院单招(语文)测试模拟题库一套.docx
- 2025年浙江省衢州市单招语文测试题库精选.docx
- 2025年湖北省荆门市行政职业能力测验模拟试题含答案.docx
- 2025年温州商学院单招语文测试题库a4版.docx
- 2025年浙江省绍兴市选调生考试(行政职业能力测验)综合能力测试题及答案一套.docx
- 2025年海南卫生健康职业学院单招(语文)测试题库最新.docx
- 2025年海南健康管理职业技术学院单招(语文)测试题库往年题考.docx
- 2025年浙江财经大学东方学院单招(语文)测试题库带答案.docx
文档评论(0)