java 双向链表_数据结构-链表、栈和队列
最近在回想数据结构的时候发现很多东西都不会了,所以看了下资料,在这里做个总结:
Java中我们经常用到List集合,这是我们接触数据结构最多的一个。
我们常遇到的List实现有2种,一个是ArrayList和LinkedList,这2个类就分别是用数组和链表实现的。
这里着重介绍下LinkedList,链表分为单链表,单向循环链表,双链表,双向循环链表。
单链表:
![](/assets/blank.gif)
每一个方块儿就代表链表中的一个节点,每个节点中存储了节点数据和下一个节点的地址。
单向循环链表:
![](/assets/blank.gif)
每一个方块儿就代表链表中的一个节点,每个节点中存储了节点数据和下一个节点的地址,而最后一个节点还存储了第一个节点的位置。
双链表(双向链表):
![](/assets/blank.gif)
每一个方块儿就代表链表中的一个节点,除了第一个节点外,其余每个节点除了存储节点数据指向下一个节点地址还指向了上一个节点地址。
双向循环链表:
![](/assets/blank.gif)
它在双向链表的基础上,在第一个节点增加了指向最后一个节点(相当于第一个节点的上一个节点地址指向了最后一个节点),在最后一个节点增加指向第一个节点(相当于最后一个节点的下一个节点地址指向了链表第一个节点)而LinkedList就是基于双向循环链表实现的。
谈到这里我们就来说说LinkedList和ArrayList的效率:
![](/assets/blank.gif)
LinkedList和ArrayList不同操作效率比较
栈(先进后出):
![](/assets/blank.gif)
我们把栈可以比喻成一个桶,所以最先进来的就会到桶底,然后后面一个接一个,这样也同时使得我们在取得时候只能先取外面的就是最后进来的那个,所以栈的出去顺序是先进后出。
那我们在实现栈的时候怎么实现呢?
第一种:用ArrayList实现,因为他在处理自己的循环删除操作时候从后往前删速度也很快,因为它是由数组实现的,所以他生成的栈的大小就是固定的了,这样有个好处就是节约了空间,当我们知道了要用多大容量的栈时,用这种就比较合适了。
第二种:用链表实现,LinkedList是双向链表,所以实现也很简单。
队列(先进先出):
![](/assets/blank.gif)
这里在实现队列的时候我们就要用LinkedList了,ArrayList如果按照先进先出的策略去循环删除操作将会降低太多效率,不可取。LinkedList呢因为双向链表特性无论从前往后还是从后往前都是一样的效率。
java 双向链表_数据结构-链表、栈和队列相关推荐
- DSt:数据结构的简介、最强学习路线(逻辑结构【数组-链表-栈和队列/树-图-哈希】、物理结构、数据运算【十大排序/四大查找-图三大搜索-树三大遍历】、高级算法【贪心/分治/动态规划】之详细攻略
DSt:数据结构的简介.最强学习路线(逻辑结构[数组-链表-栈和队列/树-图-哈希].物理结构[元素/关系].数据运算[十大排序/四大查找-图三大搜索-树三大遍历].高级算法[贪心/分治/动态规划]) ...
- C语言【数据结构】栈和队列【OJ题(C++)、选择题】
目录 一.OJ题 1.225. 用队列实现栈 2.232. 用栈实现队列 3.622. 设计循环队列 4.20. 有效的括号 二.选择题 1.下列关于栈的叙述正确的是(B) 2.一个栈的入栈序列为AB ...
- 10.数据结构:栈和队列
大家好,我王有志又回来啦.关注王有志,回复DSA获取数据结构和算法学习资源. 最近被全链路优化搞得焦头烂额,等抽出时间来和大家分享下我司正在做的"全面提速工程". 今天我们来学习线 ...
- 数据结构~07.栈和队列的基本概念
数据结构~07.栈和队列的基本概念 本文是上一篇文章的后续,详情点击该链接~ 栈的定义: 栈是一种只能在一端进行插入或删除的线性表.其中,允许插入或删除的一端为栈顶(TOP).栈顶由一个称为栈顶指针的 ...
- 【数据结构】栈、队列、堆的python实现
[数据结构]栈.队列.堆的python实现 一.栈的python实现 1.1.栈的列表实现方法 1.2.用双向队列模拟栈 二.队列的python实现 2.1.队列的列表实现 2.2.使用deque实现 ...
- 【数据结构】栈与队列区分push pop offer poll containsKey put等
目录 前言 正文 队列 栈 map集合 前言 算法中经常会用到栈和队列等数据结构 但是经常弄混他们的进与取的代码算法 此文主要是做一个区分度 用法以及注意事项详情可看我之前的文章 [数据结构]栈和队列 ...
- JAVA day16、17 数据结构(栈、队列、数组、链表、红黑树)
一.什么叫数据结构? 数据结构是相互之间存在一种或多种特定关系的数据元素的集合,即带"结构"的数据元素的集合."结构"就是指数据元素之间存在的关系,分为逻辑结构 ...
- Java笔记整理五(Iterator接口,泛型,常见数据结构(栈,队列,数组,链表,红黑树,集合),jdk新特性,异常,多线程,Lambda表达式)
Java笔记整理五 1.1Iterator接口 Collection接口与Map接口主要用于存储元素,而Iterator主要用于迭代访问(即遍历)Collection中的元素,因此Iterator对象 ...
- Java基础加强重温_05:Iterator迭代器、增强for循环、集合综合案例-斗地主、数据结构(栈、队列、数组、链表、红黑树)、List接口、Set接口
摘要: Java基础加强重温_05: Iterator迭代器(指针跟踪元素). 增强for循环(格式.底层). 集合综合案例-斗地主(代码规范抽取代码,集合元素打乱). 数据结构[栈(先进后出,子弹夹 ...
- 数据结构之链表及其Java实现_数据结构之链表及其Java实现
数据的存储一般分线性存储结构和链式存储结构两种.前者是一种顺序的存储方式,在内存中用一块连续的内存空间存储数据,即逻辑上相连的物理位置相邻,比较常见的就是数组:后者是一种链式存储方式,不保证顺序性,逻 ...
最新文章
- sql 以a开头的所有记录_#9#猴子聊数据分析之常见的SQL笔试题和面试题(下)
- 【Netty】Netty 异步任务模型 及 Future-Listener 机制
- c语言读写nfc,Android NFC M1卡读写芯片卡读写(CPU卡读写)(RFID读写)
- node.js require 自动执行脚本 并生成html,从HTML页面执行Nodejs脚本?
- ASP.NET Core Web API使用静态swagger.json文件
- C# 8 新特性 - 异步流 Asynchronous Streams
- DES和AES加密:指定键的大小对于此算法无效
- BZOJ 2818GCD
- 沈志勇-百度大数据引擎与分析预测
- 机器博弈 (三) 虚拟遗憾最小化算法
- java中obj_Java中Object类的详细介绍
- 【传感器大赏】80cm红外距离传感器
- 杜蕾斯鞋套?又污又高级!
- Python爬虫三:抓取链家已成交二手房信息(58W数据)
- 适用于hips ui的iPhoneX及以上适配方案
- UI设计师—这个世界上最棒的工作!
- 什么是国网综能服务集团虚拟电厂?——安科瑞 严新亚
- 安装Souce Insight 4.0 、显示文件浏览、折叠代码
- python量化投资培训深圳你了解多少?
- 微信一年扫出多少个二维码?