首页
学习
活动
专区
工具
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

数据结构——队列

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

40310
  • 线性结构-队列

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

    17520

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

    通常来说,要实现循环双向链表,每个节点需要有两个链域:前驱和后继。现在问题是:如何设计一种环形表,使表每个结点只包含一个链域而又能够有效地对其进行两个方向查找。本文将给出一种实现方式。...我们可以把异或链域看成一把特殊锁,它有两把不同钥匙,钥匙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"); }      逆时针访问函数如下

    79751

    图及其应用

    =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;

    67720

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

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

    46920

    探秘JavaByteBuddy编写一个简单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.3K40

    编写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记录当前遍历这一层中位于队列之中节点数量

    46920

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

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

    18120

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

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

    27630

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

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

    1K20

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

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

    12910

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

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

    36520

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

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

    1.6K30

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

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

    23021

    数据结构之链表,使用链表实现栈以及使用链表实现队列

    所以对于链表来说,可以将链表头部当作栈顶,链表做为栈底层实现来实现一个栈。 创建一个栈接口,可以使用数组方式或者链表方式进行实现栈功能哦!...,此时,还是需要从head头部节点循环遍历,这样时间复杂度变成了O(n),所以,即使在链表尾部标记了tail,我们还是无法使用O(1)复杂度直接删除tail这个位置节点。...无参构造函数,和默认构造函数是一样。...不需要遍历队列所以元素 100 * 101 * @return 102 */ 103 @Override 104 public E dequeue() {...如下所示: 1 package com.queue; 2 3 import java.util.Random; 4 5 /** 6 * 7 */ 8 public class Main

    81030
    领券