数据结构-队列<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

posted on 2020-12-27 20:24  行运茶快乐水  阅读(257)  评论(0编辑  收藏  举报

导航