2.3线性表的链式表示和实现(2)-静态链表(1)
2017-11-18 13:00
204 查看
静态链表
补充一下之前的理解,感觉怪怪的。
LinkList&La,表示La就是理解为头结点。
补充一下知识点:
pa?pa:pb;
if(pa)
pa->next = pa
else
pc->next = pb
需要重点理解的盖面:
1.备用链表
2.游标
假设S为SLinkList型变量
(1)S[0].cur 指示第一个结点在数组中的位置
(2)设i=S[0].cur,则S[i].data存储线性表中的第一个数据元素
(3)s[i].cur指示第二个结点在数组中的位置
一般情况:第i个分量表示链表的第k个节点。
S[i].cur指示第k+1个结点的位置。
静态链表中实现线性表的操作和动态链表相似
以整型游标i代替动态指针p。
i = S[i].cur的操作实为指针后移,类似于p=p->next
静态链表的插入:
将所有未被使用过的以及被删除的分量用游标链成一个备用的链表
每当进行插入时便可从未被使用过的以及第一个结点作为待插入的新节点
反之在删除时将从链表中删除的结点连接到备用链表上。
运算集合(A-B)U(B-A)为例进行静态链表的算法
过程:假设由终端输入集合元素,
(1)先建立表示集合A的静态链表S
(2)而后在输入集合B的元素查找S表
(3)若存在和B相同的元素,则从S表中删除之,否则将此元素插入S表
为了安全,我们分为三个过程:
1_将整个数组空间初始化一个链表
2_从备用空间取得一个结点
3_将空闲结点链接到备用链表上,分表如算法所示
补充一下之前的理解,感觉怪怪的。
LinkList&La,表示La就是理解为头结点。
补充一下知识点:
pa?pa:pb;
if(pa)
pa->next = pa
else
pc->next = pb
需要重点理解的盖面:
1.备用链表
2.游标
//一维数组来描述线性链表: //----------线性表的静态单链表存储结构----- #define MAXSIZE 1000//链表的最大长度 typedef struct { ElemType data; int cur; }component,SLinkList[MAXSIZE];
假设S为SLinkList型变量
(1)S[0].cur 指示第一个结点在数组中的位置
(2)设i=S[0].cur,则S[i].data存储线性表中的第一个数据元素
(3)s[i].cur指示第二个结点在数组中的位置
一般情况:第i个分量表示链表的第k个节点。
S[i].cur指示第k+1个结点的位置。
静态链表中实现线性表的操作和动态链表相似
以整型游标i代替动态指针p。
i = S[i].cur的操作实为指针后移,类似于p=p->next
/////////////////////////////////////////////// //静态链表中实现定位函数的LocateElem如下算法所示: int LocateElem_SL(SlinkList S,ELemType e) { //在静态单链性表L中查找第一个值为e的元素。 //若找到,则返回它在L中的位序,否则返回0。 i = S[0].cur; //i指示表中第一个结点 while(i&&s[i].data!=e)i=S[i].cur; return i; }//LocateElem_SL
静态链表的插入:
将所有未被使用过的以及被删除的分量用游标链成一个备用的链表
每当进行插入时便可从未被使用过的以及第一个结点作为待插入的新节点
反之在删除时将从链表中删除的结点连接到备用链表上。
运算集合(A-B)U(B-A)为例进行静态链表的算法
过程:假设由终端输入集合元素,
(1)先建立表示集合A的静态链表S
(2)而后在输入集合B的元素查找S表
(3)若存在和B相同的元素,则从S表中删除之,否则将此元素插入S表
为了安全,我们分为三个过程:
1_将整个数组空间初始化一个链表
2_从备用空间取得一个结点
3_将空闲结点链接到备用链表上,分表如算法所示
void InitSpace_SL(SLink &space) { //将一维数组space的各分量链成一个备用链表,space[0].cur为头指针 //"0"表示空指针 for(i=0;i<MAXSIZE-1;++i)space[i].cur = i+1; //是不是移动位置 space[MAXSIZE-1].cur = 0' }// InitSpace_SL int Malloc_SL(SLlink&space) { //若备用空间链表非空,则返回分配结点的下标,否则返回0 i = space[0].cur;//把第几个节点给i if(space[0].cur) space[0].cur = space[i].cur; return i; }// Malloc_SL int Free_SL(Slinklist &space ,int k) { //将下标为k的空闲结点回收到备用链表中 space[k].cur = space[0].cur; space[0].cur = k; }//Frel_SL
相关文章推荐
- 2.3线性表的链式表示和实现(静态链表)
- 2.3线性表的链式表示和实现——2.3.2 循环链表,2.3.3双向链表
- 2.3线性表的链式表示和实现
- 2.3线性表的链式表示和实现(1)未弄完待更改
- 2.3线性表的链式表示和实现
- 【C语言版数据结构】线性表的链式表示,并且实现合并两个非递减有序排列到新的线性表
- 线性表得链式表示和实现
- c/c++ 数据结构-线性表(链式表示&实现&单链表定义&实现)
- 2.3、线性表的链式表示与实现
- 2.3笔记-线性表的链式表示和实现
- 数据结构第二天、线性表的链式表示和实现
- 线性表链式存储(静态链表)及其12种操作的实现
- 线性表在Java类库中链式表示及的实现——LinkedList
- 3.静态链表实现 线性表
- 线性表链式存储实现各种操作
- 线性表链式存储结构一种实现
- 线性表的表示和实现方式之链式表示和实现
- 线性表的链式表示与实现
- 数据结构编程笔记五:第二章 线性表 静态链表的实现
- JS实现线性表的链式表示方法示例【经典数据结构】