队列的实现(一)顺序队列的实现

队列:只能一端进行出栈一端进行进栈。

队首:只允许进行出栈操作,可以进行删除。

队尾:只允许进行入栈操作,可以进行插入。

队尾进,队尾出,先进先出。

所以队列的实现也有两种形式,一种是数组实现队列,一种是用链表实现队列。

首先是用数组来实现队列。

使用数组队列,因为在删除时front会越来越大,所以最后会出现一种还有空间但是却显示无空间的现象。

解决方法:

构建循环队列,算法为:

判断是否队满:(rear+1)%a.length==front  //如果相等的话则证明队列已满

rear=(rear+1)%a.length;       //创建循环

实现代码:

 1     public class Queue {  
 2         private static final int defaultSize = 10;  
 3         private Node[] a;  
 4         private int rear;  
 5         private int front;  
 6         Queue(){                //默认构造方法  
 7             a = new Node[10];  
 8             rear = 0;  
 9             front = 0;  
10         }  
11         Queue(int n){           //指定队列长度的构造方法  
12             a = new Node[n];  
13             rear = 0;  
14             front = 0;  
15         }  
16         public boolean add(Node node){          //在队尾增加队列节点  
17             if((rear+1) % a.length == front )       //检测该对列是否已经满了  
18                 return false;  
19             else{  
20                 a[rear] = node;  
21                 rear = (rear+1) % a.length;     //构建循环队列      
22                 return true;  
23             }     
24         }  
25         public Node remove(){                   //删除对首节点  
26             if(rear == front)  
27                 return null;  
28             else{  
29                 Node n = a[front];  
30                 front = (front+1) % a.length;  
31                 return n;  
32             }     
33         }  
34         public boolean isEmpty(){               //检测是否为空  
35             if(rear == front)  
36                 return true;  
37             else   
38                 return false;  
39         }  
40         public int size(){              //返回队列长度  
41             return a.length;  
42         }  
43     }  

 

posted @ 2016-06-13 16:51  清风雨下  阅读(1585)  评论(0编辑  收藏  举报