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

用Java编写遍历链表的dequeue()函数

dequeue()函数是一个用Java编写的遍历链表的函数,它的作用是从链表的头部和尾部分别删除元素,并返回删除的元素值。下面是一个完善且全面的答案:

dequeue()函数是双端队列(Double Ended Queue)的一种操作,它允许在队列的两端进行插入和删除操作。在Java中,我们可以使用链表来实现双端队列的功能。

以下是一个用Java编写的遍历链表的dequeue()函数的示例代码:

代码语言:txt
复制
public class DequeueExample {
    private Node head;
    private Node tail;
    
    private class Node {
        int data;
        Node next;
        
        public Node(int data) {
            this.data = data;
            this.next = null;
        }
    }
    
    public void enqueueFront(int data) {
        Node newNode = new Node(data);
        
        if (head == null) {
            head = newNode;
            tail = newNode;
        } else {
            newNode.next = head;
            head = newNode;
        }
    }
    
    public void enqueueRear(int data) {
        Node newNode = new Node(data);
        
        if (head == null) {
            head = newNode;
            tail = newNode;
        } else {
            tail.next = newNode;
            tail = newNode;
        }
    }
    
    public int dequeueFront() {
        if (head == null) {
            throw new NoSuchElementException("Queue is empty");
        }
        
        int data = head.data;
        head = head.next;
        
        if (head == null) {
            tail = null;
        }
        
        return data;
    }
    
    public int dequeueRear() {
        if (head == null) {
            throw new NoSuchElementException("Queue is empty");
        }
        
        int data = tail.data;
        
        if (head == tail) {
            head = null;
            tail = null;
        } else {
            Node currentNode = head;
            while (currentNode.next != tail) {
                currentNode = currentNode.next;
            }
            currentNode.next = null;
            tail = currentNode;
        }
        
        return data;
    }
    
    public void printQueue() {
        Node currentNode = head;
        while (currentNode != null) {
            System.out.print(currentNode.data + " ");
            currentNode = currentNode.next;
        }
        System.out.println();
    }
    
    public static void main(String[] args) {
        DequeueExample dequeue = new DequeueExample();
        
        dequeue.enqueueFront(1);
        dequeue.enqueueFront(2);
        dequeue.enqueueRear(3);
        dequeue.enqueueRear(4);
        
        dequeue.printQueue();  // 输出:2 1 3 4
        
        System.out.println(dequeue.dequeueFront());  // 输出:2
        System.out.println(dequeue.dequeueRear());   // 输出:4
        
        dequeue.printQueue();  // 输出:1 3
    }
}

在上述代码中,我们使用了一个内部类Node来表示链表的节点。enqueueFront()函数用于在链表的头部插入元素,enqueueRear()函数用于在链表的尾部插入元素。dequeueFront()函数用于从链表的头部删除元素并返回删除的元素值,dequeueRear()函数用于从链表的尾部删除元素并返回删除的元素值。printQueue()函数用于打印链表中的所有元素。

这个遍历链表的dequeue()函数可以用于实现双端队列的功能,可以在队列的头部和尾部进行插入和删除操作。它的时间复杂度为O(1)。

腾讯云提供了一系列的云计算产品,包括云服务器、云数据库、云存储等,可以根据具体需求选择适合的产品。具体的产品介绍和相关链接地址可以参考腾讯云官方网站:https://cloud.tencent.com/

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

相关·内容

用链表编写学生管理系统(涵盖文件的输入输出)

学过链表的大家都知道,它是一种动态的数据结构,但是它理解起来是比较困难的,但是用链表存储数据是非常好用的,可以使我们的程序更加具有健壮性。...为了初学者理解单项链表更加快,今天就用链表和文件操作写了一控制台的学生管理系统,希望可以帮助大家更好的理解链表。 程序实现的功能: ?...10]; char studentSex[4]; int score[4];//定义要输入学生信息的变量; char c; int menu;//保存要进行的选项;..."); } return; } void Save()//保存链表中的数据 { FILE *fp; struct link *p = head; if ((fp...p->student.score[3]); p = p->next; } fclose(fp); return; } void Open()//将文件中获得的数据写入到链表中

1.1K20

线性结构-队列

接下来将介绍用链表实现的链队列。 队列的定义 队列的定义与普通的链表定义很相似,需要先定义队列的节点类,在定义队列类。...队列的节点类可以用Java语言描述如下: class MyQueueNode { int data; // 数据域,变量类型为int MyQueueNode next; // 指针域,指向下一个结点...获取长度与销毁队列 可以用遍历的方式获取队列长度: public int getQueueLength() { // 获取队列的长度 int length = 0; MyQueueNode...front和队尾指针rear都置为null即可,Java的垃圾回收机制会将队列链表逐一回收并释放。...因此第一行决定了整个符号三角形的'+'和'-'的数量以及排列状态。 编写一个程序,输入任意符号三角形的第1行,打印出符合规则的符号三角形。

18620
  • 数据结构——队列

    当然,其实数组和链表的front和rear还有点小区别,后面会具体介绍。 enQueue(入队):在队尾rear插入元素 deQueue(出队):在对头front删除元素 2、普通队列: ?...容易实现,但是如果队头删除在尾部进行,如果不设置尾指针要遍历到队尾,但是设置尾指针删除需要将它指向前驱节点那么就需要双向链表。都挺麻烦的。...方案二但是如果队头设在链表头,队尾设在链表尾部,那么队尾进队插入在链表尾部插入没问题(用尾指针可以直接指向next)。容易实现,如果队头删除在头部进行也很容易,就是我们前面常说的头节点删除节点。...=null) { va+=team.data+" "; team=team.next; } return va; } } 我一般采用java中的封装好的函数来进行: import...()); // 5 //遍历输出队列 /* 我们在遍历的过程中,最好是使用边删除,边遍历的方法啊,因为删除之后,下一个元素是即将出队的元素,就好遍历出来了

    41310

    用只含一个链域的节点实现循环链表的双向遍历

    通常来说,要实现循环双向链表,每个节点需要有两个链域:前驱和后继。现在的问题是:如何设计一种环形表,使表的每个结点只包含一个链域而又能够有效地对其进行两个方向的查找。本文将给出一种实现方式。...我们可以把异或的链域看成一把特殊的锁,它有两把不同的钥匙,用钥匙next就可以打开前驱prev的门,而用钥匙prev就可以打开后继next的门。...prevXORnext; //前驱和后继的异或 }; 在创建环形链表时,首先建立一个头节点rL,并申明节点指针prev和next,为了让头节点的链域可以直接指向第一个节点firstP,将...(由于Position为结构体指针,指针的内存大小在32位机上为4个字节即32位,在64位机上是8个字节,所以为了通用性,将其转化为long long而不是int)     创建环形链表函数如下: RingList...cur = (Position)((LL)prev1->prevXORnext ^ (LL)(prev2)); } printf("\n"); }      逆时针访问函数如下

    81551

    图及其应用

    =g.vertices[i].firstarc; /*插入表结点*/ g.vertices[i].firstarc=p; /*将顶点Vi插入到第j个单链表的表头,也就是用“头插法”建立一个单链表*/...具体要求如下: * DFS:从未被访问的顶点Vi出发深度优先遍历图。 测试说明 可在右侧文件夹中查看step2/Main.cpp文件,以便于你的操作。 平台会对你编写的代码进行测试。...i个单链表的表头,也就是用“头插法”建立一个单链表*/ p=(ENode *)malloc(sizeof(ENode)); /*生成表结点*/ p->adjvex=j; p->weight=0;...平台会对你编写的代码进行测试。 输入输出说明: 第一行输入图的类型、图的顶点数和边数。 第二行输入各条边的两顶点的编号,按顶点编号从小到大的顺序输入。 输出广度优先遍历的结果。...i个单链表的表头,也就是用“头插法”建立一个单链表*/ p=(ENode *)malloc(sizeof(ENode)); /*生成表结点*/ p->adjvex=j; p->weight=0;

    69820

    探秘Java:用ByteBuddy编写一个简单的Agent

    一、从认识ByteBuddy开始   在之前的博客当中我们了解了Java Agent的一些基本概念和如何编写一个简单的Java Agent,但是在之前的博客中所使用的Agent编写方法还是相对原始和繁琐的...为了进一步简化编写Java Agent的复杂度,这里我们要介绍下面这样一款字节码处理利器——ByteBuddy。   ...二、编写一个简单的Java Agent——方法耗时统计   从上面的描述中我们可以了解到,ByteBuddy的诞生并非单纯为了创建Java Agent,我们只是借助了ByteBuddy提供的API来生成更易维护的...Java Agent,下面我们通过一个简单的例子来了解一下如何使用ByteBuddy来编写一个Java Agent。   ...下面我们要编写的Java Agent主要是用于进行方法执行的耗时统计,参考以往使用AOP方式的思路,我们需要进行以下处理: 指定需要拦截处理的对象(可以是类、方法或者被注解的元素); 明确如何处理拦截的对象

    2.4K40

    67行JS代码实现队列取代数组,面试官刮目相看

    (在这库里面shift用的是dequeue方法) 1.2 你能学到 ES6 中的 class 链表和数组的区别,时间复杂度 JS 实现链表的方法 学习 Symbol.iterator 的使用场景 调试源码...该实例是可枚举的,也就是说 你可以用for...of来遍历,并且可以用扩展运算符将其变为数组,但是尽量不要这样做,这样性能很差 .enqueue(value) 添加一个元素到队尾 .dequeue()...每次遍历的时候先找到头结点(#head指向的结点),然后通过每个结点的next指针往后走。...即使只有头结点也能组成该链表——慢慢遍历总能到最后面,但是显然这样效率就低了,所以还有一个专门的尾指针#tail,方便尾部插入结点 源码总览: class Node { value; next;...总结 & 收获 复习了 ES6 中的 class以及相关语法 链表和数组的区别,时间复杂度,通过指针的空间 来省下按顺序遍历的时间——一种空间换时间的性能优化策略 JS 实现链表的方法,有了class这个语法后

    49520

    编写java判断闰年_用Java程序判断是否是闰年的简单实例

    大家好,又见面了,我是你们的朋友全栈君。 我们知道,(1)如果是整百的年份,能被400整除的,是闰年;(2)如果不是整百的年份,能被4整除的,也是闰年。每400年,有97个闰年。...import java.util.Scanner;//插入扫描仪 public class runnian { public static void main(String[] args)//Sting...代码如下: import java.util.Scanner; public class runnian { public static void main(String[] args) { Scanner...+”年是闰年”);} //年份能被4整除但不能被100整除,或者年份能被400整除 else{System.out.println(nianfen+”年不是闰年”);} } } 以上就是小编为大家带来的用...Java程序判断是否是闰年的简单实例全部内容了,希望大家多多支持脚本之家~ 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/156940.html原文链接:https

    1.4K20

    JS算法探险之队列(Queue)

    链表版本 这里再做一个简单说明,在js中,对象类型数据,它本身就是一个以零散方式存储的。我们来简单做一个实验。...该类型的构造函数的参数确定滑动窗口的大小 每次调用next函数,会在滑动窗口中添加一个整数,并返回滑动窗口的所有数字的平均值 ❞ 分析 在窗口中添加数字,当窗口中的数字的数目超过限制时,还可以从窗口中删除数字...用广度优先(BFS)的顺序遍历二叉树,很容易知道 「每层」最左边或者最右边的节点 「每层」的最大值或者最小值 也就是说,关于二叉树的题目如果出现「层」的概念,尝试用广度优先来解决问题。...示例:输入: root = [1,3,2,5,3,null,9] 输出: [1,3,9] ❞ 用一个队列实现二叉树的广度优先搜索 分析 找出二叉树中「每层」的最大值,在遍历的时需要知道每层什么时候开始...因为,在某个时刻,队列中可能存在位于不同层的节点,如果不做区分的话,是无法获取到某层数据的最大值 解决上述问题的一个办法就是「计数」 用两个变量分别记录两层节点的数目 变量current记录当前遍历这一层中位于队列之中节点的数量

    48620

    重生之“我打数据结构,真的假的?”--3.栈和队列(无习题)

    1.3 栈的实现方式 栈可以通过数组或链表来实现。以下分别讨论栈的数组实现和链表实现。...1.3.1 使用数组实现栈 以下是用C语言实现栈的数组版: #include #include #include #define MAX_SIZE...:"); traverseStack(&stack); return 0; } 1.4 栈的应用 函数调用栈:计算机系统使用栈来保存函数调用的返回地址。...出队(Dequeue):从队头移除一个元素。 查看队头元素(Front)。 判断队列是否为空(isEmpty)。 2.3 队列的实现方式 队列可以通过数组或链表来实现。以下分别介绍这两种实现方式。...在C语言中,栈和队列可以通过数组或链表来实现,每种实现方式都有其优缺点。 在理解了这些数据结构的基本操作后,可以更好地应用它们来解决实际问题,如表达式求值、任务调度、图遍历等。

    5900

    数据结构学习笔记|栈和队列

    在做leetcode练习的时候,会有一些题目要求进行括号的匹配,就可以用到栈。栈的实现可以用数组也可以用链表,用数组实现的叫做顺序栈,用链表实现的叫做链栈。...在用Java的时候有一个叫线程池的东西很好用,其中就有一个等待队列,这就是队列的一个常见的应用场景。队列和栈不同,栈只对栈顶进行push和pop操作,而队列明显是插入时从队尾插进来,逐出时从队头逐出。...有个专用的词汇:enqueue:入队,从队尾插入数据;dequeue:出队,从队头取走数据。如果用链表来实现,那应该是这样的:图片还是一个链表,出队简单,和栈的pop操作一样。...入队稍显麻烦,需要首先遍历到队尾。这样的时间复杂度是O(n)。...,取尾部结点就必须要遍历,时间复杂度太高。

    18820

    PHP SPL标准库 基本的一些例子和实践

    Spl基本框架 典型问题 Commom Problem 比如 数学建模/数据结构 解决数据怎么存储的问题 元素遍历 数据怎么查看的问题 常用方法的统一调用 通用方法(数组、集合的大小) 自定义遍历...(头部) push向链表的顶部(尾部)插入-个节点 pop :获取链表中的顶部(尾部)节点,并且从链表中删除这个节点;操作不改变当前指针的位置 current指向链表当前节点的指针,必须在调用之:前先调用...next让链表当前节点的指针指向下一个节点, current的返回值随之改变 unshift向链表的底部(头部)插入-个节点 shift删除一 -个链表底部(头部)节点 bottom: 获得链表底部(头部...位置的下一个节点,而双向链表是靠近Top的下一个节点 $stack->next(); echo "current: {$stack->current()}\n"; //堆栈遍历 $stack...,比如遍历- -棵树 所有具有层次结构特点的数据都可以用这个接口遍历 如:文件夹 关键方法 hasChildren方法用于判断当前节点是否存在子节点 getChildren方法用于得到当前节 点子节点的迭代器

    1.1K20

    数据结构代码题-栈、队列

    在处理链表的后一半元素时,当访问到链表的一个元素后,就从栈中弹出一个元素,两个元素比较,若相等,则将链表中的下一个元素与栈中再弹出的元素比较,直至链表到尾。...这时若栈是空栈,则得出链表中心对称的结构;否则,当链表中的一个元素与栈中弹出的元素不等时,结论为链表非中心对称,结束算法执行。...试编写与此结构相应的入队和出队算法。...Enqueue;//将元素x入队 Dequeue;//出队,并将出队元素存储在x中 QueueEmpty;//判断队列是否为空 算法思想: 利用两个栈s1和s2来模拟一个队列,当需要向队列中插入一个元素时用...: 算法思想: 第一步:为递归函数设计一个结构体(Func_val)用于保存函数的n和Pn(x)的值。

    32130

    【数据结构】C语言实现二叉树的基本操作——二叉树的层次遍历、求深度、求结点数……

    //BTL——二叉链表的类型 对于二叉树的层次遍历,这里我们主要介绍的是第二种思路——通过队列实现二叉树的层序遍历。...1.2.2 函数的三要素 在层序遍历的算法中,我们想要解决的问题是实现二叉树的层序遍历,因此函数名我们不妨定为LevelOrder——层次遍历;在完成遍历后,我们不需要任何的返回值,所以函数的返回类型定为...,直到队列为空才结束,因此我们需要通过循环来实现整个过程,整个循环可以用队列是否为空来进行控制: while (!...根据个人喜好来选择具体的编写方式。...因此我们需要借助线性表、链表、栈和队列等这些方便存取数据的数据结构来实现二叉树的遍历。

    32610

    【数据结构与算法】详解什么是优先级队列,并用代码手动实现一个优先级队列

    数据结构——优先级队列 一、什么是优先级队列 二、优先级队列的方法 三、用代码实现优先级队列 (1)创建一个构造函数 (2)创建内部构造函数 (3)实现enqueue()方法 (4)实现dequeue...如果再插入一个元素 Java,给它一个号码牌 7,因为数字 7 比 1 和 3 都小,所以此时的队列是这样的 ?...isEmpty() 查看队列是否为空 size() 返回队列内元素的个数 toString() 以字符串的形式展示队列内的所有元素 三、用代码实现优先级队列 接下来,我们也还是用JavaScript...(4)实现dequeue()方法 dequeue()方法就跟普通队列一样啦,直接删除队列前端的第一个元素即可。...下一篇文章我会开始讲 链表 ,这种数据结构相对于数组的优势就在于往结构中插入元素性能比较高,不会牵一发而动全身。所以等到之后大家学习了链表,可以回过头来用链表实现一下优先级队列。

    38620

    iOS 面试策略之算法基础1-3节

    Swift 虽然不像 Java 中有现成的队列和栈,但我们完全可以用数组配合最简单的操作实现这些数据结构,下面就是用数组实现栈的示例代码。...在遍历数组的过程中,用集合每次保存当前值。假如集合中已经有了目标值减去当前值,则证明在之前的遍历中一定有一个数与当前值之和等于目标值。这种做法时间复杂度为 O(n),代码如下。...链表 本节我们一起来探讨用 Swift 如何实现链表以及链表相关的技巧。 基本概念 对于链表的概念,实在是基本概念太多,这里不做赘述。我们直接来实现链表节点。...则我们要返回 1->2->2 我们只要采用尾插法,遍历链表,将小于 x 值的节点接入新的链表即可。代码如下: func getLeftList(_ head: ListNode?...来看一道简单的面试题: 如何检测一个链表中是否有环? 答案是用两个指针同时访问链表,其中一个的速度是另一个的 2 倍,如果他们相等了,那么这个链表就有环了,这就是快行指针的实际使用。

    1.7K30

    【愚公系列】2023年11月 数据结构(五)-队列

    链表(Linked List):也是一种线性数据结构,它由一系列的节点组成,每个节点包含数据和指向下一个节点的引用。链表的特点是可以动态地插入或删除节点,但访问某个节点时需要从头开始遍历。...哈希表(Hash Table):也称为散列表,它是一种根据关键字直接访问数据的数据结构。哈希表通常由数组和散列函数组成,可以在常数时间内进行插入、删除和查找操作。...图(Graph):是一种由节点和边组成的非线性数据结构,它可以用来表示各种实体之间的关系,如社交网络、路线图和电路图等。图的遍历和最短路径算法是常见的图算法。...入队操作就是将元素插入到队列的尾部,而出队操作则是删除队列的第一个元素。实现队列可以使用数组或链表等不同的数据结构,一般用数组实现的队列称为顺序队列,用链表实现的队列称为链式队列。...2.队列常用操作C#中队列的常用操作包括:Enqueue(object obj):将一个元素添加到队列的末尾。Dequeue():将队列的第一个元素移除并返回该元素。

    24221
    领券