数据结构【三】-队列Queue 1

一.简介


    1)队列也是一种线性结构
    2)相比数组,队列对应的操作是数组的子集
    3)只能从一端(队尾)添加元素,从另一端(队首)取出元素
        排队从队尾进入,等办完业务之后,1先出,也就是队首先出。
                                        队尾
                                    │      │
                                    │ 4    │
                                    │ 3    │
                                    │ 2    │
                                    │ 1    │
                                        队首
                                    柜台
    4)队列是一种先进先出的数据结构。First In First Out(FIFO)        


二.队列的实现 Queue<E>


    1)void enqueue(E) //相当于push
    2)E  dequeue() //相当于pop
    3)E getFront() //查看队首元素,相当于peek
    4)int getSize()
    5)boolean isEmpty()


三.实现思想


    实现Interface Queue<E> 用一个数组ArrayQueue<E>


---接口类

 public interface Queue<E> {
        void enQueue(E e);
        E deQueue();
        E getFront();
        int getSize();
        boolean isEmpty();
    }


  
---实现类


    public class ArrayQueue<E> implements Queue<E>{
        private ArrayDemo<E> array;
        public ArrayQueue(){
            array = new ArrayDemo();
        }    
        public ArrayQueue(int capacity){
            array = new ArrayDemo(capacity);
        }
        @Override
        public void enQueue(E e) {
            array.addLast(e);    
        }
        @Override
        public E deQueue() {    
            return array.removeLast();
        }
        @Override
        public E getFront() {
            return array.getFirst();
        }
        @Override
        public int getSize() {    
            return array.getSize();
        }
        @Override
        public boolean isEmpty() {
            return array.isEmpty();
        }    
        public int getCapacity(){
            return array.getCapacity();
        }
        @Override
        public String toString(){
            StringBuilder res = new StringBuilder();
            res.append("ArrayQueue:");
            res.append("Front[ ");
            for(int i=0;i< getSize(); i++){
                res.append(array.get(i));
                if(i!=getSize()-1){
                    res.append(", ");
                }
            }
            res.append(" ] tail");
            return res.toString();
        }
    }


---测试类

    public class ArrayQueueTest {
        public static void main(String[] args) {
            ArrayQueue<Integer> arrayQueue = new ArrayQueue<Integer>();
            for(int i=0;i<10;i++){
                arrayQueue.enQueue(i);
                if(i%3 ==2){
                    arrayQueue.deQueue();
                }
            }
            //ArrayQueue:Front[ 0, 1, 3, 4, 6, 7, 9 ] tail
        }
    }


三.数组队列的时间复杂度分析


    1)void enqueue(E)         O(1) 均摊--在最后一个添加    
    2)E  dequeue()            O(n) --删除队首的元素
    3)E getFront()            O(1)
    4)int getSize()            O(1)
    5)boolean isEmpty()        O(1)

以上所有内容都是通过"慕课网"听"liuyubobobo"的《玩转数据结构》课程后总结

猜你喜欢

转载自blog.csdn.net/sunshine77_/article/details/87925712