zoukankan      html  css  js  c++  java
  • 数据结构——队列

    队列(Queue)是只允许在一端进行插入,而在另一端进行删除的运算受限的线性表。 
    (1)允许删除的一端称为队头(Front)。 
    (2)允许插入的一端称为队尾(Rear)。 
    (3)当队列中没有元素时称为空队列。 
    (4)队列亦称作先进先出(First In First Out)的线性表,简称为FIFO表。 
       在Java编程中,Queue的实现都是用LinkedList

    顺序队列

    package com.demo.quee;
    
    public class SeqQuee {
    
    
        private int top;
        private int rear;
        private int capacity = 10;
        private int[] array;
        private int size;
        
        public SeqQuee(int capacity){
            top = rear = 0;
            array = new int[capacity];
        }
        
        public SeqQuee(){
            array = new int[this.capacity];
        }
        
        public int size(){
            return size;
        }
        
        public boolean isEmpty(){
            return this.top == -1;
        }
        
        public void push(int data){
            if(array.length == size){
                addCapacity(size*2);
            }
            array[++rear] = data;
            size++;
        }
        
        public int pop(){
            if(isEmpty()){
                return -1;
            }
            size--;
            array[top] = (Integer) null;
            return array[top--];
        }
        
        public void addCapacity(int capacity){
            if(capacity < size){
                return;
            }
            int[] old = array;
            array = new int[capacity];
            for(int i=0; i<size; i++){
                array[i] = old[i];
            }
        }
    
    }

    链式队列

    package com.demo.quee;
    
    import com.demo.node.Node;
    
    public class LinkedQuee {
    
    
        private Node top;
        private Node rear;
        private int size;
        
        public LinkedQuee(){
            this.top = null;
        }
        
        public int size(){
            return this.size;
        }
        
        public void push(int data) throws Exception{
            if(this.top == null){
                this.top = new Node(data);
            }else{
                Node p = new Node(data,this.top);
                rear.next = p;
                rear = p;
            }
            size++;
        }
        
        public int pop(){
            Node p = top.next;
            int data = p.data;
            top.next = p.next;
            p = null;
            size--;
            return data;
        }
    
    }
  • 相关阅读:
    Poj 2406--Power Strings(KMP)
    杭电2682--Tree(Prim)
    杭电1827--Summer Holiday(SCC + 缩点)
    杭电2181--哈密顿绕行世界问题(Dfs)
    杭电1269--迷宫城堡(强连通分量)
    南阳21--三个水杯(Bfs)
    杭电1203--I NEED A OFFER!(01背包)
    e.send和next(e)的区别
    python中yield与return的用法与区别
    迭代器
  • 原文地址:https://www.cnblogs.com/zyxiaohuihui/p/8445411.html
Copyright © 2011-2022 走看看