一个线性表是由n个数据元素构成的有限序列,其特点是数据元素之间存在着线性关系。在计算机中表示这种关系的两种不同存储结构是顺序存储结构和链式存储结构。
1、顺序表
顺序表是在内存中用一组地址连续的存储单元依次存储线性表的数据元素,借助数组来实现。顺序表中数据元素的逻辑关系通过其“存储位置相邻”来表示。
对于顺序表,主要有初始化、建立、销毁、插入、删除、按值查找、等基本操作。插入和删除操作约需移动一半的元素,时间复杂度为O(n)。
2、链表
除了常用的单链表外,还有循环链表、双向链表、双向循环链表、静态链表等不同形式,单链表是链表的重点。
(1)单链表
链式存储结构是用一组地址任意的存储单元存储线性表中的数据元素。其中单链表是一种最简单的链式存储结构,在c语言中可以用“指针结构”来描述。
为了在任意位置插入或删除节点时统一操作,常用单链表的第一个结点(首元结点)前附设一个结点,称为头结点。头结点的数据域可以不存储任何信息,也可存储链表的长度等附加信息,头结点的指针域存储指向第一个结点的指针。
对于单链表,主要有初始化、求表长、按序号查找、按值查找、插入、删除、建立等操作。其中插入和删除只需要修改指针,而不移动数据,其时间复杂度为O(n),单链表建立有头插法和尾插法两种方法。
(2)单循环链表
在单链表的基础上,将最后一个结点的指针域指针域指向结点得到的单循环链表。单循环链表和单链表的区别仅在于,判别链表中最后一个结点的条件不再是“后继是否为空”,而是“后继是否为头结点”。单循环链表相关操作几乎与单链表的操作完全相同,只是注意最后一个节点的指针要指向头结点。单循环链表往往只设尾指针。
(3)双向链表
双向链表与单链表相比,增加了一个指向前驱的指针域。双向链表的各种操作实现可以仿照单链表的响应操作来完成,只是注意要需要修改两个指针。一个双项链链表L可以看成两个相反的单项列表组成,其中一个是带头结点的单项列表(L指向头结点),一个是不带头结点(L指向结点尾),因此在双向链表中删除尾结点和删除其它位置的节点的操作是不同的,在尾部插入结点和在其它位置的操作也是不同的,这只需要从两个单链表考虑就能很好的理解。另外还需要注意双向链表与单链表建立操作时的异同。
(4)双向循环链表
双向循环链表与双向链表相比,只是将头结点的前驱指针域指向最后一个节点,因此,双向循环链表的的操作与双向链表相似。一个双向循环链表可以看成由两个方向相反的单循环链表组成。
(5)静态链表
静态链表是用来表示和实现链表,其相关操作与单链表类似。
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/zhangli401x/article/details/47192889