zoukankan      html  css  js  c++  java
  • 数据结构-队列<Typescript>

    队列

    什么是队列

    队列是一种列表,不同的是队列只能在队尾插入元素,在队首删除元素。队列用于存储按顺序排列的数据,先进先出,这点和栈不一样,在栈中,
    最后入栈的元素反而被优先处理。可以将队列想象成在银行前排队的人群,排在最前面的人第一个办理业务,新来的人只能在后面排队,直到轮到
    他们为止。队列是一种先进先出(First-In-First-Out,FIFO)的数据结构。

    队列的实现

    队列的两种主要操作是:向队列中插入新元素和删除队列中的元素。插入操作也叫做入队enqueue(),删除操作也叫做出队dequeue()。入队操作在队尾插入新元素,
    出队操作删除队头的元素。队列的另外一项重要操作是读取队头的元素。这个操作叫做 front()。该操作返回队头元素,但不把它从队列中删除。
    除了读取队头元素,我们还想知道队列中存储了多少元素,可以使用 size()满足该需求;要想清空队列中的所有元素,可以使用 clear() 方法来实
    现,isEmpty()方法来判断队列是否为空。

    class Queue<T>{
        private items:Array<T> = [];
        //向队列添加元素
        public enqueue(element:T):void{
            this.items.push(element);
        }
        //从队列移除元素
        public dequeue():T{
            return this.items.shift();
        }
        //返回队列的第一个元素
        public front():T{
            return this.items[0];
        }
        //判断队列是否为空
        public isEmpty():boolean{
            return this.items.length == 0;
        }
        //返回队列长度
        public size():number{
            return this.items.length;
        }
        //清空队列
        public clear():void{
            this.items = [];
        }
        //打印队列元素
        public print():void{
            console.log("队列元素:",this.items.toString() + "--队列元素数量",this.items.length);
        }
    }
    let q:Queue<string> = new Queue<string>();
    q.enqueue("射雕英雄传");
    q.enqueue("神雕侠侣");
    q.enqueue("倚天屠龙记");
    q.print();//队列元素: 射雕英雄传,神雕侠侣,倚天屠龙记--队列元素数量 3
    q.dequeue();
    q.print();//队列元素: 神雕侠侣,倚天屠龙记--队列元素数量 2
    q.clear();
    q.print();//队列元素: --队列元素数量 0

    优先队列

    普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (first in, largest out)的行为特征

    class PriorityQueue<T>{
        private items:Array<{element:T,priority:number}> = [];
        //向队列添加元素
        public enqueue(data:{element:T,priority:number}):void{
            let isAdd:boolean = false;
            for(let i:number = 0; i < this.items.length; i++){
                if(data.priority < this.items[i].priority){
                    this.items.splice(i,0,data);
                    isAdd true;
                    break;
                }
            }
            if(!isAdd){
                this.items.push(data);
            }
        }
        //从队列移除元素
        public dequeue():{element:T,priority:number}{
            return this.items.shift();
        }
        //返回队列的第一个元素
        public front():{element:T,priority:number}{
            return this.items[0];
        }
        //判断队列是否为空
        public isEmpty():boolean{
            return this.items.length == 0;
        }
        //返回队列长度
        public size():number{
            return this.items.length;
        }
        //清空队列
        public clear():void{
            this.items = [];
        }
        //打印队列元素
        public print():void{
            this.items.forEach(function (item) {
                console.log(`${item.element} - ${item.priority}`);
            });
        }
    }
    let priorityQueue:PriorityQueue<string> = new PriorityQueue<string>();
    priorityQueue.enqueue({element:"yoyo",priority:1});
    priorityQueue.enqueue({element:"gigi",priority:15});
    priorityQueue.enqueue({element:"vivi",priority:12});
    priorityQueue.enqueue({element:"kiki",priority:12});
    priorityQueue.print();
    // yoyo - 1 
    // vivi-12 
    // kiki - 12 
    // gigi-15
  • 相关阅读:
    《1024伐木累》-te别篇,庭审你知道吗?
    《1024伐木累》-人生最高境界,长的好看
    《1024伐木累》-买车,见梦中之人
    《1024伐木累》-小白篇之谈判-总章节七
    《1024伐木累》-新年到了,祝大家新年快乐!
    《1024伐木累》-年会了,剪刀石头布决胜
    《1024伐木累》-小白篇之丽jie(结束篇)-总章节六
    《1024伐木累》-老板,我又说实话了
    《1024伐木累》-BUG的通用解决办法
    [复习资料][随想]如何枚举一个排列
  • 原文地址:https://www.cnblogs.com/kootimloe/p/14197825.html
Copyright © 2011-2022 走看看