/**
* Introduction to Algorithms, Second Edition
* 10.1 Queues
* @author 土豆爸爸
*
*/
public class Queue {
int[] array;
int head; //队列头索引
int tail; //队列尾索引
public Queue(int size) {
array = new int[size];
}
/**
* 将元素x添加到队列。队列的尾索引加1。
* @param x 待添加的元素
*/
public void enqueue(int x) {
if(head == (tail + 1) % array.length) {
throw new RuntimeException("Over flow");
}
array[tail] = x;
//尾索引加1,并自动折转
tail = (tail + 1) % array.length;
}
/**
* 从队列从返回头元素。队列的头索引加1。
* @return 队列头元素
*/
public int dequeue() {
if(head == tail) {
throw new RuntimeException("Under flow");
}
int result = array[head];
//头索引加1,并自动折
head = (head + 1) % array.length;
return result;
}
}
import junit.framework.TestCase;
public class QueueTest extends TestCase {
public void testStack() {
Queue q = new Queue(10);
q.enqueue(1);
q.enqueue(2);
q.enqueue(3);
assertEquals(1, q.dequeue());
assertEquals(2, q.dequeue());
q.enqueue(4);
q.enqueue(5);
assertEquals(3, q.dequeue());
assertEquals(4, q.dequeue());
assertEquals(5, q.dequeue());
try{
q.dequeue();
fail("dequeue应抛出异常");
} catch(Exception e) {
assertTrue(e.getMessage().equals("Under flow"));
}
}
}
算法导论示例-Queue
最新推荐文章于 2024-06-25 21:20:38 发布
1321

被折叠的 条评论
为什么被折叠?



