亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JavaScript隊列的應(yīng)用實例詳解【經(jīng)典數(shù)據(jù)結(jié)構(gòu)】

 更新時間:2017年04月12日 08:50:58   作者:布瑞澤的童話  
這篇文章主要介紹了JavaScript隊列的應(yīng)用,簡單講述了隊列的概念并結(jié)合實例形式分析了基于javascript隊列排隊問題解決方法,需要的朋友可以參考下

本文實例講述了JavaScript隊列的應(yīng)用。分享給大家供大家參考,具體如下:

和前面介紹的棧相反,隊列是一種先進先出的線性表,它只允許在表的一端進行插入,而在另一端進行刪除。JavaScript自己提供了兩個隊列方法shiftpush方法,分別是出隊入隊,其原理就是將元素插入數(shù)組最后一個和刪除第一個元素。

這里需要注意一點,就是unshift方法的效率比push的效率要低很多。因為它要將入隊之前的數(shù)組全部往前移動一位。這里我們就不用代碼再次演示了。

和線性表類似,隊列也分為順序隊列鏈隊列

和順序棧類似,在隊列的順序存儲結(jié)構(gòu)中,除了使用一組地址連續(xù)的存儲單元依次存放從隊列頭到隊列尾的元素之外,還要設(shè)置兩個指針frontrear分別指向隊列頭元素隊列尾元素。初始化時,front=rear=0;插入元素時,rear+1;刪除元素時,front+1。所以在非空隊列中,頭指針始終指向隊列頭元素,而尾指針始終指向隊列尾元素的下一個位置。

隊列的應(yīng)用有哪些呢?

我們先看看計算機組成層面的吧,首先就是CPU資源的競爭問題。在具有多個終端的計算機系統(tǒng)中,有多個用戶需要使用CPU來各自運行程序,操作系統(tǒng)會按照每個請求在時間上的順序,加請求排成一個隊列。每次把CPU分配給隊頭的任務(wù),完成后使其出隊,然后依次。

第二個例子就是主機與外部設(shè)備之間速度不匹配的問題。我們以打印機和主機為例。主機輸出數(shù)據(jù)給打印機打印,主機輸出數(shù)據(jù)的速度遠(yuǎn)大于打印機打印速度,所以有一個打印數(shù)據(jù)緩沖區(qū),主要把數(shù)據(jù)依次寫入緩沖區(qū),寫滿后主機就暫停輸出,繼而去做其他時間,只到打印機完成打印,再次請求主機發(fā)送數(shù)據(jù),主機才繼續(xù)輸出數(shù)據(jù)。這樣利用隊列可以提高主機的效率。

我在這里挑一個常見的軟件層面的例子,也就是銀行排隊問題。先說說實現(xiàn)思路,第一個客戶到達的時刻為0,之后每個客戶到達的時刻在前一個客戶到達時設(shè)定隨機值,因此在客戶到達時需要產(chǎn)生兩個隨機數(shù),一個是客戶辦理業(yè)務(wù)耗時durtime,一個是下一客戶到達時間間隔intertime,假設(shè)當(dāng)前時間為occurtime,則下一客戶到達時為occurtime+intertime。

剛到達的客戶應(yīng)該插入到當(dāng)前含元素最少的隊列中。

在JavaScript的運用中,通常使用隊列來進行任務(wù)的排序。而任務(wù)隊列的任務(wù)是按進入隊列的順序延遲執(zhí)行(解決狀態(tài)一致性)的,即當(dāng)前一個任務(wù)完成后,后面的任務(wù)才被執(zhí)行,如果當(dāng)前沒有任務(wù),則入隊列的任務(wù)立即執(zhí)行。代碼如下:

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>隊列</title>
 </head>
 <body>
<script type="text/javascript">
 function taskQueue() {
  taskList = [];
  var isRun = false;
  this.addTask = function (task) {
  taskList.push(task);
  };
  setInterval(function () {
  if (taskList.length > 0 && !isRun) {
   isRun = true;
   taskList.shift();
   isRun = false;
  }
  }, 100);
 }
 function show(){
  alert(taskList);
 }
  taskQueue();
  addTask(1);
  addTask(2);
  addTask(3);
  setTimeout('show()',99);//1,2,3
  setTimeout('show()',101);//2,3
  setTimeout('show()',400);//null
</script>
 </body>
</html>

更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript數(shù)學(xué)運算用法總結(jié)》、《JavaScript排序算法總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》及《JavaScript錯誤與調(diào)試技巧總結(jié)

希望本文所述對大家JavaScript程序設(shè)計有所幫助。

相關(guān)文章

  • js中獲取事件對象的方法小結(jié)

    js中獲取事件對象的方法小結(jié)

    事件對象 的獲取很簡單,很久前我們就知道IE中事件對象是作為全局對象( window.event )存在的,F(xiàn)irefox中則是做為句柄( handler )的第一個參數(shù)傳入內(nèi)的。所以一行代碼就可以搞定
    2011-03-03
  • Mock.js的安裝與使用教程(擺脫后端同學(xué)的束縛)

    Mock.js的安裝與使用教程(擺脫后端同學(xué)的束縛)

    Mock功能可以根據(jù)接口/數(shù)據(jù)結(jié)構(gòu)定義、Mock規(guī)則配置、Mock?期望配置,自動生成模擬數(shù)據(jù),且使用者可以根據(jù)需要靈活構(gòu)造各種結(jié)構(gòu)的接口數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于Mock.js的安裝與使用的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • 解決js相同的正則多次調(diào)用test()返回的值卻不同的問題

    解決js相同的正則多次調(diào)用test()返回的值卻不同的問題

    今天小編就為大家分享一篇解決js相同的正則多次調(diào)用test()返回的值卻不同的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • 對javascript的一點點認(rèn)識總結(jié)《javascript高級程序設(shè)計》讀書筆記

    對javascript的一點點認(rèn)識總結(jié)《javascript高級程序設(shè)計》讀書筆記

    Javascript專為與網(wǎng)頁交互而設(shè)計的腳本語言,由下列三個部門構(gòu)造
    2011-11-11
  • javascript實現(xiàn)tabs選項卡切換效果(擴展版)

    javascript實現(xiàn)tabs選項卡切換效果(擴展版)

    常用的頁面效果有彈出層效果,無縫滾動效果,選項卡切換效果,接下來與大家分享一款自己用原生javascript寫的選項卡切換效果在原有的基礎(chǔ)上進行了擴展,加入了自動輪播,這樣就變成了類似圖片輪播的效果
    2013-03-03
  • 讓firefox支持IE的一些方法的javascript擴展函數(shù)代碼

    讓firefox支持IE的一些方法的javascript擴展函數(shù)代碼

    因為一些代碼,只能在IE下實現(xiàn),如果用firefox實現(xiàn)就必須用一些擴展函數(shù)。
    2010-01-01
  • 處理Axios返回Promise對象的幾種常見方式

    處理Axios返回Promise對象的幾種常見方式

    Axios返回的是Promise對象,這意味著可以使用Promise的.then()、.catch()和.finally()方法來處理異步操作的結(jié)果,本文詳細(xì)介紹了處理Axios返回Promise對象的幾種常見方式,需要的朋友可以參考下
    2024-09-09
  • javascript實現(xiàn)捕捉鍵盤上按下的鍵

    javascript實現(xiàn)捕捉鍵盤上按下的鍵

    JavaScript取得按下鍵盤的鍵是哪個,通過創(chuàng)建一個event.keyCode對象,可有效獲取鍵盤上的鍵,運行代碼后,點擊鍵盤上的任意鍵,網(wǎng)頁上顯示你按下的是哪個鍵。
    2015-05-05
  • 簡單了解JavaScript中的執(zhí)行上下文和堆棧

    簡單了解JavaScript中的執(zhí)行上下文和堆棧

    這篇文章主要介紹了簡單了解JavaScript中的執(zhí)行上下文和堆棧,你應(yīng)該對解釋器了解得更清楚:為什么在聲明它們之前可以使用某些函數(shù)或變量?以及它們的值是如何確定的?,需要的朋友可以參考下
    2019-06-06
  • IE無法設(shè)置短域名下Cookie

    IE無法設(shè)置短域名下Cookie

    最近客戶在使用我們的流量監(jiān)測系統(tǒng)以及GA時發(fā)現(xiàn)了一個問題,我們統(tǒng)計到的數(shù)據(jù)比GA的要多很多倍,而且我們統(tǒng)計到的數(shù)據(jù)中,跳出率非常高,高達99%左右。
    2010-09-09

最新評論