静态链表注意事项.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文档。上传文档
查看更多
静态链表注意事项

静态链表注意事项 静态链表注意事项2010-11-05 21:551、当tmain函数中的S=1时,初始化后的空间里,第0个元素和第1个元素的位置数据域 是空的。第0个用来指示备用链表第一个元素的位子,第1个则用来指示静态链表 第一个元素的位子,而且在这个思路中一直都是这样的!(当然你可以采取另一种 方式实现,在此不讨论); 2、Malloc_SL操作时,它所做的动作只是从备用链表释放一个结点,但释放出来的这 个结点还没具体链接到静态链表中; 3、Free_SL操作时,动作只是把静态链表中要删除的结点释放出来,链接到备用链表中, 但静态链表中k结点的前驱和后继还没有处理; 4、当你把B中的元素往A插时,B的元素一直顺着没改变以前的A尾插,而不是插在已经插 入元素的后面结点,比方说,依次插m,n两元素到A,那么先插m,就是:A-m;然后插 n,就是:A-n-m; 静态链表:由系统在内存中开辟了固定的、互不连续的存储单元,在程序执行过程中不可 能人为地再产生新的存储单元,它跟顺序结构没关系 静态链表其实就是用数组来描述的链表,一般是用于不设指针类型的语言,很少在C语 言中使用。不是顺序结构 difference(SLinkListspace,intS)中的参数S=1时,有下面: 静态链表是这样的,在一个数组中有两个元素是不用的,分别是第0个元素和第1个元 素,第0个用来指示备用空间的第一个元素的位子,第1个则用来指示第一个链表元素 的位子,每当从链表中删除一个元素时.则让该元素成为备用链表的第一个结点,也即 让数组的第0个元素指向删除的结点,然后让删除的结点指向原来的备用链表的第1个 结点,插入的话类似 用游标实现链表,其方法是:定义一个较大的结构数组作为备用结点空间(即存储池)。当申请结点时,每个结点应含有两个域:data域和cursor域。data域用来存放结点的数据信息,需注意的是,此时的cursor域不在是指针而是游标指示器,游标指示器指示其后继结点在结构数组中的相对位置(即数组下标)。数组的第0个分量可以设计成表的头结点,头结点的next域指示了表中第一个结点的位置。表中当前最后一个结点的域为0,表示静态单链表的结束。我们把这种用游标指示器实现的单链表叫做静态单链表,static linked list。静态单链表同样可以借助一维数组来描述: #define Maxsize=链表可能达到的最大长度 typedef struct { ElemType data; int cursor; }Component,StaticList[Maxsize]; 假如有如上的静态链表S中存储这线性表(a,b,c,d,e,f,g,h,i),Maxsize=11,如图所示,要在第四个元素后插入元素e,方法是:先在当前表尾加入一个元素e,即:S[9].data=e;然后修改第四个元素的游标域,将e插入到链表中,即:S[9].cursor=S[4].cursor;S[4].cursor=9;,接着,若要删除第8个元素h,则先顺着游标链通过计数找到第7个元素存储位置6,删除的具体做法是令S[6].cursor=S[7].cursor。 上述例子中未考虑对已释放空间的回收,这样在经过多次插入和删除后,会造成静态链表的假满,即表中有很多空闲空间,但却无法再插入元素。造成这种现象的原因是未对已删除的元素所占的空间进行回收。解决这个问题的方法是将所有未被分配的结点空间以及因删除操作而回收的结点空间用游标链成一个备用静态链表。当进行插入操作时,先从备用链表上取一个分量来存放待插入的元素,然后将其插入到已用链表的相应位置。当进行删除操作时,则将被删除的结点空间链接到备用链表上以备后用。这种方法是指在已申请的大的存储空间中有一个已用的静态单链表,还有一个备用单链表。已用静态单链表的头指针为1.备用静态单链表的头指针需另设一个变量av来表示。 静态单链表的几个基本操作算法: space为一维数组名 这里的下标表示的就是数组的下标 ?下列三个操作的只有space备用链表,那么怎么访问已用链表内的数据呢?space[0].cur指向的是空闲的结点呀。后面的difference例子,另利用了一个S来做已用链表的头指针。 int LocateElem_SL(SLinkList space) {//在静态单链线性表L中查找第一个值为e的元素。若找到,则返回它在L中的位序,否则//返回0 i=S[0].cur; while(iS[i].data!=e) i=S[i].cur; return i; } void initSpace_SL(SLinkList space) {//将一维数组space中各分量链成一个备用链表,space[0].cur为头指针,0表示空指针 for

文档评论(0)

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

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

1亿VIP精品文档

相关文档