/** * 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
最新推荐文章于 2022-10-03 11:51:04 发布