1.线性表定义
是由零个或多个数据元素组成的有限序列。线性表中的元素在位置上是有序的,是一种线性关系,前后两个元素存在一一对应关系。
2.线性表的存储结构
(1)顺序表:线性表的顺序存储结构是指用一块地址连续的存储空间依次存储线性表中的数据元素。在顺序表中,逻辑上相邻的元素在物理上也是相邻的。
(2)链表:链表中逻辑上相邻的元素在物理上可以不相邻,相对顺序表来说更灵活。
顺序表
1.静态顺序表之数组
数组是线性表的顺序存储结构在程序语言中最直接的表现形式。缺点是无法动态改变集合的大小。
注:当数组元素为值类型时,数组对象存放的是值类型对象本身,而当元素为引用类型时,数组对象存放的则是对象的引用(指针)。
2.动态顺序表之 ArrayList与List<T>
ArrayList被称为动态数组,它的存储空间可以被动态的改变,同时还有添加,删除元素的功能,但它的类型不安全,List<T>使用泛型来进行类型的自定义,是安全的。
顺序表缺点:必须占用一整块事先分配好的存储空间,在插入和删除操作上需要移动大量元素,操作不方便。
单链表
1.单链表的节点结构
在链表中,每个节点由两部分组成:数据域和指针域。
2.单链表的整体结构
链表是由N个节点链接而成的线性表,如果其中每个节点只包含一个指针域那么就称为单链表,如果含有两个指针域就称为双链表。
注:通过头指针可以唯一标识该链表,从头指针所指向的节点出发,沿着节点的链可以访问到每个节点。
双链表
1.双链表的节点结构
与单链表不同的是,双链表有两个指针域,一个指向前驱节点,另一个指向后继节点。
2.双链表的总体结构
双链表中,每个节点都有两个指针,指向前驱和后继,这样可以方便的找到某个节点的前驱节点和后继节点。
循环链表
将单链表中终端节点的指针端由空指针改为指向头节点,就使整个单链表形成一个环,这种头尾相接的单链表称为单链表循环,简称循环链表。
1.循环链表节点结构
循环链表和单链表的主要差异在于循环的判断条件上,原来是判断p.next是否为空,现在则是p.next不等于头节点,则循环未结束。