课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
对于许多自学编程开发的同学来说,碎片化的知识学习和没有系统化的知识体系是非常常见的一个问题,今天我们就简单来分享一下,Java编程链表结构。
链表结构
链表和数组一样,也是一个线性表结构,但有一点与数组不同,链表不使用连续的内存空间进行存储,而是通过串联的方式连接元素。
因此,链表克服了数组需要预先知道数据大小的缺点,并且能充分利用计算机内存空间,实现灵活的内存动态管理。
但链表也失去了高效存取的优点,同时,由于增加了结点的指针域,空间开销相较于数组会更大。
链表的概念
链表通过指针将零散的内存块串联在一起,这里的内存块被称为链表的结点。
结点除了存储数据之外,还会存储下一个结点的地址,这个记录下一个结点地址的指针被称为后继指针。在双向链表中,结点还会存储上一个结点的地址,这个记录上一个结点地址的指针被称为前驱指针。
链表中存在两个比较特殊的结点,分别是一个结点和后一个结点。因此也给这两个结点取了名称,一个结点被称为头结点,后一个结点被称为尾结点。
低效存取
将链表和数组作比较,数组具有高效存取的优点,而链表是是存取效率非常低的数据结构。
这里的存取指的是通过下标的方式去访问数据,链表无法像数组一样使用寻址公式,只能通过头结点作为入口,根据指针一个结点一个结点地依次遍历,直到找到对应的结点。
综合计算下来,链表做随机访问的时间复杂度为O(n),效率比数组低得多。
高效增删
虽然链表在随机存取方面没有数组高效,但在插入、删除结点的时候,效率比数组高很多。
链表的插入和删除
假设,要在链表中插入一个结点,在知道插入位置的前后两个相邻结点的前提下,只需将新结点的后继指针指向下一个结点,然后将上一个结点的后继指针指向这个新结点,即可完成插入结点的操作。删除结点也是类似的操作,非常方便。
但是,链表插入、删除结点的高效率依靠于知道操作位置的相邻结点,否则仍需要从头结点开始寻找到对应位置,这样的效率会非常低。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。