数据结构学习(二)线性结构之线性表
一、概述
线性表(List)是0个或多个元素的有限序列。
-
有序的
-
线性的
-
有限的
-
第一个元素无前驱,最后一个元素无后继
数学对线性表的定义:
如果线性表记为:(a1,…,ai-1,ai,ai+1,…,an)(n>=0),则表中ai-1领先于ai,ai领先于ai+1,称ai-1是ai的直接前驱元素,ai+1是ai的直接后继元素。当i=1,2,…,n-1时,ai有且仅有一个直接后继,当i=2,3,…,n时,ai有且仅有一个直接前驱。
当n为0时,称为空表。
这里的数学定义简直perfect,没毛病。
二、顺序存储结构
线性表的顺序存储结构的实现思路比较简单,可以用C语言的一维数组来实现顺序存储结构,其他语言也大差不离。
在更多面向对象的语言中,数组是对线性表的一种封装,我们也可以尝试来用C语言来实现一个数组。
回过头再看 线性表 ,上面的demo实现其实是弄的复杂了,数组保证了存储顺序是线性的,所以直接用数组存储元素,实际上就是一个线性表的实现,再简单不过了。
二、链式存储结构
需了解关键词:
-
node(节点 )
-
后继节点
链式存储结构,存储空间可连续可不连续,我们只需要上一个元素记住下一个元素存储位置就能从上一个元素找到下一个元素,以此类推能找出所有的元素。
为了表示ai与其直接后继元素ai+1之间的逻辑关系,对数据元素ai来说,除了存储本身的信息外,还需要存储一个东西,通过这个东西我们可以找到后继元素ai+1,那通过指针来寻找元素最好不过了,因为指针直接指向的就是元素存储地址。
链表
我们把链中的每一个元素称之为“节点”,很多节点在一起组成一条链,如果是一条首位不相连的,则是单链,这个很容易理解。
-
单链表中的第一个节点称之为“首节点”
-
单链表中最后一个节点称之为“尾节点”
-
首节点存储的位置的指针叫做“头指针”