队列
队列概述队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。队尾(rear)——允许插入的一端队头(front)——允许删除的一端队列特点:先进先出(FIFO)
队列的结构如下图所示:
线性表的操作主要包括:
(1)清空队列
(2)判断是否为空
(3)元素的个数
(4)入队列
(5)出队列
(6)取对头元素
接口由此,对队列的抽象数据类型定义Queue接口如下:
?存在问题设数组长度为M,则:
当front=0,rear=M时,再有元素入队发生溢出——真溢出 当front!=0,rear=M时,再有元素入队发生溢出——假溢出?解决方案队首固定,每次出队剩余元素向下移动——浪费时间循环队列?基本思想:把队列设想成环形,让sq[0]接在sq[M-1]之后,若rear+1==M,则令rear=0;
源代码设队首、队尾指针front和rear,front指向头结点,rear指向队尾
源代码package queue;public class Test {/** * 测试队列 * 测试结果:各项功能正确无误 * @param args */public static void main(String[] args) {//Queue queue = new LinkQueue();Queue queue = new ArrayQueue();for(int i=0; i<10; i++) {queue.push(i);}System.out.println(queue);Object obj1 = queue.deQueue();Object obj2 = queue.deQueue();System.out.println("count:" + queue.size() + " obj1:" + obj1 + " obj2:" + obj2);System.out.println(queue);System.out.println("peek:" + queue.peek());//System.out.println(test.toString());for(int i=0; i<12; i++) {queue.push(i+10);}}}结果[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ]
count:8 obj1:0 obj2:1
[2, 3, 4, 5, 6, 7, 8, 9, ]
peek:2

