js数据结构与算法——队列

<script>
        //创建一个队列
        function Queue(){
            let items = [];
            //向队尾添加一个新的项
            this.enqueue = function(element){
                items.push(element)
            }

            //移除队列第一个项,并返回被移除的元素 dequeue
            this.dequeue = function(){
                return items.shift();
            }

            this.front = function(){
                return items[0];
            }

            this.isEmpty = function(){
                return items.length === 0;
            }

            this.size = function(){
                return items.length;
            }
        }

        //使用
        // var queue = new Queue();

        //循环队列
        //游戏击鼓传花
        function flowersGama(nameList,number){
            var queue = new Queue();
            for(let i=0;i<nameList.length;i++){
                queue.enqueue(nameList[i]);
            }
            var failers = '';
            while(queue.size()>1){
                for(let i=0;i<number;i++){
                    queue.enqueue(queue.dequeue());
                }
                failers = queue.dequeue();
                console.log(failers + '被淘汰了');
            }
            return queue.dequeue();
        }
        var names = ['John','Jack','Camila','Ingrid','Carl'];
        var winner = flowersGama(names, 7);
        console.log('胜利者:' + winner); 

        //优先队列

        function PriorityQueue(){
            let items = [];

            function QueueElement(element,priority){
                this.element = element;
                this.priority = priority;
            }
            //优先队列插入
            this.enqueue = function(element,priority){
                var queueElement = new QueueElement(element,priority);
                if(this.isEmpty()){
                    items.push(queueElement);
                }else{
                    var added = false;
                    for(let i=0;i<items.length;i++){
                        if(queueElement.priority<items[i].priority){
                            items.splice(i,0,queueElement);
                            added = true;
                            break;
                        }
                    }
                    if(!added){
                        items.push(queueElement);
                    }
                }
            }
            
            this.isEmpty = function(){
                return items.length === 0;
            }

            this.print = function(){
                console.log(items)
            }
        }
        var priorityQueue = new PriorityQueue();
        priorityQueue.enqueue("John", 2);
        priorityQueue.enqueue("Jack", 1);
        priorityQueue.enqueue("Camila", 1);
        priorityQueue.print(); 
    </script>

 

posted @ 2019-02-21 21:02  面包_girl  阅读(185)  评论(0编辑  收藏  举报
/* 鼠标点击文字特效 */