数据结构----单链表分析及实现
来源:互联网 发布:知乎帐号异常 编辑:程序博客网 时间:2024/06/07 16:10
一、 链表特点
链表,即物理结构上非连续的顺序表,拥有顺序表的所有特点:
1、n 个相同类型元素的有限集合;
2、除了第一个元素只有一个后继、最后一个元素只有一个前驱以外,其他所有元素都有一个直接前驱和一个直接后继(类似于排队)。
除此之外,链表相比于顺序存储的顺序表(例如数组)还有自己的特点:
1、逻辑结构相邻的两个元素在物理上并非一定相邻;
2、除了需要空间存储数据本身,还需要一个指针域指明下一个元素的地址。
二、链表分类
分类:单链表、双向列表、单项循环列表、双向循环列表。
单链表:最简单的链表,一个节点只有一个指针域,指向下一个节点。最后一个节点指针域指向NULL;
双向列表:一个节点有两个指针域,分别指向前驱和后继。最后一个节点的两个指针域指向NULL;
单项循环列表:在单链表的基础上,让最后一个节点的指针域指向第一个节点。
双向循环列表:在双向列表的基础上,让最后一个节点的后继指针指向第一个节点,让第一个节点的前驱指针指向最后一个节点。
本文先介绍最简单的单链表。
三、链表结构
一个单链表由一个表头和若干个节点组成。其中表头和节点都必须包含一个指针域,因此可以将指针域单独定义,在表头和数据节点上包含一个指针域即可,指针域定义如下:
typedef struct _tag_ListNode ListNode; struct _tag_ListNode { ListNode *next;};
可见,指针域实质就是一个结构体,该结构体只有一个指向结构体本身的指针。定义完指针域就可以定义链表头了:
typedef struct _tag_List{ ListNode head; int length;}TList;
链表头定义两个域即可,一个指针域,指向第一个元素,一个当前列表长度。
定义数据节点:
typedef struct _tag_data{ ListNode node; int dat;}Data;
数据节点的数据域就是用户要存储的数据,具体类型要视用户需求而定。这里为求简便,用了一个int型的数据。
四、链表的相关操作
1、链表的创建:TList* Create_List()
链表的创建实际就是从堆空间分配一个链表头的空间,然后返回其地址。
2、链表的销毁:int Destroy_List(List* list)
free掉从堆空间申请到的链表头。
3、清空链表:int Clear_List(List* list)
不同于销毁,清空链表只是将length域清零,然后让node指向NULL。
4、插入元素:ListNode* Insert_Element(List* list, ListNode* data, int pos)
将指定的节点插入到指定的链表的指定位置。
5、获取元素:ListNode* Get_Element(List* list, int pos)
从指定的链表的指定位置获取节点元素。
6、删除元素:ListNode*Delete_Element(List* list, int pos)
从指定的链表的指定位置删除节点元素。
五、代码实现
为方便管理,将代码托管在GitHub: 单链表代码实现
- 数据结构----单链表分析及实现
- Java数据结构----队列实现及源码分析
- 数据结构实验4(排序算法的实现及性能分析)
- 数据结构之单链表及python实现
- 数据结构及实现
- java数据结构分析及优化
- 数据结构及概念分析总结
- 红黑树数据结构分析与实现
- 一步步学习数据结构和算法之快速排序效率分析及java实现
- 一步步学习数据结构和算法之直接插入排序效率分析及java实现
- 一步步学习数据结构和算法之折半插入排序效率分析及java实现
- 一步步学习数据结构和算法之快速排序效率分析及java实现
- 一步步学习数据结构和算法之冒泡排序效率分析及java实现
- 一步步学习数据结构和算法之希尔排序效率分析及java实现
- 一步步学习数据结构和算法之归并排序效率分析及java实现
- 一步步学习数据结构和算法之堆排序效率分析及java实现
- 一步步学习数据结构和算法之选择排序效率分析及java实现
- 一步步学习数据结构和算法之常用排序效率分析及java实现
- NSCalendar(loading...)
- String、StringBuffer与StringBuilder之间区别
- 字符串,字符数组,字符指针的区别与联系
- SQL Server 常用 几个设置(set)选项 [经典实用]
- 蓝桥杯历届-奇怪的比赛
- 数据结构----单链表分析及实现
- HDU 1556 Color the ball(线段树)
- 值得推荐的C/C++框架和库
- [GDOI模拟2016.03.05]魔道研究
- POJ1321 棋盘问题
- python交叉编译过程记录
- VS编译错误:syntax error : missing ';' before 'type'
- 2016年目标
- Ubuntu14.04下,GO语言的安装!