首页 > 其他分享 >用双链表实现双端队列

用双链表实现双端队列

时间:2023-04-17 23:02:52浏览次数:35  
标签:Node head cur 队列 双端 tail 双链 null public

//双链表
public static class Node<V>{
    public V value;
    public Node<V> last;
    public Node<V> next;

    public Node(V v){
        value = v;
        last = null;
        next = null;
    }
}
//双端队列 前后皆可进出
public static class MyDeque<V>{
    private Node<V> head;
    private Node<V> tail;
    private int size;

    public MyDeque(){
        head = null;
        tail = null;
        size = 0;
    }

    public boolean isEmpty(){
        return size == 0;
    }

    public int size(){
        return size;
    }
	//从头进
    public void pushHead(V value){
        Node<V> cur = new Node<>(value);
        if (head == null){
            head = cur;
            tail = cur;
        }else{
            cur.next = head;
            head.last = cur;
            head = cur;
        }
        size++;
    }
	//从尾进
    public void pushTail(V value){
        Node<V> cur = new Node<>(value);
        if (head == null){
            head = cur;
            tail = cur;
        }else{
            tail.next = cur;
            cur.last = tail;
            tail = cur;
        }
        size++;
    }
	//从头出
    public V pollHead(){
        V ans = null;
        if (head == null)
            return null;
        size--;
        ans = head.value;
        if (head == tail){
            head = null;
            tail = null;
        }else{
            head = head.next;
            head.last = null;
        }
        return ans;
    }
	//从尾出
    public V pollTail(){
        V ans = null;
        if (head == null)
            return null;
        size--;
        ans = tail.value;
        if (head == tail){
            head = null;
            tail = null;
        }else{
            tail = tail.last;
            tail.next = null;
        }
        return ans;
    }
	//从头查
    public V peekHead(){
        if (head != null)
            return head.value;
        else
            return null;
    }
	//从尾查
    public V peekTail(){
        if (head != null)
            return tail.value;
        else
            return null;
    }
}

标签:Node,head,cur,队列,双端,tail,双链,null,public
From: https://blog.51cto.com/u_5774355/6196397

相关文章

  • 2.-4-17--栈与队列--插松枝
     人造松枝加工场的工人需要将各种尺寸的塑料松针插到松枝干上,做成大大小小的松枝。他们的工作流程(并不)是这样的:每人手边有一只小盒子,初始状态为空。每人面前有用不完的松枝干和一个推送器,每次推送一片随机型号的松针片。工人首先捡起一根空的松枝干,从小盒子里摸出最上面的......
  • 225 队列实现stack
         解决方法简单粗暴,把队列前面的都取出来再加入队尾,让之前的队尾元素排到队头,这样就可以取出了: importqueueclassMyStack:def__init__(self):self.q=queue.Queue()self.top_element=0defpush(self,x:int)->None:......
  • 单双链表
    单链表定义//单链表publicstaticclassNode{publicintvalue;publicNodenext;publicNode(intdata){value=data;}}单链表反转新增1、2、3三个节点publicstaticNodereverseLinkedList(Nodehead){Nodepre=null;Nodenext=......
  • 操作系统试验-进程间通信:借鉴生产者-消费者示例程序,利用FIFO或消息队列实现操作系统中
    实验名称操作系统试验-进程间通信实验目的借鉴生产者-消费者示例程序,利用FIFO或消息队列实现操作系统中的经典生产者-消费者问题,要求:1、仓库有26个存储单元;2、具有两个以上的生产者与消费者;3、生产者和消费者以随机的方式对仓库进行访问;4、在任意时刻,仓库里面只有一个进程;5、仓库满......
  • 消息队列常见的使用场景
    消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题实现高性能,高可用,可伸缩和最终一致性架构。最全面的Java面试网站使用较多的消息队列有RocketMQ,RabbitMQ,Kafka,ZeroMQ,MetaMQ以下介绍消息队列在实际应用中常用的使用场景。异步处理,应用解耦,流量......
  • 多重背包单调队列
    考虑思考完全背包问题的过程。完全背包其实是一个前缀最值的过程。而完全背包就是滑动窗口问题。可以把余数相同的归为一类,然后就可以直接单调队列了,队长\(s\)。#include<cstdio>#definemax(x,y)((x)>(y)?(x):(y))constintN=20001;intn,m,f[N],g[N],q[N];intmain(){......
  • 栈和队列经典题题解
    目录......
  • JUC之阻塞队列BlockingQueue的实现原理
    1.阻塞队列首先它是一个队列,是队列就会遵循先进先出(FIFO)的原则,又因为它是阻塞的,故与普通的队列有两点区别:A.当一个线程向队列里面添加数据时,如果队列是满的,那么将阻塞该线程,暂停添加数据。B.当一个线程从队列里面取出数据时,如果队列是空的,那么将阻塞该线程,暂停取出数据。2......
  • 栈和队列的基本操作
     目录一.栈和队列的概念......
  • 华电软工非全研究生室内定位研究-室内定位物联网平台中的时序数据库和mq队列他们的作
    时序数据库(TimeSeriesDatabase,TSDB)是一种专门用于存储和处理时间序列数据的数据库系统。在室内定位物联网平台中,时序数据库通常用于存储传感器采集的数据,如定位节点的位置、传感器数据等。时序数据库具有以下优点:优点:快速插入和查询时序数据,适用于海量数据存储和实时数据分析;......