数据结构笔记(三)静态链表的实现和基本操作
2017-11-19 18:33
260 查看
一、静态链表的定义
用数据替代指针,来描述单链表。首先,数据的元素由两个数据域组成,data和cur。数据域data,用来存放数据元素,即要处理的数据;游标cur相当于单链表中的next指针。//线性表的静态单链表存储结构 #define MAXSIZE 1000 typedef struct{ ElemType data; int cur; }component,SLinkList[MAXSIZE];
此外,我们对数据第一个和最后一个元素作为特殊元素处理,不存数据。把未被使用的数组元素称为备用链表。而数组第一个元素,即下标为0的元素的cur就存放备用链表的第一个结点的下标;而数组的最后一个元素的cur则存放第一个数值的元素的下标,相当于单链表中头结点。
上图为初始化的数组状态,下面是代码:
Status InitSpace_SL(SLinkList &space){ //将一组数组space中各分量链成一个备用链表,space[0].cur为头指针, //“0”表示空指针 int i; for(i=0;i<MAXSIZE-1;i++){ space[i].cur=i+1; } space[MAXSIZE-1].cur=0; return OK; }
假设已经将数据存入静态链表,如下:
此时,“甲”这里就存有下一元素“乙”的游标2,“乙”则存有下一元素“丁”的下标3。而“己”是最后一个有值元素,所以它的cur设置为0。而最后一个元素的cur则因“甲”是第一个有值元素而存有它的下标为1。而第一个元素则因空闲空间的第一各元素下标为7,所以它的cur存有7.
二、静态链表的插入操作
1、首先要重写malloc函数int Malloc_SL(SLinkList &space){//若备用空间链表非空,则返回分配的结点下标,否则返回0. int i=space[0].cur;//当前数组第一个元素的cur存的值 if(space[0].cur){ space[0].cur=space[i].cur; } return i;
//在L中第i个元素之前插入新的数据元素e Status ListInsert(SLinkList &L,int i,ElemType e){ int i,k,l; k=MAXSIZE-1;//注意k首先是最后一个元素的下标 if(i<1||i>ListLength(L)+1){ return ERROR; } j=Malloc_SL(L);//获得空闲分量的下标 if(j) { L[j].data=e;//将数据赋值给此分量的data for(l=1;l<=i-1;l++){//找到第i个元素之前的位置 k=L[k].cur; } L[j].cur=L[k].cur;//把第i个元素之前的cur赋值给新元素的cur L[k].cur=j;//把新元素的下标赋值给第i个元素之前元素的cur return OK; } return ERROR; }
ListLength函数代码见最后
三、静态链表的删除操作
1、首先重写free函数//将下标为k的空闲结点回收到备用链表 void Free_SL(SLinkList &space,int k){ space[k].cur=space[0].cur;//把第一个元素cur赋值给要删除的分量cur space[0].cur=k;//把要删除的分量下标赋值给第一个元素的cur }
//删除在L中第i个数据元素e Status ListDelete(SLinkList &L,int i){ int j,k; if(i<1||i>ListLength(L)){ return ERROR; } k=MAXSIZE-1; for(j=1;j<=i-1;j++){ k=L[k].cur; } j=L[k].cur; L[k].cur=L[j].cur; Free_SL(L,j); return OK; }
//初始化条件:静态链表L已经存在。操作结果:返回L中数据元素个数 int ListLength(SLinkList L){ int j=0; int i=L[MAXSIZE-1].cur; while(i){ i=L[i].cur; j++; } return j; }
相关文章推荐
- LDAP学习笔记<四>jldap实现Java对LDAP的基本操作
- 学习笔记——C语言实现单链表的基本操作:创建、输出、插入结点、删除结点、逆序链表
- 【数据结构】双向循环线性表的基本操作--C++/C实现
- 算法与数据结构--图的实现、基本操作及应用
- java学习笔记之实现基本数据结构——栈
- 数据结构:字符串的堆分配存储结构,基本操作实现和测试。
- 重学数据结构004――栈的基本操作及实现(数组实现)
- c++学习笔记—二叉树基本操作的实现
- Python实现基本数据结构---栈操作
- 【[学习笔记----数据结构15-图的基本数据操作]】
- Python实现基本数据结构---队列操作
- bo2-31.cpp 一个数组只生成一个静态链表(数据结构由c2-3.h定义)的基本操作(11个))
- c++学习笔记—二叉树基本操作的实现
- 数据结构--串的操作基本实现程序代…
- hrbustoj 1545:基础数据结构——顺序表(2)(数据结构,顺序表的实现及基本操作,入门题)
- PHP数据结构之五:栈的PHP的实现和栈的基本操作
- 重学数据结构004——栈的基本操作及实现(数组实现)
- c++学习笔记—单链表基本操作的实现
- [C++]数据结构:有序链表SortedChain的基本实现与操作
- javascript实现数据结构: 树和二叉树,二叉树的遍历和基本操作