首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用双圆链表在Java中实现多个大小数

的存储和操作。

双圆链表是一种特殊的链表结构,它与普通链表相比,多了一个尾节点指向头节点的指针,形成一个闭环。这种数据结构可以用来存储多个大小数,并且支持在任意位置插入、删除和查找操作。

在Java中,可以通过定义一个双圆链表类来实现这个功能。下面是一个简单的实现示例:

代码语言:txt
复制
public class DoubleCircularLinkedList {
    private Node head;
    private Node tail;

    private class Node {
        int data;
        Node prev;
        Node next;

        public Node(int data) {
            this.data = data;
        }
    }

    public void insert(int data) {
        Node newNode = new Node(data);
        if (head == null) {
            head = newNode;
            tail = newNode;
        } else {
            tail.next = newNode;
            newNode.prev = tail;
            tail = newNode;
        }
        tail.next = head;
        head.prev = tail;
    }

    public void delete(int data) {
        if (head == null) {
            return;
        }
        Node current = head;
        while (current != null) {
            if (current.data == data) {
                if (current == head) {
                    head = head.next;
                    tail.next = head;
                    head.prev = tail;
                } else if (current == tail) {
                    tail = tail.prev;
                    tail.next = head;
                    head.prev = tail;
                } else {
                    current.prev.next = current.next;
                    current.next.prev = current.prev;
                }
                return;
            }
            current = current.next;
            if (current == head) {
                break;
            }
        }
    }

    public void display() {
        if (head == null) {
            return;
        }
        Node current = head;
        while (current != null) {
            System.out.print(current.data + " ");
            current = current.next;
            if (current == head) {
                break;
            }
        }
        System.out.println();
    }
}

使用双圆链表可以方便地存储多个大小数,并且支持在任意位置进行插入、删除和查找操作。它的优势在于可以快速定位到指定位置进行操作,而不需要像数组那样进行元素的移动。

双圆链表在实际应用中有很多场景,例如:

  1. 缓存淘汰算法:LRU(Least Recently Used)算法可以使用双圆链表来实现,将最近访问的数据放在链表头部,当缓存满时,删除链表尾部的数据。
  2. 轮播图:双圆链表可以用来实现轮播图的循环播放功能,通过不断更新链表头节点和尾节点的指针,实现图片的切换。
  3. 游戏排行榜:双圆链表可以用来实现游戏排行榜,将玩家的得分按照从高到低的顺序插入链表,并且支持实时更新玩家的得分。

腾讯云提供了多个相关产品和服务,可以用于支持云计算和开发工程师的需求。以下是一些推荐的腾讯云产品和产品介绍链接地址:

  1. 云服务器(CVM):提供弹性计算能力,支持按需创建、配置和管理云服务器实例。产品介绍链接
  2. 云数据库 MySQL 版(CDB):提供稳定可靠的云数据库服务,支持高可用、备份恢复、性能优化等功能。产品介绍链接
  3. 云存储(COS):提供安全可靠的对象存储服务,支持海量数据存储和访问。产品介绍链接
  4. 人工智能(AI):提供多种人工智能服务,包括语音识别、图像识别、自然语言处理等。产品介绍链接
  5. 物联网(IoT):提供全面的物联网解决方案,包括设备接入、数据管理、应用开发等。产品介绍链接

以上是关于使用双圆链表在Java中实现多个大小数的存储和操作的完善且全面的答案。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java使用HttpUtils实现发送HTTP请求

微信公众号:冯文议(ID:fwy-world) HTTP请求,日常开发,还是比较常见的,今天给大家分享HttpUtils如何使用。...阅读本文,你将收获: 简单总结HTTP请求常用配置; JavaLibHttpUtils如何使用; 如何封装HTTP请求工具类。...第一部分:简单总结HTTP请求常用配置 大家好, Java 开发,经常遇到需要调用第三方提供的接口服务,常见的形式是 HTTP + JSON,下面,就对 http 请求常见的设置,做一个说明 http...提供多种请求方式,以满足我们日常需要,先按请求方式来做说明: GET POST PUT PATCH DELETE RESTful API 开发,我们可以根据这些请求方式设计我们的API接口。...我是小冯,一名Java程序员,专注于程序设计和开发,如果你开发上遇到问题,欢迎一起交流。

2.8K00

javaIterable接口的使用实现一个单链表的迭代器

链表实现: public class MyLinkedList { private static class Entry{ private E value;...iterator()的返回值会返回一个迭代器对象,这个迭代器对象可以作为一个工具来遍历集合类的对象。...此外,迭代器更是设计模式,如对图的遍历可以实现一个图迭代器,简化代码,将遍历的思想抽象出来。 自己实现一个可以遍历上述单链表的迭代器,这个迭代器需要实现Iterator接口中的方法。...主要包括以下三个方法: (1)是否存在下一个对象元素 (2)返回下一个对象元素 (3)删除集合的当前迭代器指向的对象元素 public class MyLinkedList ...show()方法的功能是相同的,但是迭代器为遍历集合对象元素提供了一种统一的方法,此外也可以使用迭代器做更多的事情。

54310

Redis技术知识总结之一——Redis 的数据结构

比如jemalloc64位系统,将内存空间划分为小、、巨大三个范围;每个范围内又划分了许多小的内存块单位;当Redis存储数据时,会选择大小最合适的内存块进行存储。...可以看出,HashTable 与 Java 1.7 的 HashMap 实现原理基本相同。...综上所述,ziplist 只适合小数据集。 注: List 满足以下条件才会使用 ziplist,如果其中之一不满足,则转换为链表。...与链表相比,压缩列表可以节省内存空间,但是进行修改或增删操作时,复杂度较高;因此当节点数量较少时,可以使用压缩列表;但是节点数量多时,还是使用链表划算。...List 对象的底层实现是 quicklist(快速列表,是 ziplist 压缩列表 和 linkedlist 链表的组合)。

73330

剑指offer | 面试题17:链表倒数第k个节点

死磕算法系列文章 干货 | 手撕十经典排序算法 剑指offer | 认识面试 剑指offer | 面试题2:实现Singleton模式 剑指offer | 面试题3:二维数组的查找 剑指offer...| 面试题4:替换空格 剑指offer | 面试题5:从尾到头打印链表 剑指offer | 面试题6:重建二叉树 剑指offer | 面试题7:用两个栈实现队列 剑指offer | 面试题8:旋转数组的最小数字...链表倒数第k个节点 题目描述: 输入一个链表,输出该链表倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。...解题思路: 第一时间想到的解法: 先遍历统计链表长度,记为 n ; 设置一个指针走 (n - k) 步,即可找到链表倒数第 k个节点。 使用指针则可以不用统计链表长度。...空间复杂度 O(1): 指针 former , latter 使用常数大小的额外空间。 代码: “本题没有 k 大于链表长度的 case ,因此不用考虑越界问题。考虑越界问题的代码请见第三、四栏。

20310

剑指offer | 面试题43:和为s的两个数字

死磕算法系列文章 干货 | 手撕十经典排序算法 剑指offer | 认识面试 剑指offer | 面试题2:实现Singleton模式 剑指offer | 面试题3:二维数组的查找 剑指offer |...面试题4:替换空格 剑指offer | 面试题5:从尾到头打印链表 剑指offer | 面试题6:重建二叉树 剑指offer | 面试题7:用两个栈实现队列 剑指offer | 面试题8:旋转数组的最小数字...| 面试题13:数值的整数次方 剑指offer | 面试题14:打印从1到最大的n位数 剑指offer | 面试题15:删除链表的节点 剑指offer | 面试题16:将数组的奇数放在偶数前 剑指offer...| 面试题17:链表倒数第k个节点 剑指offer | 面试题18:反转链表 剑指offer | 面试题19:合并两个有序链表 剑指offer | 面试题20:判断二叉树A是否包含子树B 剑指offer...复杂度分析: 时间复杂度O(N) : N为数组nums的长度;指针共同线性遍历整个数组。 空间复杂度0(1) :量i, j使用常数大小的额外空间。

25530

剑指offer | 面试题18:反转链表

死磕算法系列文章 干货 | 手撕十经典排序算法 剑指offer | 认识面试 剑指offer | 面试题2:实现Singleton模式 剑指offer | 面试题3:二维数组的查找 剑指offer...| 面试题4:替换空格 剑指offer | 面试题5:从尾到头打印链表 剑指offer | 面试题6:重建二叉树 剑指offer | 面试题7:用两个栈实现队列 剑指offer | 面试题8:旋转数组的最小数字...有迭代(指针)、递归两种实现方法。 方法一:迭代(指针) 考虑遍历链表,并在访问各节点时修改 next 引用指向,算法流程见注释。...复杂度分析: 时间复杂度 O(N): 遍历链表使用线性大小时间。 空间复杂度 O(1): 变量 pre 和 cur 使用常数大小额外空间。...,当越过尾节点后终止递归,回溯时修改各节点的 next 引用指向。

41510

JavaSE(三)

变量就是指用来保存程序某些特定的值,而且程序运行期间其值可以发生改变,将其就称之为变量。 ​    本质上变量可以当成是一个盒子,这个盒子可以用来存储一定的值,方便后期快速定位使用这个值。...3.6.1 如何使用变量 例如: ​    要求计算的面积。而公式则为 πr^2 ,假设 r = 5 ,此时 r 就是一个变量。 ​    不同大小的盒子承载的内容是不同的。...Sun公司规定了Java是一门强类型静态检查语言,所有的变量都有具体的类型,数据也存在类型。 ​    所以,使用变量时,需要先声明,再使用。 ​   ...声明变量的格式则是:date_type name = value (数据类型 变量名 = 字面值) ​    tips:java的变量名要遵循驼峰原则--->首字母小写,其后的每个单词首字母均大写。...: A:精度(double) 数据类型     所占空间              精度范围                 表示方式   精度        8个字节      取值为小数后15位

39110

面试专题-并发篇

三个层面 不同点 语法层面 synchronized 是关键字,源码 jvm ,用 c++ 语言实现 Lock 是接口,源码由 jdk 提供,用 java 语言实现 使用 synchronized...,synchronized 做了很多优化,如偏向锁、轻量级锁,性能不赖 竞争激烈时,Lock 的实现通常会提供更好的性能 公平锁 公平锁的公平体现 已经处在阻塞队列的线程(不考虑超时)始终都是公平的...的等待集合不同之处在于,ReentrantLock 的条件变量可以有多个,可以实现更精细的等待、唤醒控制 代码说明 day02.TestReentrantLock 用较为形象的方式演示 ReentrantLock...假设小数组长度是 2^n,key 小数组内的索引是 key 的二次 hash 值的低 n 位 扩容:每个小数组的扩容相对独立,小数超过扩容因子时会触发扩容,每次扩容翻倍 Segment[0]...原型:首次创建其它小数组时,会以此原型为依据,数组长度,扩容因子都会以原型为准 ConcurrentHashMap 1.8 数据结构:Node 数组 + 链表或红黑树,数组的每个头节点作为锁,如果多个线程访问的头节点不同

55510

剑指offer | 面试题44:和为s的连续整数序列

死磕算法系列文章 干货 | 手撕十经典排序算法 剑指offer | 认识面试 剑指offer | 面试题2:实现Singleton模式 剑指offer | 面试题3:二维数组的查找 剑指offer...| 面试题4:替换空格 剑指offer | 面试题5:从尾到头打印链表 剑指offer | 面试题6:重建二叉树 剑指offer | 面试题7:用两个栈实现队列 剑指offer | 面试题8:旋转数组的最小数字...| 面试题13:数值的整数次方 剑指offer | 面试题14:打印从1到最大的n位数 剑指offer | 面试题15:删除链表的节点 剑指offer | 面试题16:将数组的奇数放在偶数前 剑指offer...| 面试题17:链表倒数第k个节点 剑指offer | 面试题18:反转链表 剑指offer | 面试题19:合并两个有序链表 剑指offer | 面试题20:判断二叉树A是否包含子树B 剑指offer...36:丑数 剑指offer | 面试题37:第一个只出现一次的字符 剑指offer | 面试题38:数组的逆序对 剑指offer | 面试题39:两个链表的第一个公共节点 剑指offer | 面试题40

35620

「MoreThanJava」Day2:变量、数据类型和运算符

而不是我们想象的 0.3? 这不是因为它们计算时出现了错误,而是因为浮点数计算标准的要求。 首先我们要明确一点:编程的浮点数并不能和数学小数看做同一个东西。...编程的浮点数的精度往往都是有限的,单精度的浮点数使用 32 位表示,而精度的浮点数使用 64 位表示; 数学小数系统可以通过引入无限序列....可以表示任意的实数; 请考虑使用 十进制 表示 1...: image 交易系统或者科学计算的场景,如果需要更高的精度小数,可以使用具有 28 个有效位数的 decimal 或者直接使用分数,不过这些表示方法的开销也随着有效位数的增加而提高,我们应该按照需要选择最合适的方法...重新回到最开始的问题 — 0.1 和 0.2 相加不等于 0.3 的原因包括以下两个: 使用二进制表达十进制的小数时,某些数字无法被有限位的二进制小数表示; 单精度和精度的浮点数只包括 7 位或者 15...位的有效小数位,存储需要无限位表示的小数时只能存储近似值; 使用单精度和精度浮点数时也应该牢记它们只有 7 位和 15 位的有效位数。

50430

昨天面试被问到的 缓存淘汰算法FIFO、LRU、LFU及Java实现

最早存入缓存的数据,其不再被使用的可能性比刚存入缓存的可能性。建立一个FIFO队列,记录所有缓存的数据。当一条数据被存入缓存时,就把它插在队尾上。需要被淘汰的数据一直队列头。...Java,其实LinkedHashMap已经实现了LRU缓存淘汰算法,需要在构造函数第三个参数传入true,表示按照时间顺序访问。可以直接继承LinkedHashMap来实现。...我们可以使用双向链表和哈希表进行实现,哈希表用于存储对应的数据,双向链表用于数据被使用的时间先后顺序。 访问数据时,如果数据已存在缓存,则把该数据的对应节点移到链表尾部。...我们可以使用哈希表进行实现,一个哈希表用于存储对应的数据,另一个哈希表用于存储数据被使用次数和对应的数据。...LRU,Least Frequently Used,最不经常使用算法,一段时间内,数据被使用次数最少的,优先被淘汰,可以使用哈希表实现

28020

Redis 为什么这么快?

这样设计的好处是,可以针对不同的使用场景,对5常用类型设置多种不同的数据结构实现,从而优化对象不同场景下的使用效率。...比如jemalloc64位系统,将内存空间划分为小、、巨大三个范围;每个范围内又划分了许多小的内存块单位;当Redis存储数据时,会选择大小最合适的内存块进行存储。...4 List List对象的底层实现是quicklist(快速列表,是ziplist 压缩列表 和linkedlist 链表 的组合)。...与链表相比,压缩列表可以节省内存空间,但是进行修改或增删操作时,复杂度较高;因此当节点数量较少时,可以使用压缩列表;但是节点数量多时,还是使用链表划算。...新版本list链表使用 quicklist 代替了 ziplist和 linkedlist: ? quickList 是 zipList 和 linkedList 的混合体。

96330

剑指offer | 面试题16:将数组的奇数放在偶数前

死磕算法系列文章 干货 | 手撕十经典排序算法 剑指offer | 认识面试 剑指offer | 面试题2:实现Singleton模式 剑指offer | 面试题3:二维数组的查找 剑指offer...| 面试题4:替换空格 剑指offer | 面试题5:从尾到头打印链表 剑指offer | 面试题6:重建二叉树 剑指offer | 面试题7:用两个栈实现队列 剑指offer | 面试题8:旋转数组的最小数字...剑指offer | 面试题9:斐波那契数列 剑指offer | 面试题10:青蛙跳台阶问题 剑指offer | 面试题11:矩阵覆盖 剑指offer | 面试题12:二进制1的个数 剑指offer.../com/nateshao/sword_offer/topic_16_exchange/Solution.java 将数组的奇数放在偶数前 题目描述: 输入一个整数数组,实现一个函数来调整该数组数字的顺序...复杂度分析: 时间复杂度 O(N) : N 为数组 nums长度,指针 i, j 共同遍历整个数组。 空间复杂度 O(1) : 指针 i, j 使用常数大小的额外空间。

64120

LinkedList浅析

LinkedList 实现 List 接口,所以能对它进行队列操作。 LinkedList 实现 Deque 接口,能将LinkedList当作端队列使用。...双向链表结构 链表(双向链表):链表和单链表相比,多了一个指向尾指针(tail),链表的每个结点都有一个头指针head和尾指针tail,链表相比单链表更容易操作,链表结点的首结点的head指向为...---- LinkedList的本质是链表实现 List 和 Deque接口: LinkedList,每个节点都用内部类Node表示: 具体的过程可以看下面这张图: 点我 每个node都是节点...---- List使用场景 ArrayList随机访问方面比较擅长,LinkedList随机增删方面比较擅长 对于需要快速插入,删除元素,使用LinkedList。...对于“多线程环境,且List可能同时被多个线程操作”,此时,应该使用同步的类(如Vector)。

42710

Java数据结构和算法

Java数据结构和算法 数据结构 线性数据结构:常见的有一维数组,线性表,栈,队列,队列,串。 非线性数据结构:常见的有:多维数组,集合,树,图,散列表(hash)....链表 特点:元素可以不连续内存,是以索引将数据联系起来的,当查询元素的时候需要从头开始查询,所以效率比较低,然而添加和删除的只需要修改索引就可以了 使用场景:少查询,需要频繁的插入或删除情况 队列...特点:先进先出, 使用场景:多线程阻塞队列管理非常有用 栈 特点:先进后出,就像一个箱子, 使用场景:实现递归以及表示式 串 串:也称字符串,是由N个字符组成的优先序列。...Java里面很少提供这样的工具类,而java里面tree和图底层的native方法用了多维数组来储存。 2:集合 由一个或多个确定的元素所构成的整体叫做集合。...Java里面可以去广义的去理解为实现了Collection接口的类都叫集合。 3:树 树形结构,作者觉得它是一种特殊的链形数据结构。最少有一个根节点组成,可以有多个子节点。

1K20

java综述

这使当需要很大的整数时它非常有用 浮点数 float 32位 存储的单精度数值 某些处理器上 单精度运算速度更快 并且占用的空间是精度的一半 但是当数值非常或非常小时会变得不精确 如果需要小数部分...并且精度要求不是很高时 float类型变量是很有用的 double 精度使用double关键字表示 并使用64位存储数值 针对高速数学运算进行优化的某些现代处理器上 实际上精度数值运算速度更快...字符型 java正式规范 char被当作整数类型 这意味它和 int short long 以及 byte 位于同一分类 然而 因为char类型的主要用途是表示unicode字符 所以通常考虑将char...放到单独的分类 布尔型 boolean 的基本类型 用于表示逻辑值 它只能是两个可能的值之一 true 或 false 所有关系运算都返回这种类型的值 从jdk7开始 整型字面值还可以嵌入一个或多个下划线...-05 2e+100 java也支持16进制的浮点数字面量 0x12.2P2 代表72.5 从jdk7开始 浮点型字面值可以嵌入一个或多个下划线 该特性和用于整型字面值时的工作方式相同 double

33520

剑指offer | 面试题19:合并两个有序链表

死磕算法系列文章 干货 | 手撕十经典排序算法 剑指offer | 认识面试 剑指offer | 面试题2:实现Singleton模式 剑指offer | 面试题3:二维数组的查找 剑指offer...| 面试题4:替换空格 剑指offer | 面试题5:从尾到头打印链表 剑指offer | 面试题6:重建二叉树 剑指offer | 面试题7:用两个栈实现队列 剑指offer | 面试题8:旋转数组的最小数字...合并两个有序链表 题目描述:输入两个递增排序的链表,合并这两个链表并使新链表的节点仍然是递增排序的。...l1,l2是递增的,因此容易想到使用指针l1和l2遍历两链表,根据l1.val和 l2.val的大小关系确定节点添加顺序,两节点指针交替前进,直至遍历完毕。...返回值:合并链表伪头节点dum之后,因此返回dum.next即呵。 复杂度分析: 时间复杂度O(M + N) : M,N分别为链表l1, l2的长度,合并操作需遍历两链表

29430

Redis为何这么快--数据存储角度

这样设计的好处是,可以针对不同的使用场景,对5常用类型设置多种不同的数据结构实现,从而优化对象不同场景下的使用效率。      ...比如jemalloc64位系统,将内存空间划分为小、、巨大三个范围;每个范围内又划分了许多小的内存块单位;当Redis存储数据时,会选择大小最合适的内存块进行存储。      ...与链表相比,压缩列表可以节省内存空间,但是进行修改或增删操作时,复杂度较高;因此当节点数量较少时,可以使用压缩列表;但是节点数量多时,还是使用链表划算。...新版本list链表使用 quicklist 代替了 ziplist和 linkedlist: ?       quickList 是 zipList 和 linkedList 的混合体。...跳跃表(skiplist)是一种有序数据结构,它通过某个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。 参考: 《Redis设计与实现》--黄健宏

58220

Redis 为何这么快?聊聊它的数据结构~

这样设计的好处是,可以针对不同的使用场景,对5常用类型设置多种不同的数据结构实现,从而优化对象不同场景下的使用效率。...比如jemalloc64位系统,将内存空间划分为小、、巨大三个范围;每个范围内又划分了许多小的内存块单位;当Redis存储数据时,会选择大小最合适的内存块进行存储。...四、List List对象的底层实现是quicklist(快速列表,是ziplist 压缩列表 和linkedlist 链表 的组合)。...与链表相比,压缩列表可以节省内存空间,但是进行修改或增删操作时,复杂度较高;因此当节点数量较少时,可以使用压缩列表;但是节点数量多时,还是使用链表划算。...新版本list链表使用 quicklist 代替了 ziplist和 linkedlist: ? quickList 是 zipList 和 linkedList 的混合体。

61820
领券