一,介绍:
线性表是最基本、最简单、也是最常用的一种数据结构。线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列,线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。
二,分类:
1 顺序表:
顺序表是一种在计算机内以数组形式存储数据的线性表,是一种物理存储单元上连续,有顺序的存储结构,他与数组不同的是,实例化创建一个数组对象时,必须为数组确定一个固定的大小,如果数组被放满了的话,就不能在新增元素了,而顺序表则不同,实例化一个顺序表对象并不用定义大小,实际实例化一个顺序表对象需要做两件事,即初始化一个数组和一个size;size记录顺序表内数组中放的元素个数,如果size=这个初始化数组的大小的话,即数组已满无法新增元素,则对数组进行扩容,如何进行扩容呢?首先定义一个比原先数组大的空数组,然后将原数组中数据放入新数组,用新数组替代之前的旧数组,就这样,顺序表就可以近乎无限制的增添新元素了
2 链表:
链表(linked list)是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,根据连接方式链表可分为单向链表和双向链表,单向链表每一个链表节点包括一个val和ListNode类型的next,val为你所要存储的数据,next指向下一个链表节点,因此,如果你得到一个链表节点,那么你就可以根据他的next找到他的所有后续元素,双向链表相比单向链表多了一个ListNode类型的prev,prev指向上一个链表节点,双向链表中根据任何一个节点都可以的得到完整的链表,而单向链表只有根据头结点才可以得到完整的链表(非循环),还有一种尾节点的next指向首节点的链表,这种链表称为循环链表,循环链表不论是单向链表还是双向链表都可以根据任一节点遍历整个链表;
定义一个简单的ListNode类
3 栈:
栈(stack)又名堆栈,它是一种运算受限的线性表,它可以由线性表或链表来实现。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。我通常把栈理解为一个井,入栈为往井里扔东西,出栈为从井里取东西,出栈时井口的东西先出,在栈中就是后入栈的元素先出栈,即后进先出;
4 队列
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列只在队尾插入,在对头删除。队列类似栈,只不过栈是后进先出,队列为先进先出,类似于排队,先排队的先出队,后排队的后出队