当前位置: 首页 > 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);}
}

 

相关文章:

  • [CPCTF 2025] Crypto
  • 西门子PLC S7-1200电动机软启动、软停止的控制实例
  • nvm for windows 安装低版本 node 丢失 npm 安装
  • Kubernetes Ingress 深度解析
  • Java @Transactional事物隔离级别和默认值详解
  • 【模型量化】量化基础
  • 如何禁止AutoCAD这类软件联网
  • DeepSeek-Prover-V2-671B:数学推理的大模型新力量
  • OpenCV 图形API(76)图像与通道拼接函数-----对输入图像进行归一化操作函数normalize()
  • 防止HTTPS页面通过<iframe>标签嵌入HTTP内容
  • 使用Kestrel Web 服务器部署.net6项目
  • 第四部分:赋予网页健壮的灵魂 —— TypeScript(中)
  • 高等数学-第七版-下册 选做记录 习题9-6
  • 【JavaEE】网络原理之初识(1.0)
  • PH热榜 | 2025-04-30
  • AI与无人零售:如何通过智能化技术提升消费者体验和运营效率?
  • 写劳动节前的 跨系统 文件传输
  • ArrayList的特点及应用场景
  • 【计算机视觉】图像分割:Segment Anything (SAM):通用图像分割的范式革命
  • 【Linux】Linux 系统中,定时任务(计划任务)
  • 摩天大楼天津117大厦复工背后:停工近十年,未知挑战和压力仍在
  • 首开股份:一季度净利润亏损约10.79亿元,签约金额63.9亿元
  • 奈雪的茶叫停“能喝奶茶就不要喝水”宣传,当地市监称不要误导消费者
  • 黄育奇当选福建惠安县人民政府县长
  • 屠呦呦当选美国国家科学院外籍院士
  • 住房和城乡建设部办公厅主任李晓龙已任部总工程师