Java数组实现循环队列,队尾指针为rear,队首指针为front,队尾入队,队首出队,数组空间循环利用。 $ g4 a4 H- R+ e3 Z: \
view plaincopy to clipboardprint?8 d* c( F- G. u Q8 l
/**. B( H& N& V9 \( J$ O4 G! A4 p& f7 z# q* ]
* QueueArray.java2 |1 W) Y' P# J' B* p0 v* B
*/ l6 s6 A' h; y0 e N; ]( O
package cn.edu.uibe.oop;
6 p7 Z: v9 i$ L/ i$ ^$ \, r- R /**
; K2 p3 ?/ `2 ^9 U/ l% T+ [4 h * 数组实现的循环队列2 c3 C6 b i6 |" n1 R
* @author TongQiang
6 W! y, a9 ?7 _' M0 O */- ]0 w9 S6 {; n3 j" H
public class QueueArray {- z2 q _ r2 q/ W8 _! A
Object[] a; //对象数组,队列最多存储a.length-1个对象
' _4 O8 j7 B( {! l8 x int front; //队首下标
$ K1 T. M7 F S! e; _3 g' p int rear; //队尾下标* j( z9 n. M8 o- w6 t. S
public QueueArray(){6 w+ o, a$ ]; I: l5 ]* b& ^+ N
this(10); //调用其它构造方法- L* D, j( S/ I5 f/ Z. z) [% |
}
( h: j p9 v4 K public QueueArray(int size){
# S5 F! v5 W- {: P: U5 M a = new Object[size];
, u2 |% L0 I- U front = 0;
2 i/ o2 h2 K# D h rear =0;
" s5 g* v3 n" h7 ~ }4 _* J: s% B e0 ~
/** ?$ Z% t5 b. e5 |1 e& R4 _" T' B
* 将一个对象追加到队列尾部
) b% t5 e8 o; x C# ~9 ~1 a% i* Z# ^ * @param obj 对象
6 t* ]0 @1 G% N: o+ u) u * @return 队列满时返回false,否则返回true
; ?( o ?; b( x0 t* q' a5 | */- F3 E: \" u/ L& y- Y
public boolean enqueue(Object obj){. X' H+ M2 `0 H1 m/ e
if((rear+1)%a.length==front){3 E: s1 e. ~" l T& r3 d
return false;. T1 _+ G5 t9 M) V6 d7 p
}
" {5 {% {( a: ^# Z1 R! u( v a[rear]=obj;2 i5 k" T) N: z& l
rear = (rear+1)%a.length;0 ?* P/ `# f4 { a- N; M% ^
return true;5 S9 l7 c) S& x2 ]/ ?2 f3 P
}
, ~% B: _4 A P- a /**8 ?% o$ A2 D1 H, X
* 队列头部的第一个对象出队+ c$ ^) |$ V! B: z; J
* @return 出队的对象,队列空时返回null( o. [" S: \4 [! H H- N$ j
*/
6 h% b- s E2 O9 @5 ~ public Object dequeue(){2 I5 S6 R3 X% {$ s
if(rear==front){
, V+ R% z, C% @( W a3 I( U return null;# _) ]" M) U9 f! k2 ?9 \, a
}
- o2 b1 r+ g2 X7 z0 k4 T E8 ?+ \( L Object obj = a[front];; W$ {) e) d2 e7 n/ g% J! H; `. h( K
front = (front+1)%a.length;
6 C! M! E5 S9 Y7 Y return obj;
/ a. P+ Z O' U5 w5 `' c0 \ }
& {8 w! N9 o) t% I public static void main(String[] args) {3 h. ]# w }+ {5 K ~# p
QueueArray q = new QueueArray(4);+ a( F2 G" E' C( _4 J
System.out.println(q.enqueue(“张三”));
& F b; Q8 i0 r9 } System.out.println(q.enqueue(“李斯”));9 Y, s# x! G: V/ C3 A& w
System.out.println(q.enqueue(“赵五”));
! |6 V' v i$ [$ K. n/ L System.out.println(q.enqueue(“王一”));//无法入队列,队列满( P2 b1 u( i/ ~- v
for(int i=0;i |