队列详解及java实现

小说:棋牌游戏平台官方下载作者:侯密龙更新时间:2019-01-16字数:78280

“佩恩退吧,纲手的实力超出了我们的预料之外,虽然你还有几招超S的奥义,但是对你的身体伤害太大了,这么打下去会输的。”小南对着身边的长门说道,她的眼中满是震惊,女忍者之王的名头果然不是盖的。

巴适游戏下载安装

目光没有了平时的搞怪,戏谑,反而是带着一种少有的认真还有着一种奇特的情绪在其中,不是爱情,如果硬要说的话那就是感激之中带着友情之上却又夹杂着一些亲情的感情在其中。
“够了。”唐啸怒喝一声,一巴甩在了唐三脸上,这一次,唐三并没有闪躲,也没有运功相抗,硬生生的受了唐啸一掌。

许多人已经迫不及待地想看看邢板长什么样了,按二和叶迪的颜值看,想来无论是男孩还是女孩,将来都会成为一大祸患。

队列详解及java实现


导读

  栈和队列是有操作限制的线性表。

目录

1、队列的概念、特点、存储结构。

2、栈队列的java实现。

概念

  队列是一种在一端进行插入,而在另一端进行删除的线性表。
1、队列的插入端称为队尾;队列的删除端称为队头。(好比火车进隧道)
2、队列的插入操作称为入队(push),删除操作称为出队(pop)。

特点

  队列就像一列进入隧道的火车,隧道就是队列,火车车厢就是元素,进入隧道就是从隧道的这头(队尾)插入元素,出隧道就是从隧道的另一头(队头)删除元素。所以是“先进先出”的特点。

存储结构

  类似栈有顺序队和链式队两种。

java实现

  我们可以围绕栈的4个元素来实现队列:

2状态:是否队空;是否队满。

2操作:进队push;出队pop。

顺序队的实现

   顺序队列的实现也可以使用数组来完成,同栈的实现一样,只是栈是在同一端进行压栈和进栈操作,而队列是在一端做push,另一端做pop操作。

可以看一下下面的队列操作示意图:

 

   我们在实现顺序栈时使用头指针“front”和尾指针“rear”分别进行出队和入队操作,但普通的队列如上图所示,会发生“假溢出”现象,所以我们通常将数组弄成一个环状,即队头和队尾相连,这样就形成了“循环队列”,同时也解决了“假溢出”现象。循环队列是改进版的顺序队列。

  如图:

 

  对于普通队列的push或pop我们只需要对尾指针或头指针进行自增操作即可,但是循环队列我们就不能单纯的进行自增,当front或rear=maxSize-1时我们就不能进行自增操作了,比如一个队列尾长度为4的数组datas[4],那么当front或rear需要在0,1,2,3之间进行循环“推进”,以此达到循环队列的效果。所以我们可以使用rear = (rear+1)%maxSize ;front = (front+1)%maxSize ;公式进行指针计算。

  需要注意的是:队空状态的条件为:front = rear。而如果整个队列全部存满数据那么,队满的条件也是front = rear;所以循环队列需要损失一个存储空间,如下图:

 

 

  解决了这些问题我们就可以很轻松地实现循环队列了:

 

 1 package test;
 2 
 3 public class SqQueue<T>{
 4     private T[] datas;//使用数组作为队列的容器
 5     private int maxSize;//队列的容量
 6     private int front;//头指针
 7     private int rear;//尾指针
 8 
 9     //初始化队列
10     public SqQueue(int maxSize){
11         if(maxSize<1){
12             maxSize = 1;
13         }
14         this.maxSize = maxSize;
15         this.front = 0;
16         this.rear = 0;
17         this.datas = (T[])new Object[this.maxSize];
18     }
19 
20     //两个状态:队空&队满
21     public boolean isNull(){
22         if(this.front == this.rear)
23             return true;
24         else
25             return false;
26     }
27 
28     public boolean isFull(){
29         if((rear+1)%this.maxSize==front)
30             return true;
31         else
32             return false;
33     }
34 
35     //初始化队列
36     public void initQueue(){
37         this.front = 0;
38         this.front = 0;
39     }
40 
41     //两个操作:进队&出队
42     public boolean push(T data){
43         if(isFull())
44             return false;//队满则无法进队
45         else{
46             datas[rear] = data;//进队
47             rear = (rear+1) % maxSize;//队尾指针+1.
48             return true;
49         }
50     }
51     public T pop(){
52         if(isNull())
53             return null;//对空无法出队
54         else{
55             T popData = datas[front++];//出队
56             front = (front+1) % maxSize;//队头指针+1
57             return popData;
58         }
59     }
60 
61     //get()
62     public T[] getDatas() {
63         return datas;
64     }
65 
66     public int getMaxSize() {
67         return maxSize;
68     }
69 
70     public int getFront() {
71         return front;
72     }
73 
74     public int getRear() {
75         return rear;
76     }
77 }

 

  测试:

 1 package test;
 2 
 3 import org.j

当前文章:http://zxqss.com/content/2018-11/23/content_66622.html

发布时间:2019-01-16 00:47:34

波克城市元宝兑换话费 多游手游平台下载 打牌网棋牌免费下载 大地棋牌手机版下载安装 杰克棋牌官网个人中心 李逵旧版捕鱼现金版 2019棋牌评测 瓯乐棋牌官网

编辑:公平

我要说两句: (0人参与)

发布