当前位置: 首页 > news >正文

Java写数据结构:队列

1.概念:

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

 2.队列的方法:

接下来模拟实现上述方法:

 双向链表实现:

先创建最基本的成员变量和构造方法,内部类

public class MyQueue {//内部类static class ListNode{public int val;public ListNode prev;public ListNode next;public ListNode(int val) {this.val = val;}}public ListNode first;public ListNode last;public int useSize;}

实现offer方法

 public void offer(int val){ListNode node = new ListNode(val);if(isEmpty()) {first = last = node;}else{last.next = node;node.prev = last;last = last.next;}useSize++;}
public boolean isEmpty(){return useSize == 0;}

实现poll方法

public int poll(){if(isEmpty()){return -1;}else {int val = first.val;first = first.next;if(first != null){first.prev = null;}useSize--;return val;}}
public boolean isEmpty(){return useSize == 0;}

实现peek方法

public int peek(){if(isEmpty()){return -1;}else {int val = first.val;return val;}}public boolean isEmpty(){return useSize == 0;}

测试:

public class Test {//MyQueuepublic static void main(String[] args) {MyQueue myQueue = new MyQueue();myQueue.offer(1);myQueue.offer(2);myQueue.offer(3);myQueue.offer(4);System.out.println(myQueue.useSize);System.out.println(myQueue.peek());System.out.println(myQueue.poll());System.out.println(myQueue.peek());System.out.println(myQueue.useSize);}
}

用循环数组实现队列:

 

 先创建最基本的成员变量和构造方法

public class MyCircleQueue {public int front;public int rear;public int[] elem;public MyCircleQueue(int k) {elem = new int[k + 1];}
}

实现入队方法 

 public boolean enQueue(int val){if(isFull()){return false;}else {elem[rear] = val;rear = (rear + 1) % elem.length;return true;}}
public boolean isFull(){return front == (rear + 1) % elem.length;}

实现出队方法

public boolean deQueue(){if(isEmpty()){return false;}else {front = (front + 1) % elem.length;return true;}
}
public boolean isEmpty(){return front == rear;}

获得队头元素

//获得队列的头元素public int Front(){if(isEmpty()){return -1;}else{return elem[front];}}public boolean isEmpty(){return front == rear;}

测试:

public class Test {
//循环数组实现队列public static void main(String[] args) {MyCircleQueue myCircleQueue = new MyCircleQueue(10);myCircleQueue.enQueue(1);myCircleQueue.enQueue(2);myCircleQueue.enQueue(3);myCircleQueue.enQueue(4);System.out.println(myCircleQueue.Front());System.out.println(myCircleQueue.deQueue());System.out.println(myCircleQueue.Front());System.out.println(myCircleQueue.rear);}
}

 

http://www.xdnf.cn/news/224623.html

相关文章:

  • 基于大模型的膀胱肿瘤全周期诊疗方案研究报告
  • 【KWDB 创作者计划】_KWDB能帮我的项目解决什么问题
  • Golang - 实现文件管理服务器
  • scGPT方法解读
  • 突发-2小时前DeepSeek发布了新模型-不是R2
  • 中小企业如何借助智能海关系统降低跨境运输成本?
  • day006-实战练习题-参考答案
  • 基于 IAR Embedded Workbench 的自研 MCU 芯片软件函数与变量内存布局优化精控方法
  • LeetCode 2905 找出满足差值条件的下标II 题解
  • AI驱动的决策智能系统(AIDP)和自然语言交互式分析
  • ArcGIS+GPT:多领域地理分析与决策新方案
  • 第十一节:Shell脚本编程
  • 软件架构选型之“如何选”
  • Walrus 与 Pudgy Penguins 达成合作,为 Web3 头部 IP 引入去中心化存储
  • 米壳AI:跨境电商图片翻译的“隐形革命”:当AI技术遇上全球化生意
  • Azure Monitor 实战指南:全方位监控应用与基础设施
  • 零基础学指针2
  • 蓝桥杯赛后总结
  • Transformer:颠覆深度学习的架构革命与技术演进
  • HTTP/HTTPS
  • shell(5)
  • 2025年真实面试问题汇总(一)
  • MCP协议:自然语言与结构化数据的双向桥梁 ——基于JSON-RPC 2.0的标准化实践
  • 备战2025年全国信息素养大赛图形化挑战赛——判断闰年和平年
  • iOS RunLoop 深入解析
  • Linux:network: mtu: 隐形知识frag_max_size
  • webpack5启动项目报错:process is not defined
  • CSS常用属性_(进阶)
  • 理解数据库存储以及查询(集合)
  • 强化学习_Paper_2017_Curiosity-driven Exploration by Self-supervised Prediction