Java数组实现循环队列,队尾指针为rear,队首指针为front,队尾入队,队首出队,数组空间循环利用。 9 R- X0 ]4 V+ R2 x# D6 e
view plaincopy to clipboardprint?0 j6 A3 s' R& W7 H! l& `
/**( m( G( P' |( y: Z$ S% F5 `, N# ]3 o
* QueueArray.java
* j, g' v1 d! ]( a */) m/ v o. a9 D$ H5 O% Y3 K0 I
package cn.edu.uibe.oop;3 D3 o `' Y4 x$ [
/**
# E) V" U6 Y2 A3 R1 C9 `4 ~ * 数组实现的循环队列
2 m' G) `% o2 O7 f2 W * @author TongQiang: J" J: R3 y$ f2 \
*/9 h! I' t" b" k1 i
public class QueueArray {0 Y" d% T9 w+ b W$ E9 F5 ~
Object[] a; //对象数组,队列最多存储a.length-1个对象
3 W. O( w" i) h# b int front; //队首下标1 |5 n( ]% s0 M. r) Y4 V* T
int rear; //队尾下标
3 x# n2 h# w+ i( H' j1 T, Y" d public QueueArray(){
' H( t, ^/ ?1 w. m) u+ K5 f/ p- } this(10); //调用其它构造方法! R1 \0 z3 u0 j# a
}
+ X+ o2 t8 z, }; h& ^ public QueueArray(int size){
* K: Y' ^" c8 |! P: u& n a = new Object[size];5 H0 A6 ]; _: u. p
front = 0;
, O5 b8 q: c+ Z- @9 V; Z, P7 A$ V. j rear =0;$ j* O2 H M' |# J O& ?+ o2 u4 I: U
}
! D; O2 m0 d) w! N /**3 S& K# ?2 c7 i! q5 Q8 z
* 将一个对象追加到队列尾部
, [! o& h- c2 }0 d, V' y2 x * @param obj 对象! k' S/ q. k K$ q
* @return 队列满时返回false,否则返回true
6 E& P' v8 j% q, k */, r4 t1 Q1 V; I
public boolean enqueue(Object obj){$ w+ G- V5 H0 N: e& I) {- U4 b; j
if((rear+1)%a.length==front){& c4 X+ X6 S5 E' w7 X k0 M/ A
return false; t5 _) H4 {" j
}: }3 p3 T1 K+ U2 m4 |% N& ~' K
a[rear]=obj;
) ^9 f' b0 Q7 {4 ?8 | rear = (rear+1)%a.length;, n: n% B5 ]6 E1 C8 ^# P9 U! L. D
return true;9 s F; i3 E0 L; L
}' p; w" K3 L: S$ ?- `4 p! t, U
/** z% x3 F3 N6 X0 c6 M$ @
* 队列头部的第一个对象出队2 ~/ l L. a) ]! M: a2 E
* @return 出队的对象,队列空时返回null: v4 F& y% ~ w( D. Y
*/2 E- {- k2 E0 T7 k; Y+ b
public Object dequeue(){
7 P8 K2 T9 [# S% a* i1 P. Z/ u if(rear==front){
# n# U1 n: [( Y3 `% ^ return null;
; i3 R& I4 b, c0 k; e }) p! h/ M& K1 V: n' K& L
Object obj = a[front];- B. w5 s( R) q+ D0 n. A5 J: Z% S
front = (front+1)%a.length;1 _! k9 `9 w t4 b" {" p6 F
return obj;
Z w T4 B5 d }& f6 _3 E3 e2 e' O( I' |4 h! q
public static void main(String[] args) {0 L6 R8 u7 W0 h4 w. C |
QueueArray q = new QueueArray(4);
" X0 u, V) {# A8 o System.out.println(q.enqueue(“张三”));
6 P* i; G' ?1 v0 `; D. \, ?; m System.out.println(q.enqueue(“李斯”));2 `- t1 o' k) g1 b/ F5 h# W! p
System.out.println(q.enqueue(“赵五”));
/ O T7 J' Q( ^0 _" _$ K" H System.out.println(q.enqueue(“王一”));//无法入队列,队列满! b2 x v% y& ?
for(int i=0;i |