gpt4 book ai didi

基于Java数组实现循环队列的两种方法小结

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 27 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章基于Java数组实现循环队列的两种方法小结由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

用java实现循环队列的方法:

1、添加一个属性size用来记录眼下的元素个数.

目的是当head=rear的时候。通过size=0还是size=数组长度。来区分队列为空,或者队列已满.

2、数组中仅仅存储数组大小-1个元素,保证rear转一圈之后不会和head相等。也就是队列满的时候。rear+1=head,中间刚好空一个元素.

当rear=head的时候。一定是队列空了.

队列(queue)两端同意操作的类型不一样:

能够进行删除的一端称为队头,这样的操作也叫出队dequeue; 。

能够进行插入的一端称为队尾,这样的操作也叫入队enqueue.

队列的示意图 。

基于Java数组实现循环队列的两种方法小结

实现队列时,要注意的是假溢出现象。如上图的最后一幅图.

如图所看到的的假溢出现象 。

基于Java数组实现循环队列的两种方法小结

解决的方法:使用链式存储,这显然能够。在顺序存储时。我们常见的解决的方法是把它首尾相接,构成循环队列。这能够充分利用队列的存储空间.

循环队列示意图:

基于Java数组实现循环队列的两种方法小结

在上图中。front指向队列中第一个元素。rear指向队列队尾的下一个位置.

但依旧存在一个问题:当front和rear指向同一个位置时,这代表的是队空还是队满呢?大家能够想象下这样的情景.

解决这种问题的常见做法是这种:

使用一标记,用以区分这样的易混淆的情形.

牺牲一个元素空间。当front和rear相等时,为空。当rear的下一个位置是front时。为满.

例如以下图:

基于Java数组实现循环队列的两种方法小结

以下我们给出循环队列,并採用另外一种方式,即牺牲一个元素空间来区分队空和队满的代码. 。

几个重点:

1、front指向队头。rear指向队尾的下一个位置.

2、队为空的推断:front==rear;队为满的推断:(rear+1)%maxsize==front.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import java.io.*;
   public class queuearray { 
   object[] a; //对象数组,队列最多存储a.length-1个对象 
   int front; //队首下标 
   int rear;  //队尾下标 
   public queuearray(){ 
     this ( 10 ); //调用其他构造方法 
  
   public queuearray( int size){ 
     a = new object[size]; 
     front = 0
     rear = 0
  
   /**
    * 将一个对象追加到队列尾部
    * @param obj 对象
    * @return 队列满时返回false,否则返回true
    */
   public boolean enqueue(object obj){ 
     if ((rear+ 1 )%a.length==front){ 
       return false
    
     a[rear]=obj; 
     rear = (rear+ 1 )%a.length; 
     return true
  
   /**
    * 队列头部的第一个对象出队
    * @return 出队的对象,队列空时返回null
    */
   public object dequeue(){ 
     if (rear==front){ 
       return null
    
     object obj = a[front]; 
     front = (front+ 1 )%a.length; 
     return obj; 
  
   public static void main(string[] args) { 
     queuearray q = new queuearray( 4 ); 
     system.out.println(q.enqueue( "张三" )); 
     system.out.println(q.enqueue( "李斯" )); 
     system.out.println(q.enqueue( "赵五" )); 
     system.out.println(q.enqueue( "王一" )); //无法入队列,队列满 
     for ( int i= 0 ;i< 4 ;i++){ 
       system.out.println(q.dequeue()); 
    
  
}

以上这篇基于java数组实现循环队列的两种方法小结就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我.

原文链接:https://www.cnblogs.com/yjbjingcha/p/7239085.html 。

最后此篇关于基于Java数组实现循环队列的两种方法小结的文章就讲到这里了,如果你想了解更多关于基于Java数组实现循环队列的两种方法小结的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com