1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關咨詢
      選擇下列產品馬上在線溝通
      服務時間:8:30-17:00
      你可能遇到了下面的問題
      關閉右側工具欄

      新聞中心

      這里有您想知道的互聯網營銷解決方案
      JavaScript中隊列有什么用

      這篇文章主要介紹JavaScript中隊列有什么用,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

      鳳凰網站建設公司成都創(chuàng)新互聯公司,鳳凰網站設計制作,有大型網站制作公司豐富經驗。已為鳳凰數千家提供企業(yè)網站建設服務。企業(yè)網站搭建\外貿網站建設要多少錢,請找那個售后服務好的鳳凰做網站的公司定做!

      隊列是一種列表,不同的是隊列只能在隊尾插入元素,在隊首刪除元素。隊列用于存儲按順序排列的數據,先進先出,這點和棧不一樣(后入先出)。在棧中,最后入棧的元素反而被優(yōu)先處理。我們現在可以把隊列想象對我們去餐館吃飯的情景,很多人排隊吃飯,排在最前面的人先打飯。新來的人只能在后面排隊。直到輪到他們?yōu)橹埂?/p>

      一:對隊列的操作

      隊列有2種主要的操作,向隊尾中插入新元素enqueue()方法和刪除隊列中的隊首的元素的dequeue()方法,另外我們還有一個讀取隊頭的元素,這個方法我們可以叫front()方法。該方法返回隊頭元素等等方法。

      看到如上描述,我們很多人可能會想到數組,數組里面也有2個方法和上面的方法功能類似,數組中push()方法也是往數組后面加入新元素,數組中shift()方法則可以刪除數組里面的第一個元素。如下代碼:

      var arrs = [];
      arrs.push("a");
      arrs.push("b");
      console.log(arrs); // ["a","b"];
      arrs.shift();
      console.log(arrs); // ['b'];

      下面我們可以使用上面的數組中的push()shift()的2個方法來封裝我們的隊列Queue類;

      1.  我們可以先定義一個構造函數Queue類,如下:

      function Queue() {
        this.dataStore = [];
      }

      如上:this.dataStore = []; 空數組時存儲隊列中所有的元素的。

      2. 向隊尾中添加一個元素方法如下:

      function enqueue(element) {
         this.dataStore.push(element);
      }

      3. 刪除隊首的元素如下:

      function dequeue() {
        return this.dataStore.shift()
      }

      4. 讀取隊首的元素如下:

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

      5. 讀取隊尾的元素如下:

      function back() {
        return this.dataStore[this.dataStore.length - 1];
      }

      6. 顯示隊列中的所有元素

      function toString() {
        var retStr = "";
        for(var i = 0; i < this.dataStore.length; ++i) {
          retStr += this.dataStore[i] + "\n";
        }
        return retStr;
      }

      7. 判斷隊列是否為空如下:

      function empty(){
        if(this.dataStore.length == 0) {
          return true;
        }else {
          return false;
        }
      }

      下面是完整的JS代碼如下:

      function Queue() {
        this.dataStore = [];
      }
      Queue.prototype = {
        // 向隊尾添加一個元素
        enqueue: function(element) {
          this.dataStore.push(element);
        },
        // 刪除隊首的元素
        dequeue: function(){
          return this.dataStore.shift();
        },
        // 讀取隊首的元素
        front: function(){
          return this.dataStore[0];
        },
        // 讀取隊尾的元素
        back: function(){
          return this.dataStore[this.dataStore.length - 1];
        },
        // 顯示隊列內的所有元素
        toString: function(){
          var retStr = "";
          for(var i = 0; i < this.dataStore.length; ++i) {
            retStr += this.dataStore[i] + "\n";
          }
          return retStr;
        },
        // 判斷隊列是否為空
        empty: function(){
          if(this.dataStore.length == 0) {
            return true;
          }else {
            return false;
          }
        }
      };

      我們現在可以對以上代碼測試下:如下:

      var q = new Queue();
      q.enqueue("a");
      q.enqueue("b");
      q.enqueue("c");
      console.log(q.toString()); // a b c
      q.dequeue();
      console.log(q.toString()); // b c
      console.log("Front of queue:" +q.front()); // b
      console.log("Back of queue:" +q.back()); // c

      二:使用隊列對數據進行排序

      比如對于 0 ~ 99 的數字進行排序,原理是:先對個位上的數字進行排序一次,然后對十位上的數字再進行排序一次。每個數字根據對應位上的數值被分在不同的盒子里面,然后對于個位上的數字采用除余數的方法,對于10位上的數字采用除法的方法,那么這種排序叫做 “基數排序”. 但是它不是最快的排序方法,但是它描述了一些有趣的隊列使用方法。

      比如如下數組:

      var nums = ["50","12","95","7","90","3","74","81","91","72"];

      1. 經過基數排序--個位排序后,數字被分配在不同的盒子里面。(在JS里面,我們可以分配在不同的隊列Queue實例類里面)。如下

      queues[0] = 50 或者 90
      queues[1] = 81 或者 91
      queues[2] = 12 或者 72
      queues[3] = 3
      queues[4] = 74
      queues[5] = 95
      queues[6] 
      queues[7] = 7
      queues[8]
      queues[9]

      根據盒子的順序,對數字第一次個位排序后結果如下:

      nums = [50,90,81,91,12,72,3,74,95,7]

      2. 然后根據十位上的數值再將上次排序后的結果分配到不同的盒子中。如下:

      queues[5] = 50
      queues[9] = 90
      queues[8] = 81
      queues[9] = 91
      queues[1] = 12
      queues[7] = 72
      queues[0] = 3
      queues[7] = 74
      queues[9] = 95
      queues[0] = 7

      最后,將盒子中的數字取出,組成一個新的列表,該列表即為排序好的數字。如下:

      即可生成如下:

      nums = [3,7,12,50,72,74,81,90,91,95];

      如上使用隊列列表盒子,可以實現這個算法,我們需要10個隊列,每個隊列對應一個數字,將所有隊列保存在一個數組中,使用取余和除法操作決定個位和十位。算法的剩余部分將數字加入相應的隊列,根據個位數值進行重新排序,然后再根據十位上的數值進行排序,結果加入排序好的數字。

      下面根據個位或十位上的數值,將數字分配到相應隊列的函數。

      /*
      * 根據個位或十位上的數值,將數字分配到相應隊列的函數
      * @param digit
      * digit=1 表示先按個位來分配
      * digit = 10 表示是按十位來分配的
      * @param n 表示循環(huán)比較多少次 一般數組幾個數字就比較多少次
      */
      distribute: function(nums,queues,n,digit){
         for(var i = 0; i < n; ++i) {
          if(digit == 1) {
            queues[nums[i] % 10].enqueue(nums[i]);
           }else {
            queues[Math.floor(nums[i] / 10)].enqueue(nums[i]);
           }
         }
      }

      下面是從隊列中收集數字的函數如下:

      // 收集數字的函數
      collect: function(queues,nums,n) {
        var i = 0;
        for(var digit = 0; digit < n; ++digit) {
          while(!queues[digit].empty()) {
            nums[i++] = queues[digit].dequeue();
          }
        }
      }

      由于上面省略了很多步驟,可能描述的不是很清楚,我們現在先來看看流程圖,結合流程圖,最后結合JS的所有代碼就可以理解"基數排序的"基本原理了;下面我們可以看看如下的流程圖;

      JavaScript中隊列有什么用

      最后是所有的JS代碼如下:

      function Queue() {
        this.dataStore = [];
      }
      Queue.prototype = {
        // 向隊尾添加一個元素
        enqueue: function(element) {
          this.dataStore.push(element);
        },
        // 刪除隊首的元素
        dequeue: function(){
          return this.dataStore.shift();
        },
        // 讀取隊首的元素
        front: function(){
          return this.dataStore[0];
        },
        // 讀取隊尾的元素
        back: function(){
          return this.dataStore[this.dataStore.length - 1];
        },
        // 顯示隊列內的所有元素
        toString: function(){
          var retStr = "";
          for(var i = 0; i < this.dataStore.length; ++i) {
            retStr += this.dataStore[i] + "\n";
          }
          return retStr;
        },
        // 判斷隊列是否為空
        empty: function(){
          if(this.dataStore.length == 0) {
            return true;
          }else {
            return false;
          }
        },
        /*
         * 根據個位或十位上的數值,將數字分配到相應隊列的函數
         * @param digit
         * digit=1 表示先按個位來分配
         * digit = 10 表示是按十位來分配的
         * @param n 表示循環(huán)比較多少次 一般數組幾個數字就比較多少次
         */
        distribute: function(nums,queues,n,digit){
          for(var i = 0; i < n; ++i) {
            if(digit == 1) {
              queues[nums[i] % 10].enqueue(nums[i]);
            }else {
              queues[Math.floor(nums[i] / 10)].enqueue(nums[i]);
            }
          }
        },
        // 收集數字的函數
        collect: function(queues,nums,n) {
          var i = 0;
          for(var digit = 0; digit < n; ++digit) {
            while(!queues[digit].empty()) {
              nums[i++] = queues[digit].dequeue();
            }
          }
        },
        dispArray: function(arr) {
          for(var i = 0; i < arr.length; ++i) {
            console.log(arr[i]);
          }
        }
      };

      下面的是對 "基數排序的" JS代碼進行測試;如下代碼:

      var q = new Queue();
        q.enqueue("a");
        q.enqueue("b");
        q.enqueue("c");
      console.log(q.toString());
      q.dequeue();
      console.log(q.toString());
      console.log("Front of queue:" +q.front());
      console.log("Back of queue:" +q.back());
      var queues = [];
      for(var i = 0; i < 10; ++i) {
         queues[i] = new Queue();
      }
      var nums = ["50","12","95","7","90","3","74","81","91","72"];
      console.log("before radix sort: ");
      console.log(nums);
      q.distribute(nums,queues,10,1);
      q.collect(queues,nums,10);
      q.dispArray(nums);
      console.log("分割線");
      q.distribute(nums,queues,10,10);
      q.collect(queues,nums,10);
      q.dispArray(nums);

      以上是“JavaScript中隊列有什么用”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注創(chuàng)新互聯行業(yè)資訊頻道!


      網站欄目:JavaScript中隊列有什么用
      網頁網址:http://ef60e0e.cn/article/peddpd.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        阳信县| 澎湖县| 郴州市| 云浮市| 靖安县| 元江| 青海省| 甘德县| 康马县| 鄄城县| 增城市| 灵宝市| 维西| 栾城县| 紫金县| 育儿| 林芝县| 繁峙县| 贞丰县| 平南县| 九龙县| 新昌县| 宜州市| 安康市| 绥棱县| 台州市| 逊克县| 平泉县| 双辽市| 富民县| 新安县| 西峡县| 措美县| 简阳市| 新巴尔虎左旗| 潮州市| 镇江市| 雷山县| 栖霞市| 邵阳市| 沅江市|