以无比激动的心情初识数据结构,早在java SE时期就听闻其大名,但未曾见过他的真面目,接下来的日子我就要慢慢学习他了,真是令人心动。先说说什么是数据结构吧,数据结构就是相互之间存在一种或多种特定关系的数据元素的集合。
线性表是数据结构中尤为重要的知识点,因此我在这整理线性表的重要知识,便于我日后的复习巩固。
1.何为线性表:
2.线性表的定义:
(1).
线性结构是n(n≥0)个结点的有穷序列(a0, a1, …, an-1)。a0被称为起始结点, an-1被称为终端结点,i称为ai的序号或位置。对任意一对相邻结点ai和ai+1(0≤i≤n-2),ai被称为ai+1的直接前驱,ai+1称为ai的直接后继。其实结点只有直接后继,终端结点只有直接前驱。线性结构中的每个结点代表一个数据元素。在不同的实际问题中,结点代表的数据元素是不同的。
(2).
直接前驱和直接后继就是所谓的结点间的逻辑关系,这两种关系从不同角度刻画了同一种关系,及邻接关系。线性结构中的邻接关系是一对一的,及每个结点至多有一个直接前驱和后继。而所有的结点按一对一的邻接关系构成的整体就是线性结构。
(3).
线性表是处理线性结构的数据结构。线性表中的数据元素的个数称为线性表的长度,简称为表长。表长为0的线性表为空表。 线性表以某种方式保存结构的值以及结点直接的关系,实现线性结构中的各种操作。
3.线性表的动态数组实现:
(1). 首先创建List.java写入代码,之后会将这些方法一一实现:
(2).将上述方法一一实现:
getSize()函数
获取线性表中元素的个数
直接返回size即可
2.
isEmpty()函数
判断线性表是否为空表
直接判断size==0的结果即可
3.
add()函数
在线性表中指定角标index处插入元素e
在数组中添加元素主要分为三种情况:
<1.>在表头插入:index=0
<2.>在表中插入:index∈(0,size)任意
<<3.>>在表尾插入:index=size
但是前两种不管你从哪里插入都是写一个for循环,让插入位置以后的元素挨个后移,然后新的元素再插入进来,第三种方式就很简单了,直接把新元素放在队尾就可以。
resize()函数
这个函数是为了实现数组的自动扩容和缩容功能的
如果元素填满了数组( size==data.length),此时就要需要考虑数组该扩容了,一般扩容为原先的2倍
扩容:
创建一个比原先数组大2倍的新数组,然后将老数组中的值挨个放入到新数组中,最后新数组替代老数组即可
addFirst()函数
在线性表中第一个位置插入元素e
复用add()即可
addLast()函数
在线性表中最后一个位置插入元素e
复用add()即可
7.
get()函数
获取线性表中指定角标index处的元素
直接返回数组[index],注意角标越界问题
getFirst()函数
获取线性表中第一个元素
复用get()函数
getLast()函数
获取线性表中最后一个元素
复用get()函数
set函数
修改线性表中指定角标index处的元素为新元素e
contains()函数
判断线性表中是否包含指定元素e
find()函数
获取线性表中元素e从头到尾第一次出现的位置
remove()函数
删除并返回线性表中指定角标index处的元素
删除分为删除表头,删除表中,和删除表尾三种情况
删除表头:先取出要删除的元素,然后另 i 从 0 开始,到size-2结束,将 i+1 的元素赋予 i 即可,最后 size–
删除表中:先取出要删除的元素,然后另 i 从 index 开始,到size-2结束,将 i+1 的元素赋予 i 即可,最后 size–
删除表尾:直接size–即可
此处的重点在于,删除元素之后,可能有缩容的情况,什么时候缩容呢,当 size==data.length/4 时缩容
一般设置在1/4处即可;这样子就避免了缩的太勤的问题
如果已达到默认容量的话,则不需要再缩了
removeFirst()函数
删除并返回线性表中第一个元素
复用remove()即可
removeLast()函数
删除并返回线性表中最后一个元素
复用remove()即可
removeElement()函数
删除线性表中指定元素e
先找,再删
clear()函数
直接让size为0
即表示清空线性表