筆試算法須知---用JS實(shí)現(xiàn)隊(duì)列處理問題

隊(duì)列

  • 普通隊(duì)列 先進(jìn)先出FIFO
  • 循環(huán)隊(duì)列 隊(duì)首出隊(duì)后,又從隊(duì)尾入隊(duì)
  • 優(yōu)先隊(duì)列
    如果優(yōu)先值小的元素放到隊(duì)列的前面,這叫做最小優(yōu)先隊(duì)列
    反之優(yōu)先值大的元素放到隊(duì)列的前面,這叫做最大優(yōu)先隊(duì)列
隊(duì)列的操作(就是醫(yī)院看病排隊(duì))
  1. 向隊(duì)列中添加元素(進(jìn)入排隊(duì)的隊(duì)伍中)--push
  2. 移除隊(duì)頭元素(隊(duì)伍最前面的人出隊(duì),進(jìn)診室)--shift
  3. 查看隊(duì)頭元素(查看隊(duì)伍最前面的人)--front
  4. 判斷隊(duì)列是否為空(看看隊(duì)伍中有沒有人)--isEmpty
  5. 移除隊(duì)伍全部元素(下班了,都走了吧)--clear
  6. 查看棧里元素個(gè)數(shù)(查看排隊(duì)的有多少人)--size

實(shí)現(xiàn)一個(gè)隊(duì)列類

function Queue(){
    var queueData = [];
    // FIFO=Fisrt In First Out
    this.push = function(element){//入隊(duì)操作---在數(shù)組尾插入新元素
        queueData.push(element);
        return queueData;
    };
    this.shift = function(element){//出隊(duì)操作---在數(shù)組頭刪除元素
        return shiftElement = queueData.shift(element);
    };
    this.front = function(){
        return queueData[0];
    };
    this.size = function(){
        return queueData.length;
    };
    this.isEmpty = function(){
        return queueData.length == 0;
    }
    this.clear = function(){
        queueData = [];
    }
    this.print = function(){
        console.log(queueData.toString())
    }
}

最小優(yōu)先隊(duì)列

function PriorityQueue(){
    var queueData = [];
    function QueEle(element,priority){
        this.element = element;
        this.priority = priority;
    }
//-----------與普通隊(duì)列的不同是在入隊(duì)過程中判斷優(yōu)先級(jí),來確定元素在隊(duì)列該插入的位置。
    this.push = function(element,priority){
        var queObj = new QueEle(element,priority);
        if(this.isEmpty()){
            this.push(queObj);
        }else{
            var flag = false;
            for(var i=0;i<queueData.length;i++){
                if(queObj.priority<queueData[i].priority){
                //判斷優(yōu)先級(jí),優(yōu)先級(jí)小的放在優(yōu)先級(jí)大的前面,
                    queueData.splice(i, 0, queObj);//插入元素
                    flag = true;
                    break;
                }
            }
            if(!flag){
                queueData.push(queObj);
            }
        }
    }
    this.shift = function(element){//出隊(duì)操作---在數(shù)組頭刪除元素
        return shiftElement = queueData.shift(element);
    };
    this.front = function(){
        return queueData[0];
    };
    this.size = function(){
        return queueData.length;
    };
    this.isEmpty = function(){
        return queueData.length == 0;
    }
    this.clear = function(){
        queueData = [];
    }
    this.print = function(){
        var temp = [];
        for(var j=0;j<queueData.len;j++){
            temp.push(queueData[i].ele);//只輸出元素的名字
        }
        console.log(temp.toString());
    }
 }

循環(huán)隊(duì)列--擊鼓傳花問題

核心代碼就是將隊(duì)列變成循環(huán)隊(duì)列,按照給定的次數(shù)循環(huán)隊(duì)列后,將隊(duì)首的元素出隊(duì),直到隊(duì)列的長(zhǎng)度為1。結(jié)束隊(duì)列,返回隊(duì)列中存在的最后一個(gè)值。

function JGCH(namelists,num){//nameList為姓名數(shù)組,num為一個(gè)數(shù)字用來迭代隊(duì)列
    var hua = new Queue();
    for(var m=0;m<namelists.length;m++){
        hua.push(namelists[m]);//將傳入的數(shù)組存入隊(duì)列中
    };
    var loser;
    while(hua.size()>1){
        for(var n=0;n<num;n++){
            hua.push(hua.shift());//出隊(duì)后入隊(duì),形成循環(huán)隊(duì)列
        }
        loser = hua.shift();
        console.log(loser+"淘汰");//每一次迭代完成后,將隊(duì)首的出隊(duì)
    }
    return hua.shift();
 }//詳細(xì)代碼及測(cè)試用例如下

https://github.com/edisonchan97/JS-algorithm/blob/master/%E5%87%BB%E9%BC%93%E4%BC%A0%E8%8A%B1--%E5%BE%AA%E7%8E%AF%E9%98%9F%E5%88%97

擊鼓傳花結(jié)果

希望我的總結(jié)或許能幫到大家一丟丟,加油!?。?/h3>

大家爭(zhēng)取拿到 Offer?。?!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • @synthesize和@dynamic分別有什么作用?@property有兩個(gè)對(duì)應(yīng)的詞,一個(gè)是 @synthes...
    筆筆請(qǐng)求閱讀 617評(píng)論 0 1
  • 《招聘一個(gè)靠譜的 iOS》—參考答案(下)說明:面試題來源是微博@我就叫Sunny怎么了的這篇博文:《招聘一個(gè)靠譜...
    筆筆請(qǐng)求閱讀 367評(píng)論 0 0
  • 上周的這個(gè)時(shí)間,是在趕往機(jī)場(chǎng)的路上. 心情是前路未知的迷茫與彷徨…如果有誰(shuí)跟我說可以讓我半小時(shí)豁然開朗,我大概會(huì)用...
    14號(hào)棉棉閱讀 430評(píng)論 3 1
  • 人生第一枚戒指,雖然不是什么名貴的東西,但是內(nèi)心異常的歡喜!非常的喜歡,但是內(nèi)心又些許惆悵!呵呵,依然過去,是自己...
    正念如是閱讀 162評(píng)論 0 0
  • 水彩的手繪過程我只做簡(jiǎn)單的分享,不會(huì)像彩鉛教程那樣寫的非常仔細(xì)。因?yàn)槲艺J(rèn)為水彩繪畫很開放很有趣,每個(gè)人對(duì)色彩的認(rèn)知...
    子辰手繪閱讀 2,898評(píng)論 29 51

友情鏈接更多精彩內(nèi)容