栈与队列之用java实现队列

简介: 栈与队列之用java实现队列

队列

介绍:

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。


队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素成为出队。因为队列只允许在一段插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出(FIFO-first in first out)线性表。


顺序队列中的溢出现象:


(1) "下溢"现象:当队列为空时,做出队运算产生的溢出现象。"下溢"是正常现象,常用作程序控制转移的条件。


(2)"真上溢"现象:当队列满时,做进栈运算产生空间溢出的现象。"真上溢"是一种出错状态,应设法避免。


(3)"假上溢"现象:由于入队和出队操作中,头尾指针只增加不减小,致使被删元素的空间永远无法重新利用。当队列中实际的元素个数远远小于向量空间的规模时,也可能由于尾指针已超越向量空间的上界而不能做入队操作。该现象称为"假上溢"现象。


用java代码实现:

package com.chenyu.zuo.stackAndQueue;
public class QueueQ<T> {
      public int max;//队列的长度
      public T[] array;//队列实体
      public int rear;//队尾指针
      public int front;// 队头指针
      public int nItems;//元素的个数
      public QueueQ(int size){
        this.max=size;
        array=(T[])new Object[max];
        front=0;
        rear=-1;
        nItems=0;
      }
      public void insert(T t){  //插入队尾
        if(rear==max-1){ //已经实际队尾,从头开始
          rear=-1;
        }
        array[++rear]=t;
        nItems++;
      }
      public T delete(){//删除队头
        T t=array[front++];
        if(front==max){//队列到尾了
          front=0;
        }
        nItems--;
      return t;
      }
      public T peek(){ //查看对头
        return array[front];
      }
      public boolean IsEmpty(){ //是否为空
        return nItems==0;
      }
      public boolean isFull(){  //是否满了
        return nItems==max;
      }
      public int size(){ //队列的大小
        return nItems;
      }
      public  void showAll(){//打印出所有
        while(!IsEmpty()){
          System.out.println(delete());
        }
      }
  public static void main(String[] args) {
        QueueQ theQueue = new QueueQ(5);   // 队列有5个元素
         theQueue.insert(10);             // 添加4个元素
         theQueue.insert(20);
         theQueue.insert(30);
         theQueue.insert(40);
         theQueue.delete();               // 移除3个元素
         theQueue.delete();               // (10, 20, 30)
         theQueue.delete();
         theQueue.insert(50);             // 添加4个元素
         theQueue.insert(60);           
         theQueue.insert(70);
         theQueue.insert(80);
         theQueue.showAll();
  }
}

结果:

40
    50
    60
    70
    80
相关文章
|
3月前
|
存储 算法 Java
惊!Java程序员必看:JVM调优揭秘,堆溢出、栈溢出如何巧妙化解?
【8月更文挑战第29天】在Java领域,JVM是代码运行的基础,但需适当调优以发挥最佳性能。本文探讨了JVM中常见的堆溢出和栈溢出问题及其解决方法。堆溢出发生在堆空间不足时,可通过增加堆空间、优化代码及释放对象解决;栈溢出则因递归调用过深或线程过多引起,调整栈大小、优化算法和使用线程池可有效应对。通过合理配置和调优JVM,可确保Java应用稳定高效运行。
139 4
|
19天前
|
存储 算法 Java
🧠Java零基础 - Java栈(Stack)详解
【10月更文挑战第17天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
12 2
|
1月前
|
存储 安全 Java
【用Java学习数据结构系列】探索栈和队列的无尽秘密
【用Java学习数据结构系列】探索栈和队列的无尽秘密
29 2
|
2月前
|
Java API 容器
JAVA并发编程系列(10)Condition条件队列-并发协作者
本文通过一线大厂面试真题,模拟消费者-生产者的场景,通过简洁的代码演示,帮助读者快速理解并复用。文章还详细解释了Condition与Object.wait()、notify()的区别,并探讨了Condition的核心原理及其实现机制。
|
1月前
|
存储 算法 Java
【用Java学习数据结构系列】用堆实现优先级队列
【用Java学习数据结构系列】用堆实现优先级队列
29 0
|
3月前
|
Java 索引
java中的栈(利用数组实现栈)
这篇文章通过Java代码示例介绍了如何使用数组实现栈操作,包括栈的初始化、入栈、出栈、判断栈满和空以及遍历栈的方法。
java中的栈(利用数组实现栈)
|
3月前
|
Java
java中的队列
这篇文章通过Java代码示例介绍了使用数组实现队列操作,包括队列的初始化、入队、出队、判断队列满和空以及遍历队列的方法。
java中的队列
|
4月前
|
Java 运维
开发与运维命令问题之使用jstack命令查看Java进程的线程栈如何解决
开发与运维命令问题之使用jstack命令查看Java进程的线程栈如何解决
65 2
|
4月前
|
存储 Java 对象存储
Java虚拟机(JVM)中的栈(Stack)和堆(Heap)
在Java虚拟机(JVM)中,栈(Stack)和堆(Heap)是存储数据的两个关键区域。它们在内存管理中扮演着非常重要的角色,但各自的用途和特点有所不同。
52 0
|
6天前
|
安全 Java 测试技术
Java并行流陷阱:为什么指定线程池可能是个坏主意
本文探讨了Java并行流的使用陷阱,尤其是指定线程池的问题。文章分析了并行流的设计思想,指出了指定线程池的弊端,并提供了使用CompletableFuture等替代方案。同时,介绍了Parallel Collector库在处理阻塞任务时的优势和特点。