美文网首页
链表的使用

链表的使用

作者: 春去春又来花谢花会开 | 来源:发表于2022-09-26 15:45 被阅读0次

LRU算法

一、使用单链表实现:新的访问来了之后链表中查询是否存在,如果存在且不说头节点则删除链表当前位置的数据把数据插入到头节点,如果不存在直接插入到头节点,当链表中的数据大小到达阈值时,需要删除尾结点的数据再插入到头节点

二、使用LinkedHashMap 

与HashMap相比LinkedHashMap维护的是一个具有双重链表的HashMap,LinkedHashMap支持2中排序。

一种是插入排序,即插入是什么顺序,读出来的就是什么顺序。

一种是使用排序,最近使用的会移至尾部例如 key1 key2 key3 key4,使用key3后为 key1 key2 key4 key3了。

accessOrder为true表示使用顺序,false表示插入顺序。

基于LinkedHashMap的使用顺序的特性,我们可以用来实现LRU算法

三、约瑟夫问题(丢手绢),单向环形链表实现

约瑟夫问题:有 N 个人围成一圈,每个人都有一个编号,编号由入圈的顺序决定,第一个入圈的人编号为 1,最后一个为 N,从第 k (1<=k<=N)个人开始报数,数到 m (1<=m<=N)的人将出圈,然后下一个人继续从 1 开始报数,直至所有人全部出圈,求依次出圈的编号。

package org.example.config;

public class MyNode {

Nodecur;

  int size;

  public MyNode(int i){

if(cur ==null){

cur =new Node(i);

        cur.next =cur;

        size++;

      }

}

public void addNode(int i){

if(cur!=null){

Node cur1 =new Node(i);

        if(size>=1){

cur1.next =cur.next;

            cur.next = cur1;

        }

size++;

      }

}

public void delNode(int i){

if(cur!=null){

int num =0;

        while(num

if(cur.next.data==i){

cur.next =cur.next.next;

              size--;

break;

            }

cur =cur.next;

            num++;

        }

}

}

public static void main(String[] args) {

MyNode mn1 =new MyNode(1);

      mn1.addNode(2);

      mn1.addNode(3);

      mn1.addNode(4);

      mn1.addNode(5);

      mn1.addNode(6);

      for(int i=0;i<3;i++){

mn1.cur = mn1.cur.next;

      }

System.out.println(mn1.cur.data);

      int i=0;

      while(mn1.cur != mn1.cur.next){

i++;

        if(i==4){

System.out.println(mn1.cur.data);

            mn1.delNode(mn1.cur.data);

            i=0;

        }

mn1.cur = mn1.cur.next;

      }

}

class Node {

int data;

      Nodenext;

      public Node(int data) {

this.data = data;

        this.next =null;

      }

}

}

相关文章

  • 3.链表

    链表 1. 链表和链表节点的实现 每个链表节点使用一个adlist.h/listNode结构来表示 使用adlis...

  • 《数据结构与算法之美》-链表

    数组和链表 数据是使用连续的内存空间存储数据。 链表是使用不连续的内存空间存储数据。 常见链表链表结构 单链表 循...

  • 002-数据结构算法-习题

    注意,题目中使用的链表都是单向的非循环链表 题目1 将2个递增的有序链表合并为一个有序链表; 要求结果链表仍然使用...

  • 五、双向链表

    双向链表 此前介绍的链表,也叫做单向链表使用双向链表可以提升链表的综合性能 修改之前的单链表的源码: 双向链表 –...

  • 链表

    文章结构 链表的定义 链表的插入和删除操作 链表的特性 常见的链表结构 自定义链表 链表的经典操作 使用链表实现L...

  • 链表

    内容 链表数据结构 向链表添加元素 从链表移除元素 使用 LinkedList 表 双向链表 循环链表 链表数据结...

  • Arraylist和stack的应用

    ArrayList的使用 Stack的使用 链表的使用

  • #线性表之链表

    阅读目录 为什么要使用链表链表的存储结构链表的常用操作代码实现 1.为什么使用链表 通过上一篇的学习,我们知道顺序...

  • 2017.5.25

    lua学习总结:数据结构: 使用Lua实现链表(单向链表和双向链表),队列 使用Lua保存图,用table保存,每...

  • 迭代器

    迭代器与链表伴随使用,为了获取链表的当前节点,可以使用迭代器。下面是单链表的迭代器,需要为单链表增加一个getIt...

网友评论

      本文标题:链表的使用

      本文链接:https://www.haomeiwen.com/subject/erztartx.html