三)静态链表

来源:互联网 发布:手机游戏制作软件 编辑:程序博客网 时间:2024/06/08 19:54
三)静态链表 用一维数组实现线性链表---静态链表 顺序存储结构也可以实现链表存储功能。首先开辟一个足够大的结构体数组。结构体的一个成员存放数据元素,另一个成员存放链表中下一个数据元素在数组中的位置(“游标”),这称为静态链表。 静态链表存于数组中,但链表的输出却不是按数组的顺序输出的,而是由一个指定的位置开始根据游标依次输出的。 1.静态链表类型定义 #define MAXSIZE 1000 // 链表的最大长度typedef struct{ elemtype data; int cur; //指示域(代替指针),指示后继结点在数组中的位置; //数组的0分量可看作头结点,其指示域指示链表的第一个结点} component, SLinkList[MAXSIZE]; 备用链表的概念:为了管理存储结点的数组中哪些结点是已经插入到链表中的,哪些是没有插入到链表中,要在数组中定义两个链表,一个是有真实存储内容的链表,另一个是备用链表(空闲链表),数组中的所有结点都在这两个链表中,插入新结点时,从备用链表中删除一个结点插入到真实链表中,删除结点时,从真实链表中删除相应的结点插入到备用链表中。 静态链表与单链表的主要区别: (1)单链表结点通过malloc函数产生,结点被限制在动态存储区这个大范围内。因此,指示结点位置的指针类型实际上是长整型。而静态链表的结点被限制静态数字这个小范围内。因此,指示结点位置的指针(类似指针)一般为整型,甚至可以是字节型(max_size小于256)。 (2)单链表不用的结点用free函数释放,而静态链表中不用的结点要自己管理(插入到备用链表中)。 一般把数组中下标为0的单元SLinkList[0]设为备用链表的头结点,把最后一个单元SLinkList[MAXSIZE-1]设为真实链表的头结点。 2.静态链表的基本操作/*申请新单元:若备用链表非空,从被备用链表中新分配出一个结点(备用链表的第一个结点),返回该结点在数组中的下标(位置),否则返回0*//*将下标为k的空闲结点回收到备用链表中(成为备用链表中的第一个结点)*/ /*构造一个空的链表L,表头为L的最后一个单元L[MAXSIZE-1],其余单元链成一个备用链表,表头为L的第一单元L[0],"0"表示“空指针”*/ /*将表L重置为空链表*/ /*若L是空表,返回TRUE,否则返回FALSE*/ /*返回L中的数据元素个数*/ /*用e返回L中的第i个元素的值*/ /*在静态链表中查找第一值为e的元素,返回它在表中的为序,没找到则返回0*/ /*若cur_e是L的数据元素,且不是第一个,则用pre_e返回它的前驱,成功返回ok,否则error*//*若cur_e是L的数据元素,且不是最后一个,则用next_e返回它的后继,成功返回ok,否则error*//*在L中第i个元素之前插入新的数据元素e*//*删除在L中第i个元素,用e返回其值*//*依次对L中的每一个元素调用函数visit()*//*申请新单元:若备用链表非空,从被备用链表中新分配出一个结点(备用链表的第一个结点),返回该结点在数组中的下标(位置),否则返回0*/int Malloc(SLinkList space){ int i = space[0].cur; //备用链表的第一个结点 if(i) //非空 space[0].cur = space[i].cur; //备用链表的头结点指向原第二个结点(现第一个结点) return i;}/*将下标为k的空闲结点回收到备用链表中(成为备用链表中的第一个结点)*/void Free(SLinkList space ,int k){ space[k].cur = space[0].cur; space[0].cur = k;}/*构造一个空的链表L,表头为L的最后一个单元L[MAXSIZE-1],其余单元链成一个备用链表,表头为L的第一单元L[0],"0"表示“空指针”*/void InitList(SLinkList L){ int i; L[MAXSIZE-1].cur = 0; //空链表的表头 for(i=0;iListLength(L)) return ERROR; for(m=0;mListLength(L)+1) return ERROR; j = Malloc(L); if(j)//申请成功 { L[j].data = e; for(m=0;mListLength(L)) return ERROR; for(j=0;j
  • 三)静态链表
  • 【三】静态链表
  • 专题三-可复用静态链表
  • 链表算法三之静态链表
  • 大话数据结构三:线性表的链式存储结构(静态链表)
  • 大话数据结构三:线性表的链式存储结构(静态链表)
  • 数据结构笔记(三)静态链表的实现和基本操作
  • java数据结构 三(静态链表-游标实现)
  • PHP伪静态简单实现(三)
  • 静态链接VS动态链接(三)
  • BitBlaze(三) - 静态分析组件Vine
  • IOS静态库封装(三)
  • Python(三)Django静态文件配置
  • Adb移植(三)静态库源码
  • PAT1074(静态链表)
  • (7)静态链表
  • (二)静态链表
  • 数据结构(三) Java实现静态链表的顺序新增、指定位置新增和删除
  • Flex视频截图并通过WebService(C#)保存
  • Linux0.11内核--进程的调度(运行态(就绪态)和睡眠态之间的转换)
  • 纵使年华已逝,但我不曾放开爱你的手
  • .NET批量大数据插入性能分析及比较(4.使用DataAdapter批量插入)
  • 【连载】【FPGA黑金开发板】Verilog HDL那些事儿--PS2解码(九)
  • 三)静态链表
  • exchange 2007 收到重复邮件
  • Android下载源码,编译等的官网说明网址
  • Android的Orientation Sensor三个坐标的含义
  • 【连载】【FPGA黑金开发板】Verilog HDL那些事儿--VGA驱动(十)
  • CMMI基础知识
  • linux 飞鸽传输
  • 【连载】【FPGA黑金开发板】Verilog HDL那些事儿--VGA驱动(十)
  • 带著一颗心、浪迹天涯