国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

JavaScript隊列的應用實例詳解【經典數(shù)據(jù)結構】

2024-05-06 15:18:34
字體:
來源:轉載
供稿:網友

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

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

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

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

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

隊列的應用有哪些呢?

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

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

我在這里挑一個常見的軟件層面的例子,也就是銀行排隊問題。先說說實現(xiàn)思路,第一個客戶到達的時刻為0,之后每個客戶到達的時刻在前一個客戶到達時設定隨機值,因此在客戶到達時需要產生兩個隨機數(shù),一個是客戶辦理業(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>            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 南召县| 成武县| 长寿区| 肃宁县| 宣城市| 泗水县| 辛集市| 凤冈县| 泰来县| 石渠县| 泽州县| 鲁甸县| 会宁县| 敦煌市| 永寿县| 韶关市| 静乐县| 萨嘎县| 中方县| 五台县| 瑞金市| 普定县| 曲周县| 海安县| 金华市| 唐河县| 宜春市| 樟树市| 类乌齐县| 东兰县| 泰宁县| 高密市| 芦山县| 白玉县| 孝感市| 十堰市| 万山特区| 博兴县| 民乐县| 德江县| 邛崃市|