package test;
/**
* @author 作者 Marcospring:
* @version 创建时间:2012-7-24 上午10:18:46
* 队列
*/
public class Queue {
private int Q[];
private int front;
private int rear;
//初始化队列
public Queue(int size){
Q = new int[size];
front = -1;
rear = -1;
}
//队列是否为空
public boolean QueueEmpty(){
return front == rear;
}
//队列是否满了
public boolean QueueFull(){
return rear == Q.length-1;
}
//入队
public void EnQueue(int el){
if(QueueFull()){
System.out.print("队列满了!");
}else{
rear++;
Q[rear] = el;
}
}
//出队
public int DeQueue(){
if(QueueEmpty()){
System.out.print("队列为空!");
return 0;
}else{
front++;
int temp = Q[front];
//第一个元素出队后将后面的元素跟上。
for(int i=front;i<rear;i++){
Q[i]=Q[i+1];
}
//队尾用0补齐
Q[rear] = 0;
front = -1;
rear--;
return temp;
}
}
//获得队列头的元素,不改变队列状态
public int QueueFront(){
if(QueueEmpty()){
System.out.print("队列为空!");
return 0;
}else{
return Q[front+1];
}
}
//展示队列
public void DisplayQueue(){
if(QueueEmpty()){
System.out.println("队列为空!");
}else{
for(int i = front+1;i<=rear;i++){
System.out.print(Q[i]+",");
}
}
}
}
我觉得队列的难点在于front和rear的判断上,以及会出现一个假溢出的现象。
首先说front 和 rear 的定义,我的定义是front 一直指向队列的-1位置,也就是没有进入队列的起始位置。只有出队和取队列头一个元素的时候才向后移动;rear一直指向最后一个元素,当最后一个元素出队列的时候指向-1。
其次要说说假溢出现象,假如队列的大小是5,里面放的元素分别为A,B,C,D,E,现在front指向A,rear指向E。现在开始出队列,front会依次指向A,B,C,D,E,当指向E的时候,front=rear,也就是队列为空,但是这时候你再往队列里放元素的话就会出现数组越界的情况,但是这个队列明明是空的,怎么就越界了呢。这就是我认为的假溢出现象。
最后如何解决这个问题,我在出队列的方法是这样写的:
public int DeQueue(){
if(QueueEmpty()){
System.out.print("队列为空!");
return 0;
}else{
front++;
int temp = Q[front];
//第一个元素出队后将后面的元素跟上。
for(int i=front;i<rear;i++){
Q[i]=Q[i+1];
}
//队尾用0补齐
Q[rear] = 0;
front = -1;
rear--;
return temp;
}
}
先判断一下队列是否为空,如果不为空的情况下,front向后移动一次,取出第一个元素,然后后面的元素依次跟上,最后一位用0补齐,然后将front指向-1,rear跟进一位,指向最后一个元素。
分享到:
相关推荐
java队列实现(顺序队列、链式队列、循环队列)
java定时器、多线程(池)、java队列的demodemo,下载看看看吧
这是一个java队列实现的全部工程文件,包含了所有代码,具体的设计文档在上传的另外文件中。这个工程能够实现所有队列的操作,运行没有问题。设计的是在应用程序上的基于界面的队列操作的实现。
java 队列使用,次例子是一个模拟网络爬虫工作大致流程的小例子,里面没有具体的爬取的实现,只是对爬取的流程的模拟,使用到了java 的 ArrayBlockingQueue、ConcurrentHashMap、 这2个类和java 的 volatile 关键字...
队列实现,数据结构作业练习参考,Java实现,环境eclipes1.8
用java 队列 链表 栈不少老师大作业布置的就是这个,需要的同学就放心下载吧
NULL 博文链接:https://hoochiang.iteye.com/blog/1858476
java定时器+多线程(池)+java队列Demo
实现多线程队列抢购等功能源码,Java多线程总结之线程安全队列Queue
使用Java队列存储对象。 LinkedList创建队列。 offer()插入 poll()遍历并移除
java队列Java系列2021.pdf
下面小编就为大家分享一篇java队列实现方法(顺序队列,链式队列,循环队列),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
java实现队列执行任务,限制线程执行的个数
数据结构Java队列PPT学习教案.pptx
java多线程模拟队列实现排队叫号,多线程模拟排队叫号取号 java多线程模拟队列实现排队叫号,多线程模拟排队叫号取号
主要介绍了Java 队列实现原理及简单实现代码的相关资料,需要的朋友可以参考下
用java语言中的数组来实现队列,其中扩容方法为在原数组的基础上乘以2,另外也测试了用java中Vector类实现队列。
redis 案例。包含, 队列操作, socket通信, 以及 socket 和 redis 配合 redis 案例。包含, 队列操作, socket通信, 以及 socket 和 redis 配合
用Java实现一个队列
用LinkedList实现一个队列的所有操作: 入队\出队\求队列长度\判断队列是否为空\打印队列等