数据结构算法代码实现——静态单链表(四)
来源:互联网 发布:it数据分析师 编辑:程序博客网 时间:2024/05/17 13:44
线性表的静态单链表存储结构
//-------线性表的静态单链表存储结构-------typedef struct{ ElemType data; int cur;}component,SLinkList[MAXSIZE];
什么是静态链表?
对于线性链表,也可用一维数组来进行描述。这种描述方法便于在没有指针类型的高级程序设计语言中使用链表结构。 在如上描述的链表中,数组中结构体一个成员存储数据,另一个成员(游标cur)存放下一个结点的位置。 为了和指针型描述的线性表相区别,称这种数组为静态链表。注意:链表的输出不是按数组的位序输出的, 而是由数组中的一个指定位置开始根据游标cur输出。 生成静态链表的方法有两种:一种是在数组中根据需要可以生成多个独立的静态链表,每个链表的头指针在生成的时候在指定。 另一种是一个数组只能生成一个静态链表,这种情况可以固定链表的头指针,也就是说在初始化链表的同时就指定了链表的头指针位置 (如数组最后一个下标为头指针), 在形参上比上一种方法简单,因为不用传入头指针的位置了, 但是缺点是在程序需要使用多个静态链表则要有多个数组,每个数组之间不能相互调剂,空间浪费会较大。注意: 在静态链表中,为了辨别数组中那些分量未被使用,解决的方法是: 将所有空闲结点链接形成一个备用链表,数组下标为 0 的单元为备用链表的头结点(这时,静态链表的头结点就不能再是数组下标为 0 的单元了, 需要另外定义)。在静态数组实际有 2 种链表,一个链表上链接的是线性表的结点,另一个链表(备用链表)上链接的是所有没被使用的结点。当线性表需要新结点时,把备用链表中的首元结点(由L[0].cur 指示)从备用链表中删除,作为新结点,插入线性表。 当删除线性表中的结点时,被删除的结点插入备用链表中,成为备用链表的首元结点。之所以从备用链表删除结点或向备用链表插入结点都在表头进行,是因为这样效率最高。 所以操作备用链时需要用户自定义的Malloc和Free函数。
静态链表的基本操作
我们只以第一种方法为例:
头文件请参考顺序表文章
自定义的Malloc和Free函数,从备用链申请空间、释放空间备用链回收结点。
// 申请结点和删除结点 都是在备用链的表头后操作//--------算法2.15 申请结点int Malloc(SLinkList L){ int i; i =L[0].cur; if(i){ L[0].cur =L[i].cur;//把备用链的第一个结点做申请的结点,在把第二个结点和备用链连接起来。 } return i; } //-------算法2.15 删除结点(回收到备用备用链中) void Free(SLinkList L,int n){ L[n].cur =L[0].cur; //把备链表的第一个结点位序 接到删除的结点后。 L[0].cur =n; //在把删除的结点位序 接到备用链的头结点后 }
3,基本操作
4,测试上述操作代码
5,测试结果图:
较复杂的操作算法实现
教材算法2.17求集合运算(A-B)∪(B-A)。
假设由终端输入集合元素,先建立表示集合A的静态链表S,而后在输入集合B的元素的同时查找S表,若存在和B相同的元素,则从S表中删除之, 否则将此元素插入S表。
代码实现:
测试结果图:
注意:用scanf输入字符时要注意不要使用空格,还需要用%*c来吃掉输入完成时的回车键(百度学习)。
0 0
- 数据结构算法代码实现——静态单链表(四)
- 数据结构学习四(KMP算法实现)
- 数据结构算法代码实现——线性表的链式表示与实现(单链表)(三 )
- 数据结构算法代码实现——栈和队列(一)
- 数据结构算法代码实现——栈和队列(二)
- 数据结构算法代码实现——线性表的顺序表示与实现(二)
- 【数据结构与算法】(四) c 语言静态队列的简单实现
- 数据结构算法代码实现——树与二叉树(一)
- 复习数据结构:排序算法(四)——归并排序
- 学习JavaScript数据结构与算法(四)——链表
- 数据结构排序算法代码实现
- 数据结构线性表(四)之静态链表(含完整代码)
- 算法与数据结构【四】——C语言实现循环队列
- 数据结构与算法笔记 —— 排序算法及代码实现
- 数据结构与算法笔记 —— 查找算法及代码实现
- 数据结构(四)——队列(C语言实现)
- Redis设计与实现——数据结构(四)
- 郝斌数据结构(四):静态队列
- 【转】详细整理:UITableView优化技巧
- bootstrap 学习笔记 - 6 (输入框组 + )
- 游戏中用到的真随机
- google issure search
- Spring+Quartz实现定时任务的配置方法(插曲)
- 数据结构算法代码实现——静态单链表(四)
- PHP、Apache和Mysql安装(个人有修改)
- Redis监控技巧总结
- iOS开发网络篇—HTTP协议
- 【swift】15-0605 属性
- 如何去掉listview滑动时的阴影
- hadoop三个配置文件的参数含义说明
- 给centos5.5安装zabbix agentd的步骤
- eclipse tab空格设置