java - 队列 - 和栈的比较

 

1.1 队列Queue

进行插入操作的一端称为队尾(Tail/Rear) 出队列:进行删除操作的一端称为队头 (Head/Front)。

先进先出

1.2基本操作

boolean offer(E e) 入队列

E poll()  出队列

peek() 获取队头元素

int size() 有效长度

boolean isEmpty() 判断是否为空

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

public static void main(String[] args) {
 Queue<Integer> q = new LinkedList<>();
 q.offer(1);
 q.offer(2);
 q.offer(3);
 q.offer(4);
 q.offer(5); // 从队尾入队列
 System.out.println(q.size());
 System.out.println(q.peek()); // 获取队头元素
q.poll();
 System.out.println(q.poll()); // 从队头出队列,并将删除的元素返回
 
 if(q.isEmpty()){
 System.out.println("队列空");
 }else{
 System.out.println(q.size());
 }
}

1.3队列的存储结构

(1)顺序存储结构

public class MyQueue<E> {
  public static class Node<E>{
   private E value;
   private Node<E> next;

   public Node(E val){
    value = val;
    next = null;
   }
 }
   Node<E> front; // 标记队头
   Node<E> back; // 标记队尾
   int size;

//入队列
public boolean offer(E e){
  Node<E> node = new Node<>(e);
  if(null == front){
     front = node;
  }else{
     back.next = node;
  }
  back = node;
  size++;
  return true;
 }

//出队列
public E poll(){
 if(0 == size){
     throw new RuntimeException("队列为空,无法出队列");
 }
  Node<E> delNode = front;
  front = front.next;
 if(null == front){
  back = null;
 }
   size--;
   return delNode.value;
 }

//获取首队列元素
   public E peek(){
   if(0 == size){
   throw new RuntimeException("队列为空,无法获取队头元素");
 }
 return front.value;
 }

//判断是否为空
 public boolean isEmpty(){
 return 0 == size;
 }

//长度
 public int size(){
 return size;
}
}

(2)循环队列

头尾相连的顺序存储结构即为循环队列

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值