第七篇:静态链表的游标实现
来源:互联网 发布:最优化方法第二版答案 编辑:程序博客网 时间:2024/05/17 04:24
以前学习的各种链表都是由指针实现的,链表中结点的分配和回收(即释放)都是由系统提供的标准函数malloc和free动态实现的,故称之为动态链表。但是有的高级语言,如BASIC、FORTRAN等,没有提供”指针”这种数据类型,此时若想采用链表做存储结构,就必须使用”游标”来模拟指针,由程序员自己编写”分配结点”和”回收结点”的过程。
#define Maxsize =
typedef struct
{
}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
}
void initSpace_SL(SLinkList space[])
{ //将一维数组space中各分量链成一个备用链表,space[0].cur为头指针,”0”表示空指针
}
int Malloc_SL(SLinkList space[])
{ //若备用空间链表非空,则返回分配的结点下标,否则返回0,
}
void Free_SL(SLinkList space[], int k)
{ //将下标为k的空闲结点回收到备用链表,这个元素位于头指针之后的第一个位置上
}
void difference(SLinkList space[], int & S)
{ //依次输入集合A和B的元素,在一维数组space中建立表示集合(A-B)and(B-A)
//这里S和space[0].cur两个头指针的区别?一个是已用链表一个是静态链表?是的,s指向//的就是第一个可用的元素,注意,上面的分配和删除都是在链表的开始第一个结点上,但是//到了添加结点到S所指向的可用链表上时,添加操作的位置是最后。
//in all,关于备用链表的操作位置在备用链表的开头上,关于已用链表的操作,位置在已用//链表的末尾上。
}
space[r].cur = 0;
for(j = 1; j <= n; ++j)
{
}
if( k == space[r].cur) //当前表中不存在此元素,插入在r所指结点之后,且r的
//位置不变,因为r标识的是元素A,即查询的结束。那么若B中的元素是重的呢?
//即B中有两个相同的元素,A中也有,B的元素第一次出现,就把A中的相应元
//素删了,
{
}
else
{
//写肯定想不到
}
}
}
- 第七篇:静态链表的游标实现
- 【数据结构与算法】静态链表的游标实现
- 链表的游标实现?
- 链表的游标实现
- 链表的游标实现
- 链表的游标实现
- 链表的游标实现
- java数据结构 三(静态链表-游标实现)
- 数据结构之静态链表的游标表示及其实现(附完整代码)
- 表的游标实现
- 链表游标实现
- 链表的游标(cursor)实现
- 数据库里面的游标,动态游标和静态游标区别
- 算法学习 - 链表的游标实现~ C++
- [数据结构与算法分析] 链表的游标实现
- c语言,顺序空间游标链表的实现
- 算法基础之链表的游标实现
- 静态链表的实现
- C语言中的变量
- HDU
- 第六篇:基本数据结构——栈的链式表示
- java中含有中文字符的编码和解码
- WEB网页实现微信公众号点赞实现--前端:jquery+bootstrap||后端springmvc+mybatis
- 第七篇:静态链表的游标实现
- ubuntu 16.04 安装 opencv master版本
- Zookeeper C API学习总结
- RocketMQ实战(三):分布式事务
- 第八篇:浅谈尾递归
- IO复用——epoll内核源代码剖析
- 第九篇:基本数据结构——队列的链式表示
- 阿里云安装 JDK mysql 环境搭建
- [HDU 6155] Subsequence Count