摘要:隊列是一種先進先出的數據結構,與棧不同的是,它操作的元素是在兩端,而且進行的是不一樣的操作。
隊列(Queue)是一種先進先出(First-In-First-Out, FIFO)的數據結構,與棧不同的是,它操作的元素是在兩端,而且進行的是不一樣的操作。向隊列的隊尾加入一個元素叫做入隊列(enQueue),向隊列的隊首刪除一個元素叫做出隊列(delQueue).
ADTQueue --- length,屬性,隊列長度 dataStore,屬性,存儲數據 enQueue,方法,入隊列 delQueue,方法,出隊列 empty,方法,清空隊列 front,方法,獲得隊首元素 rear,方法,獲得隊尾元素 print,方法,打印隊列JavaScript描述
// 構造函數 function Queue () { this.length = 0; this.dataStore = []; }
// 原型核心方法 Queue.prototype = { constructor: Queue, enQueue: function (element) { // 存儲元素并使隊列長度加1 this.dataStore[this.length++] = element; }, delQueue: function () { var res = this.dataStore[0], //取得隊首元素 i; // 當隊列不為空 if (res !== undefined) { // 這里盡量避免使用js語言特性來實現 // 取出隊首元素,并讓隊列后方元素向前移動,隊列長度減一 // js數組其實已經實現了隊列的方法,刪除隊首shift if (this.length > 1) { for (i = 0; i < this.length - 1; i++) { this.dataStore[i] = this.dataStore[i + 1]; } this.dataStore.length -= 1; } else { // 當只有一個元素時,出隊列后數組為空 this.dataStore = []; } this.length -= 1; } return res; }, }
// 其他方法 empty: function () { this.dataStore.length = 0; this.length = 0; }, front: function () { return this.dataStore[0]; }, rear: function () { return this.dataStore[this.length - 1]; }, print: function () { for (var i = 0; i < this.length; i++) { console.log(this.dataStore[i] + " "); } }測試
var q = new Queue(); q.enQueue("jiavan"); q.enQueue("jiavan2"); q.enQueue("jiavan3"); q.enQueue("jiavan4"); q.print(); q.delQueue(); // jiavan q.length; // 3 q.front(); //jiavan2 q.rear();// jiavan4 q.empty(); q.dataStore; //[]
系列文章原文地址https://github.com/Jiavan/js4algs GitHub repo上有源碼和更好的閱讀體驗,若有錯誤歡迎發PR,若對你有所幫助也歡迎star!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/79333.html
摘要:我們可以使用鏈表這種數據結構,來刪除元素的時候而不必讓后面的元素向前移動。一個節點的上一個節點稱為它的前驅,下一個節點即指向的節點稱為它的后繼節點,在簡單的單向鏈表中,第一個節點稱為頭節點它沒有前驅節點,最后一個節點沒有后繼節點為。 之前我們用數組的方式來實現了隊列,是否還記得在出隊列后有這樣一段代碼: for (i = 0; i < this.length - 1; i++) { ...
摘要:列表項目棧是一種后進先出的數據結構,我們所能操作的都是棧頂元素,刪除一個棧頂元素叫做出棧或者彈棧,添加一個元素叫做入棧或者壓棧首先構建我們的抽象數據類型棧頂元素位置保存數據的數組壓棧出棧查看棧頂元素清空棧棧的長度輸出棧元素描述模擬輸出 列表項目 棧是一種后進先出(LIFO)的數據結構,我們所能操作的都是棧頂元素,刪除一個棧頂元素叫做出棧或者彈棧,添加一個元素叫做入棧或者壓棧. show...
摘要:使用了一個事件驅動非阻塞式的模型,使其輕量又高效。的包管理器,是全球最大的開源庫生態系統。按照這個定義,之前所述的阻塞,非阻塞,多路復用信號驅動都屬于同步。 系列文章 Nodejs高性能原理(上) --- 異步非阻塞事件驅動模型Nodejs高性能原理(下) --- 事件循環詳解 前言 終于開始我nodejs的博客生涯了,先從基本的原理講起.以前寫過一篇瀏覽器執行機制的文章,和nodej...
摘要:如果沒到毫秒,那么階段就會跳過,進入階段,先執行的回調函數。參考文檔什么是瀏覽器的事件循環不要混淆和瀏覽器中的定時器詳解瀏覽器和不同的事件循環深入理解事件循環機制篇中的執行機制 最近對Event loop比較感興趣,所以了解了一下。但是發現整個Event loop盡管有很多篇文章,但是沒有一篇可以看完就對它所有內容都了解的文章。大部分的文章都只闡述了瀏覽器或者Node二者之一,沒有對比...
摘要:還請同學跟我多多探討關于修改是異步還是同步的問題先來看代碼上述代碼的結果完全就是同步的表現,如果是異步的話,毫無疑問,第一個下的每個內容都應該是,第二個也應該是。 回 @bf 同學 本篇文章不是筆記也不是心得,而是關于一個問題的討論,問題最初出現于https://segmentfault.com/q/1010000005630545?_ea=903562 由于 @bf 同學不方便...
閱讀 2642·2019-08-30 15:52
閱讀 3589·2019-08-29 17:02
閱讀 1835·2019-08-29 13:00
閱讀 910·2019-08-29 11:07
閱讀 3228·2019-08-27 10:53
閱讀 1762·2019-08-26 13:43
閱讀 1004·2019-08-26 10:22
閱讀 1307·2019-08-23 18:06