摘要:隊(duì)列是一種先進(jìn)先出的數(shù)據(jù)結(jié)構(gòu),與棧不同的是,它操作的元素是在兩端,而且進(jìn)行的是不一樣的操作。
隊(duì)列(Queue)是一種先進(jìn)先出(First-In-First-Out, FIFO)的數(shù)據(jù)結(jié)構(gòu),與棧不同的是,它操作的元素是在兩端,而且進(jìn)行的是不一樣的操作。向隊(duì)列的隊(duì)尾加入一個(gè)元素叫做入隊(duì)列(enQueue),向隊(duì)列的隊(duì)首刪除一個(gè)元素叫做出隊(duì)列(delQueue).
ADTQueue --- length,屬性,隊(duì)列長(zhǎng)度 dataStore,屬性,存儲(chǔ)數(shù)據(jù) enQueue,方法,入隊(duì)列 delQueue,方法,出隊(duì)列 empty,方法,清空隊(duì)列 front,方法,獲得隊(duì)首元素 rear,方法,獲得隊(duì)尾元素 print,方法,打印隊(duì)列JavaScript描述
// 構(gòu)造函數(shù) function Queue () { this.length = 0; this.dataStore = []; }
// 原型核心方法 Queue.prototype = { constructor: Queue, enQueue: function (element) { // 存儲(chǔ)元素并使隊(duì)列長(zhǎng)度加1 this.dataStore[this.length++] = element; }, delQueue: function () { var res = this.dataStore[0], //取得隊(duì)首元素 i; // 當(dāng)隊(duì)列不為空 if (res !== undefined) { // 這里盡量避免使用js語(yǔ)言特性來(lái)實(shí)現(xiàn) // 取出隊(duì)首元素,并讓隊(duì)列后方元素向前移動(dòng),隊(duì)列長(zhǎng)度減一 // js數(shù)組其實(shí)已經(jīng)實(shí)現(xiàn)了隊(duì)列的方法,刪除隊(duì)首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 { // 當(dāng)只有一個(gè)元素時(shí),出隊(duì)列后數(shù)組為空 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] + " "); } }測(cè)試
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上有源碼和更好的閱讀體驗(yàn),若有錯(cuò)誤歡迎發(fā)PR,若對(duì)你有所幫助也歡迎star!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/79333.html
摘要:我們可以使用鏈表這種數(shù)據(jù)結(jié)構(gòu),來(lái)刪除元素的時(shí)候而不必讓后面的元素向前移動(dòng)。一個(gè)節(jié)點(diǎn)的上一個(gè)節(jié)點(diǎn)稱為它的前驅(qū),下一個(gè)節(jié)點(diǎn)即指向的節(jié)點(diǎn)稱為它的后繼節(jié)點(diǎn),在簡(jiǎn)單的單向鏈表中,第一個(gè)節(jié)點(diǎn)稱為頭節(jié)點(diǎn)它沒(méi)有前驅(qū)節(jié)點(diǎn),最后一個(gè)節(jié)點(diǎn)沒(méi)有后繼節(jié)點(diǎn)為。 之前我們用數(shù)組的方式來(lái)實(shí)現(xiàn)了隊(duì)列,是否還記得在出隊(duì)列后有這樣一段代碼: for (i = 0; i < this.length - 1; i++) { ...
摘要:列表項(xiàng)目棧是一種后進(jìn)先出的數(shù)據(jù)結(jié)構(gòu),我們所能操作的都是棧頂元素,刪除一個(gè)棧頂元素叫做出?;蛘邚棗#砑右粋€(gè)元素叫做入?;蛘邏簵J紫葮?gòu)建我們的抽象數(shù)據(jù)類型棧頂元素位置保存數(shù)據(jù)的數(shù)組壓棧出棧查看棧頂元素清空棧棧的長(zhǎng)度輸出棧元素描述模擬輸出 列表項(xiàng)目 棧是一種后進(jìn)先出(LIFO)的數(shù)據(jù)結(jié)構(gòu),我們所能操作的都是棧頂元素,刪除一個(gè)棧頂元素叫做出?;蛘邚棗?,添加一個(gè)元素叫做入?;蛘邏簵? show...
摘要:使用了一個(gè)事件驅(qū)動(dòng)非阻塞式的模型,使其輕量又高效。的包管理器,是全球最大的開(kāi)源庫(kù)生態(tài)系統(tǒng)。按照這個(gè)定義,之前所述的阻塞,非阻塞,多路復(fù)用信號(hào)驅(qū)動(dòng)都屬于同步。 系列文章 Nodejs高性能原理(上) --- 異步非阻塞事件驅(qū)動(dòng)模型Nodejs高性能原理(下) --- 事件循環(huán)詳解 前言 終于開(kāi)始我nodejs的博客生涯了,先從基本的原理講起.以前寫(xiě)過(guò)一篇瀏覽器執(zhí)行機(jī)制的文章,和nodej...
摘要:如果沒(méi)到毫秒,那么階段就會(huì)跳過(guò),進(jìn)入階段,先執(zhí)行的回調(diào)函數(shù)。參考文檔什么是瀏覽器的事件循環(huán)不要混淆和瀏覽器中的定時(shí)器詳解瀏覽器和不同的事件循環(huán)深入理解事件循環(huán)機(jī)制篇中的執(zhí)行機(jī)制 最近對(duì)Event loop比較感興趣,所以了解了一下。但是發(fā)現(xiàn)整個(gè)Event loop盡管有很多篇文章,但是沒(méi)有一篇可以看完就對(duì)它所有內(nèi)容都了解的文章。大部分的文章都只闡述了瀏覽器或者Node二者之一,沒(méi)有對(duì)比...
摘要:還請(qǐng)同學(xué)跟我多多探討關(guān)于修改是異步還是同步的問(wèn)題先來(lái)看代碼上述代碼的結(jié)果完全就是同步的表現(xiàn),如果是異步的話,毫無(wú)疑問(wèn),第一個(gè)下的每個(gè)內(nèi)容都應(yīng)該是,第二個(gè)也應(yīng)該是。 回 @bf 同學(xué) 本篇文章不是筆記也不是心得,而是關(guān)于一個(gè)問(wèn)題的討論,問(wèn)題最初出現(xiàn)于https://segmentfault.com/q/1010000005630545?_ea=903562 由于 @bf 同學(xué)不方便...
閱讀 2654·2019-08-30 15:52
閱讀 3600·2019-08-29 17:02
閱讀 1847·2019-08-29 13:00
閱讀 926·2019-08-29 11:07
閱讀 3241·2019-08-27 10:53
閱讀 1772·2019-08-26 13:43
閱讀 1018·2019-08-26 10:22
閱讀 1342·2019-08-23 18:06