线性表是最简单和最经常使用的一种数据结构,由n(n>=0)个相同类型的数据元素(结点)组成的一个有序数列。bash
线性表中所含元素的个数个数n定义为线性表的长度数据结构
当n>0时,称为空表,用一对空括号标示。记为()性能
当n>0时,可表示为(a1,a2...,an),a1称为表头元素,an称为表尾元素,a(i-1)称为ai的直接前驱,a(i+1)称为ai的直接后继(2<= i <= n-1)ui
用一组地址连续的存储空间一次存储线性表中的数据元素。即逻辑上相邻的元素存储在的存储单元物理位置也是相邻的。spa
通常用这种方法存储的线性表简称顺序表,顺序表在内存的起始地址称做顺序表的基地址。指针
线性表的顺序存储结构中的特色:code
实现线性表的逆置:将(a1,a2,a3...an)转换为(an,....a2,a1)内存
SeqList Conveerts (SeqList L)
{
DataType x;
int i,k=L.length/2;
for(i = 0; i<k; i++)
{
x = L.data[i];
L.data[i] = L.data[L.length-i-1];
L.data[L.length-i-1] = x;
}
return L;
}
复制代码
能够用内存空间一组任意的存储单元(能够是地址连续的,也能够是不连续的)来存储线性表中的数据元素(data)。it
在存储数据元素时,除了存储数据元素自己外,还有存储与它相邻的数据元素在内存中的存储地址信息。这两部分信息组成该数据元素的存储映像(Image),称为结点(Node)io
把存储数据元素自己信息的域叫结点的数据域(Data Domain)
把存储与它相邻的数据元素的存储地址信息的域叫结点的指针域(Reference Domain)
线性表经过每一个结点的指针域(引用域)造成了一个‘链条’,因此也叫作链表,单链表的头用 head 声明,尾部用 rear声明。head-》 |data|next| 。。。 |data|next| 《-rear
若是结点的指针域只存储该结点直接后继(next)结点的存储地址,则该链表叫“单链表”,单链表由:数据域(存储元素自己信息)和指针域(存储表中下一个结点的存储地址)两部分组成
若是单链表中的最后结点的指针域不为空,而是指向单链表的头结点,这样就造成了一个“单循环链表”,优势:从表的任一结点均可以访问表中其余结点
若是单链表的结点中增长一个指向其直接前趋的指针域(prior),这样就造成了双向链表。--》|prior|data|next|
有时候为了操做运算方便,将双向链表的尾结点和头结点连接起来,就构成了双向循环列表。