溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript隊列的應用實例詳解【經典數據結構】

發(fā)布時間:2020-09-02 17:28:49 來源:腳本之家 閱讀:136 作者:布瑞澤的童話 欄目:web開發(fā)

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

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

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

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

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

隊列的應用有哪些呢?

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

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

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

剛到達的客戶應該插入到當前含元素最少的隊列中。

在JavaScript的運用中,通常使用隊列來進行任務的排序。而任務隊列的任務是按進入隊列的順序延遲執(zhí)行(解決狀態(tài)一致性)的,即當前一個任務完成后,后面的任務才被執(zhí)行,如果當前沒有任務,則入隊列的任務立即執(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>

更多關于JavaScript相關內容感興趣的讀者可查看本站專題:《JavaScript數據結構與算法技巧總結》、《JavaScript數學運算用法總結》、《JavaScript排序算法總結》、《JavaScript遍歷算法與技巧總結》、《JavaScript查找算法技巧總結》及《JavaScript錯誤與調試技巧總結》

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

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI