数据结构---链表

前边我们通过使用数组实现了队列结构。在使用数组的队列中,数组在空间中的地址是连续的,可以通过数组的下标直接访问获得该数组中的元素。在这里我们通过另一种方式来实现----链表。

1.什么是链表。

那究竟什么是链表呢?我们来看一下定义:

链表的定义:链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。

在这里插入图片描述
链表是由一个个的节点所组成的。节点是链表独有的组成元素。而节点中又包含了信息,在节点中包含了数据和指向下一个元素的指针.一个个的节点通过指针连成一条链状结构的表。,形成链表。
在这里插入图片描述

简单的来说,链表就像是一条链子。由一个一个的小环构成最后连接成一个长的链子。而节点就可以看做是组成链子的一个个的环,环上携带的信息(数据域用来存放数据,指针域用来存放下一个节点的地址)。

在明白了什么是链表,那链表有什么用处呢?

最常见的也是最容易理解的链条,由于链条是由一个个的环之间互相的连着,链条在生活中的应用比较广泛,前一个链子与后一个链子之间相互联系,如果将链子的环想象成比较大的,那么就和每个环的位置没有关系了,前一个环中连接着下一个环。(就在链表前一个节点的指针域指向下一个节点的数据域)
在这里插入图片描述
在这里要注意,在java中的链表和实际的链有区别,链子有许多的环组成,而链表也是由许多的同类型的数据元素组成的。但在java中链表中的数据不仅仅局限于整数int,小数double,布尔boolean和字符串String等等简单的数据类型。只要是同一类型的数据都可以使用链表来储存。

动态链表

我们通过使用数组实现了线性表。在这里,我们要通过动态数组实现线性表。
链表和线性表一样也是有增删改查的基本操作。
我们会发现,如果用动态数组实现线性表,那么元素在数组中存储的话是地址连续的,因为数组中的存储空间是连续的。但有时候内存中并没有一定大小的内存空间那该怎弄办呢?
在这里插入图片描述
于是便有了单链表(只能从一个方向到另一个方向)
在这里插入图片描述
如果用动态链表实现线性表的话,那么元素的地址是随机的,因为节点对象创建时的地址是由系统底层决定的且随机的,所以为了保持线性表的性质,每一个节点除了存储数据信息外,还需要存储其下一个节点的地址

动态数组实现线性表也好,还是动态链表实现也罢,它们对线性表的操作都是增删改查,我们可以先对两者的具体实现定义统一的操作规范,对他们共有的部分做一个接口:

 * List是线性表的最终父接口 
 * */
public interface List<E> {
	public int getSize();// 获取表中元素的个数(线性表的长度)
	public boolean isEmpty();// 判断表是否为空
	public void add(int index,E e);//在表中指定的index角标处添加元素e
	public void addFirst(E e);//在表的表头位置插入一个元素
	public void addLast(E e);//在表的表尾位置插入一个元素
	public E get(int index);//在表中获取指定index角标处的元素
	public E getFirst();//获取表中表头的元素
	public E getLast();//获性表中表尾的元素
	public void set(int index,E e);// 修改表中指定index处的元素为新元素e
	public boolean contains(E e);//判断表中是否包含指定元素e 默认从前往后找
	public int find(E e);//在表中获取指定元素e的角标 默认从前往后找
	public
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值