原文:https://blog.csdn.net/nzfxx/article/details/51728516

"双向链表"-数据结构算法-之通俗易懂,完全解析

1.概念的引入

相信大家都使用过各种集合来进行开发,但是较少的人会去研究其内部的存储原理和调用方法,今天我就来带大家一起学习数据结构算法:双向链表

首先我们先来了解什么是缓存,以及数据在内存中的存储方式.

1.缓存是什么

如果cup读取数据时,每次读取都是从内存再到硬盘读取,那么效率就太低了.
所以可以预先把数据存到内存,然后cup下次从内存读取即可.

2.数据在内存中的存储方式

第1种.线性

所谓线性,就是内存是连续的,举例ArrayList或者数组:
我们知道,数组存储数据的时候,当你申请100个大小,但是内存不足的时候就会导致内存不足而失败,或者即使你请求到了100个,但是你只存3个数据,那么就浪费内存了 
=>优点:查找数据快(好比几个好朋友乘火车,车票都连在一起就好找了) 
缺点:1,内存不足就失败;2.浪费内存(买了10张火车票,但是只有3个人乘车,那么就浪费了7张)

 第2种.链接

内存是链接的(用于解决内存不足,解决线性(上面)问题的不足),比如不连续的空间也能存数据,比如买火车票,有火车票就卖给你,要几张卖几张,不连续位置的也卖.
=>优点:解决内存不足,解决内存浪费
缺点:找人比较慢(票不连续,不一定在一个车厢)

 节点的属性:

双向链表-java完全解析

多个节点的内部构造:

双向链表-java完全解析

代码思路

一.添加节点add(Object obj)

1.Node节点属性: 
    prev:存放前节点(相当于地址,地址就是指针,指针就是地址) 
    data:Object各种数据 
    next:存放下节点 
2.定义head,rear节点,当只有一个节点,那么head和rear同指一个节点 
3.节点添加的方法add(Object obj) 
    1.创建节点new Node(),即每加一个数据就创一个节点 
    2.放数据 
    3.把节点放入链表中 
        1.如果头结点为空,那么头结点和尾节点都指向该节点 
        2.如果头节点不为空 
            1.往尾部添加 
                原来的next指向新节点 
                rear.next = note; 
                新节点pre指向原节点,新节点也变成尾节点 
                note.pre = rear 
            (ps,有需求再设置往头部添加) 
4.toString方法[元素1,元素2,元素3] 
while(head!=null) 
if(head!=rear)append(head.data+","),***同temp代替head,否则会破坏head,影响后面的remove时head变才null了
View Code

相关文章:

  • 2021-10-31
  • 2021-11-02
  • 2021-10-25
  • 2021-09-25
  • 2021-10-14
  • 2021-10-21
猜你喜欢
  • 2021-04-09
  • 2022-12-23
  • 2021-12-02
  • 2021-04-26
  • 2021-09-18
  • 2021-09-17
  • 2021-12-05
相关资源
相似解决方案