算法通关村——构建队列问题解析

算法通关村第五关——青铜挑战笔记

前言

全文代码均以Java语言复现,主要为自己学习做记录,如有问题,还请各位大佬们指点指点。
这篇讲解线性表(队列)创建和基本操作。
基于链表的构建,直接在队尾添加一个节点,相当于单链表的尾插法。

队列的基础知识

  1. 特性:

    • 先进先出(FIFO): 队列中的元素按照它们进入队列的顺序被移除,最早进入的元素首先被移除。
    • 后进后出(LIFO): 与栈(Stack)不同,队列是先进先出的数据结构,不支持后进先出的操作。
  2. 队列的实现:
    队列可以用数组或链表来实现。常见的队列实现包括数组队列(Array Queue)、链表队列(Linked List Queue)以及优先级队列(Priority Queue)等。

  3. 基本操作:

  • enqueue:也称为入队操作,将元素添加到队列的末尾。
  • dequeue:也称为出队操作,从队列的头部移除并返回一个元素。
  • peek:查看队列的头部元素,但不进行出队操作。

队列实现

	public class LinkQueue {
    // 队头
   private Node front;
   //  队尾
   private Node rear;
   // 队列长度
   private int size;
   public LinkQueue(){
       // 初始化都在队首
       this.front = new Node(0);
       this.rear = new Node(0);
   }
   // 静态内部类
   // 更好的添加功能
   static class Node {
       public int data;
       public Node next;
       public Node(int data){
           this.data = data;
       }
   }

    /**
     * 入队
     * 使用到rear(Node)节点
     * @param value
     */
   public void push(int value){
       Node newNode = new Node(value);
       Node temp = front;
       while(temp.next!=null){
           temp=temp.next;
       }
       temp.next=newNode;
       // 移动rear指针到队尾
       rear = newNode;
       size++;
   }

    /**
     * 遍历队列
     */
   public void traverse(){
       Node temp = front.next;
       while(temp!=null){
           System.out.println(temp.data+"\n");
           temp=temp.next;
       }
   }

    /**
     * 出队
     * @return
     */
   public int pull(){
       // 判断有无队空
       if(front.next==null){
           System.out.println("队空");
           return -1;
       }
       Node temp = front.next;
       front.next=temp.next;
       size--;
       return temp.data;
   }
}

总结

  1. 其实本质就是单链表,只是增删改查的基本操作根据队列的FIFO的特性进行的
  2. 在Java中我们可以直接是用Queue类,节省自己独立封装的Queue类。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Brilliant.Louis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值