1、线性表
顺序表和链表都是线性表,线性表是一种在实际中广泛使用的数据结 构,常见的线性表:顺序表、链表、栈、队列、字符串...
2、顺序表
2.1顺序表的概念及结构
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构。
顺序表一般分为两种:
1、静态顺序表:使用定长数组存储元素。
2、动态顺序表:利用动态空间开辟数组,使其达到自己所需空间大小。
2.2 接口实现
静态顺序表只适用于确定知道需要存多少数据的场景。静态顺序表的定长数组导致N定大了,空间开多了浪 费,开少了不够用。所以现实中基本都是使用动态顺序表,根据需要动态的分配空间大小。
注:在使用顺序表时当发现空间不够为了避免频繁的去开辟空间,一般来说开辟的大小为当前大小的两倍,即开辟后的空间为开辟前时的2倍。
当我们扩展空间时,可能会导致有空间的浪费,因此我们引入链表这一概念。
3、链表
3.1 链表的概念及结构
概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链 接次序实现的 。
如图顺序表顺序表在空间上并不是连续的,他们是一块一块的,通过指针去寻找下一个节点。因此链表几乎不存在浪费空间和空间不够用这一说,因为当我们要存一个数据直接开辟一个空间就可以了。
3.2 链表的分类
链表有三大特性:
1、是否有头节点:
2、是否循环:
3、单向或双向
由这三大特性两两组合可以得出8种链表。
typedef struct SListNode
{
int data;
struct SListNode* next;
}SListNode;
上述代码就是一个单向链表的创建,我们用data储存数据,next储存下一个节点的地址。
typedef struct ListNode
{
int data;
struct ListNode* next;
struct ListNode* prev;
}ListNode;
上述代码为双向链表的创建,用next储存下一个节点的地址,prev储存上一个节点的地址,data储存数据。