首页 > 其他分享 >数据结构(九)——队列(Queue)(上)

数据结构(九)——队列(Queue)(上)

时间:2024-09-17 13:51:05浏览次数:10  
标签:queue head val offer 队列 Queue int 数据结构 public

一、概念

队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(FirstIn First Out) 入队列:进行插入操作的一端称为队尾(Tail/Rear) 出队列:进行删除操作的一端称为队头(Head/Front)

二、 队列的使用

在Java中,Queue是个接口,底层是通过链表实现的。

(一)常用方法

  1.入队
public class TestDemo1 {
    public static void main(String[] args) {
        Queue<Integer> queue = new LinkedList<>();
        queue.offer(1);
        queue.offer(2);
        queue.offer(3);
        queue.offer(4);
        System.out.println(queue);
    }
}

2.出队
public class TestDemo1 {
    public static void main(String[] args) {
        Queue<Integer> queue = new LinkedList<>();
        queue.offer(1);
        queue.offer(2);
        queue.offer(3);
        queue.offer(4);
        System.out.println(queue);
        queue.poll();
        queue.poll();
        System.out.println(queue);
    }
}

结果剩下  [3,4]

3、获取队头元素
public class TestDemo1 {
    public static void main(String[] args) {
        Queue<Integer> queue = new LinkedList<>();
        queue.offer(1);
        queue.offer(2);
        queue.offer(3);
        queue.offer(4);
        int s = queue.peek();//获取队头元素但是不删除
        System.out.println(s);
    }
}

运行结果为 1

4、判断队列是否为空
public class TestDemo1 {
    public static void main(String[] args) {
        Queue<Integer> queue = new LinkedList<>();
        queue.offer(1);
        queue.offer(2);
        queue.offer(3);
        queue.offer(4);
        boolean b1 = queue.isEmpty();
        System.out.println(b1);
    }
}

结果为:false

5、获取队列中有效元素的个数
public class TestDemo1 {
    public static void main(String[] args) {
        Queue<Integer> queue = new LinkedList<>();
        queue.offer(1);
        queue.offer(2);
        queue.offer(3);
        queue.offer(4);
        System.out.println(queue.size());
    }
}

结果为:4

四、队列的模拟实现

public class MyQueue {
    static class ListNode {
        public int val;
        public ListNode next;
 
        public ListNode(int val) {
            this.val = val;
        }
    }
 
    public ListNode head;
    public ListNode tail;
    public int usedSize;
 
 
    public void offer(int val) {
        ListNode node = new ListNode(val);
        if (head == null) {
            head = node;
            tail = node;
        } else {
            tail.next = node;
            tail = tail.next;
        }
        usedSize++;
    }
 
 
    public int poll() {
        if (empty()) {
            return -1;
        }
        int ret = head.val;
        head = head.next;
        if (head == null) {
            tail = null;
        }
        usedSize--;
        return ret;
    }
 
    public int peek() {
        if (empty()) {
            return -1;
        }
        return head.val;
    }
 
    public boolean empty() {
        return usedSize==0;
    }
 
    public int getUsedSize() {
        return usedSize;
    }
}

标签:queue,head,val,offer,队列,Queue,int,数据结构,public
From: https://blog.csdn.net/weixin_72703349/article/details/142305523

相关文章

  • 【数据结构】堆
    二叉树的顺序结构普通的二叉树是不适合用数组来存储的,因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结构存储。现实中我们通常把堆(一种二叉树)使用顺序结构的数组来存储,需要注意的是这里的堆和操作系统虚拟进程地址空间中的堆是两回事,一个是数据结构,一个是......
  • 数据结构-树和二叉树
      树和二叉树 1.树的概念   树tree     是n(n>=0)个节点的有限集    在任意的一个非空树中       (1)有且仅有一个特定的被称为根(root)的节点       (2)当n>1时,其余的节点可分为m(m>0)个互不相交的有限......
  • Leetcode—815. 公交路线【困难】(unordered_map+queue)
    2024每日刷题(163)Leetcode—815.公交路线bfs实现代码classSolution{public:intnumBusesToDestination(vector<vector<int>>&routes,intsource,inttarget){if(source==target){return0;}unordered_map<......
  • C#数据结构与算法实战入门指南
    前言在编程领域,数据结构与算法是构建高效、可靠和可扩展软件系统的基石。它们对于提升程序性能、优化资源利用以及解决复杂问题具有至关重要的作用。今天大姚分享一些非常不错的C#数据结构与算法实战教程,希望可以帮助到有需要的小伙伴。C#经典十大排序算法主要讲解C#经典......
  • 数据结构与算法(四)线性表的抽象数据类型描述
    一、回顾    上一篇我们讲到了线性表的定义,讲到了所谓抽象数据类型就是把数据类型和操作捆版在一起。那么我们接下来分析一下,线性表应该有什么样的相关操作呢?。    从一个例子来看一看,回到我们上一篇开学参加升旗仪式的例子:    老师把同学们按照规......
  • 7、队列
    1、链队#include<stdio.h>#include<malloc.h>#include<assert.h>#defineElemTypeinttypedefstructQueueNode{ElemTypedata;structQueueNode*next;}QueueNode;typedefstructLinkQueue{QueueNode*front;//队头QueueNode......
  • Java-数据结构-二叉树-习题(二) (´▽`)ノ
    文本目录:❄️一、习题一(分层遍历):   ▶ 思路:    ▶代码:❄️二、习题二(二叉树的最近公共祖先):    ▶ 思路: ▶代码: ❄️三、习题三(从前序和中序遍历序列中构造二叉树):     ▶ 思路:  ▶代码:❄️四、习题四(从中序和后序遍历序列中构造二......
  • 【C++】queue和priority_queue
    个人主页~queue和priority_queue一、queue的介绍和使用1、queue的介绍2、queue的使用3、queue的模拟实现二、priority_queue的介绍和使用1、priority_queue的介绍2、priority_queue的使用3、priority_queue的模拟实现三、仿函数1、仿函数的特征2、仿函数的使用ex、......
  • C++数据结构-二叉树的三种遍历方法(进阶篇)
    1.遍历简介:树作为非线性数据结构,在我们取出数据时就需要设计遍历,所谓遍历,就是按照一定的规则性,将数据结构中的所有数据全部依次访问,而二叉树本身并不具有天然的全局次序,故为实现遍历,需通过在各节点与其孩子之间约定某种局部次序,间接地定义某种全局次序,这便是我们常规定的先序......
  • C++数据结构-二叉树的存储方法(基础篇)
    1.简介根据前文的介绍,我们知道了二叉树的性值,其就是一种每一个结点中只允许拥有左右孩子(或为空)的树,这种数据结构在我们的实际设计中非常常用,如前文提到的STL中的set集合,其底层就是一颗标准的红黑树(二叉树的一种),我们这里以创建一颗二叉树并实现通过特定的插入顺序和读取顺序达......