摘要:本文主要用實(shí)現(xiàn)一些常用的數(shù)據(jù)結(jié)構(gòu),并帶上相應(yīng)的講解,本系列中的所有代碼并非所有都由本人編寫,但出于學(xué)習(xí)目的,在此分享出來(lái)并帶上一定的解釋,方便大家學(xué)習(xí)。相應(yīng)的數(shù)據(jù)結(jié)構(gòu)有隊(duì)列棧單鏈表雙向鏈表二叉樹相應(yīng)代碼已上傳地址。
本文主要用JavaScript實(shí)現(xiàn)一些常用的數(shù)據(jù)結(jié)構(gòu),并帶上相應(yīng)的講解,本系列中的所有代碼并非所有都由本人編寫,但出于學(xué)習(xí)目的,在此分享出來(lái)并帶上一定的解釋,方便大家學(xué)習(xí)。
相應(yīng)的數(shù)據(jù)結(jié)構(gòu)有:隊(duì)列
棧
單鏈表
雙向鏈表
二叉樹
相應(yīng)代碼已上傳GitHub地址:https://github.com/HolyZheng/... 。
本文先給大家介紹隊(duì)列和棧,其他的在后續(xù)的文章中給大家?guī)?lái)。
隊(duì)列隊(duì)列 的概念應(yīng)該不用多說(shuō)了吧,一句話:先進(jìn)先出(first in first out),就跟我們平時(shí)排隊(duì)一樣,先排隊(duì)的就先到。
代碼實(shí)現(xiàn):
/** * 使用javascript實(shí)現(xiàn)一個(gè)隊(duì)列 * 具有enqueue、dequeue、show三個(gè)方法 */ function Queue () { this._oldestIndex = 1; this._newestIndex = 1; this._storage = {}; } Queue.prototype.size = function () { return this._newestIndex - this._oldestIndex; } Queue.prototype.enqueue = function (data) { this._storage[this._newestIndex] = data; this._newestIndex++; } Queue.prototype.dequeue = function () { var oldestIndex = this._oldestIndex, newestIndex = this._newestIndex, deletedData; if (oldestIndex !== newestIndex) { deletedData = this._storage[oldestIndex]; delete this._storage[oldestIndex]; this._oldestIndex++; return deletedData; } return; } Queue.prototype.show = function () { console.log(this._storage); }
這個(gè)隊(duì)列主要有三個(gè)方法:enqueue、dequeue、show,分別為入隊(duì),出隊(duì),查看隊(duì)列。
enqueue跟show都很簡(jiǎn)單,相信這里不用我來(lái)講,大家一看就能懂,所以就講一下dequeue函數(shù):
enqueue 函數(shù):
Queue.prototype.dequeue = function () { var oldestIndex = this._oldestIndex, //記錄隊(duì)頭位置 newestIndex = this._newestIndex, //記錄隊(duì)尾位置 deletedData; //記錄要?jiǎng)h除的數(shù)據(jù),并返回。 if (oldestIndex !== newestIndex) { deletedData = this._storage[oldestIndex]; delete this._storage[oldestIndex]; this._oldestIndex++; return deletedData; } return; }
刪除元素的時(shí)候,只需要用先判斷隊(duì)列是否為空了,如果不空就用 delete 方法把相應(yīng)的對(duì)象屬性刪除,然后對(duì)頭位置加一就行了。
棧棧 跟隊(duì)列就剛好相反,“先進(jìn)后出”,就像往桶里放球,后面放的在上方,可以先拿到。
代碼實(shí)現(xiàn):
/** * 使用javascript實(shí)現(xiàn)一個(gè)棧 * 具有push、pop、show三個(gè)方法 */ function Stack () { this._size = 0; this._storage = {}; } Stack.prototype.push = function (data) { var size = ++this._size; this._storage[size] = data; } Stack.prototype.pop = function () { var size = this._size; var deletedData; if (size) { deletedData = this._storage[size]; delete this._storage[size]; this._size--; return deletedData; } } Stack.prototype.show = function () { var len = 1; while (len <= this._size) { console.log(this._storage[len]); len++; } } var stackA = new Stack();
這個(gè) 棧 主要有三個(gè)方法:push、pop、show 三個(gè)方法,同樣我們挑一個(gè)相對(duì)較難的方法來(lái)講一下:
Stack.prototype.pop = function () { var size = this._size; //指向棧頭 var deletedData; if (size) { deletedData = this._storage[size]; delete this._storage[size]; this._size--; return deletedData; } }
pop 元素的時(shí)候,先判斷棧是否為空,如果不為空的話,就 delete 掉棧頭的元素,即最上方最先拿到的元素,然后this._size --指向下一個(gè)元素。
總結(jié)隊(duì)列,先進(jìn)先出,就像我們平時(shí)排隊(duì)
棧,先進(jìn)后出,就像往桶里放球,后放的在上方,可以先拿到
因?yàn)殛?duì)列和棧相對(duì)簡(jiǎn)單,所以本文篇幅比較短,下一篇文章我會(huì)為大家?guī)?lái)難度高一點(diǎn)的 單鏈表 和 雙向鏈表 的代碼實(shí)現(xiàn)和講解,文章也會(huì)相對(duì)詳細(xì),歡迎大家關(guān)注。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/90339.html
摘要:上面的代碼小書經(jīng)過(guò)編譯以后會(huì)變成小書會(huì)構(gòu)建一個(gè)對(duì)象里描述你結(jié)構(gòu)的信息,包括標(biāo)簽名屬性還有子元素等。第二個(gè)原因是,有了這樣一個(gè)對(duì)象。負(fù)責(zé)把這個(gè)用來(lái)描述信息的對(duì)象變成元素,并且渲染到面上。下一節(jié)中我們將介紹小書組件的方法。 React.js 小書 Lesson6 - 使用 JSX 描述 UI 信息 本文作者:胡子大哈本文原文:http://huziketang.com/books/rea...
摘要:算法描述冒泡排序是一種簡(jiǎn)單的排序算法。算法描述和實(shí)現(xiàn)一般來(lái)說(shuō),插入排序都采用在數(shù)組上實(shí)現(xiàn)。平均情況希爾排序年發(fā)明第一個(gè)突破的排序算法是簡(jiǎn)單插入排序的改進(jìn)版它與插入排序的不同之處在于,它會(huì)優(yōu)先比較距離較遠(yuǎn)的元素。 前言 讀者自行嘗試可以想看源碼戳這,博主在github建了個(gè)庫(kù),讀者可以Clone下來(lái)本地嘗試。此博文配合源碼體驗(yàn)更棒哦~~~ 個(gè)人博客:Damonare的個(gè)人博客 原文地址:...
摘要:面向?qū)ο竺嫦驅(qū)ο缶幊痰娜Q為簡(jiǎn)稱。面向?qū)ο缶幊淌怯贸橄蠓绞絼?chuàng)建基于現(xiàn)實(shí)世界模型的一種編程方式。面向?qū)ο缶幊炭梢钥醋鍪鞘褂靡幌盗袑?duì)象相互協(xié)作的軟件設(shè)計(jì)。面向?qū)ο缶幊痰娜齻€(gè)主要特征是封裝繼承多態(tài)。 面向?qū)ο?面向?qū)ο缶幊痰娜Q為Object Oriented Programming,簡(jiǎn)稱OOP。面向?qū)ο缶幊淌怯贸橄蠓绞絼?chuàng)建基于現(xiàn)實(shí)世界模型的一種編程方式。面向?qū)ο缶幊炭梢钥醋鍪鞘褂靡幌盗袑?duì)象...
摘要:所以搞清楚是理解對(duì)象屬性描述符的唯一途徑。是一個(gè)對(duì)象,對(duì)象里的屬性描述符有兩種類型數(shù)據(jù)描述符和存取描述符。描述符必須是這兩種形式之一不能同時(shí)是兩者。描述符中未顯示設(shè)置的特性使用其默認(rèn)值。創(chuàng)建一個(gè)新屬性默認(rèn)描述符的鍵值都是或者。 對(duì)象屬性描述符 當(dāng)別人對(duì)你提及對(duì)象屬性描述符,可能會(huì)蒙逼。而如果提及對(duì)象屬性的 get/set 方法就秒懂了,標(biāo)準(zhǔn)描述和習(xí)慣表述在這里有些差別,但是指向的是同一...
閱讀 2345·2021-11-11 16:54
閱讀 2596·2021-09-26 09:47
閱讀 3978·2021-09-08 09:36
閱讀 2727·2021-07-25 21:37
閱讀 927·2019-08-30 15:54
閱讀 2540·2019-08-30 14:22
閱讀 3245·2019-08-30 13:57
閱讀 2558·2019-08-29 17:17