最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript數(shù)據(jù)結(jié)構(gòu)yocto queue隊(duì)列鏈表代碼分析

 更新時間:2022年12月19日 16:47:51   作者:codeniu  
這篇文章主要為大家介紹了JavaScript數(shù)據(jù)結(jié)構(gòu)yocto queue隊(duì)列鏈表代碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

Yocto-queue 是一種允許高效存儲和檢索數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。它是一種隊(duì)列類型,是一個元素集合,其中的項(xiàng)被添加到一端并從另一端移除。

它被設(shè)計用來操作數(shù)據(jù)量很大的數(shù)組,在你需要使用大量的 Array.push、Array.shift 操作時,Yocto-queue 有更好的性能表現(xiàn)。

倉庫地址:sindresorhus/yocto-queue: Tiny queue data structure (github.com)

準(zhǔn)備工作

在瀏覽器中調(diào)試代碼雖然說很方便但是多多少少看著有點(diǎn)不專業(yè),我們還是使用 Github Workspace,不同的是這次是在本地的vscode中使用。

我們打開 yocto-queue 倉庫,創(chuàng)建一個Github Codespace,回到 Github 首頁,在導(dǎo)航欄選中 Workspace ,找到你剛創(chuàng)建的項(xiàng)目,選擇使用 vscode打開,如圖:

vscode 會提示安裝Githbu Workspace 插件,實(shí)際上它跟 Remote SHH 插件的功能差不多,為我們在遠(yuǎn)程服務(wù)器上開發(fā)提供了一種可能,這么做的好處有,跨平臺,多端操作,環(huán)境統(tǒng)一等。

分析代碼

源碼如下:

/*
How it works:
`this.#head` is an instance of `Node` which keeps track of its current value and nests another instance of `Node` that keeps the value that comes after it. When a value is provided to `.enqueue()`, the code needs to iterate through `this.#head`, going deeper and deeper to find the last value. However, iterating through every single item is slow. This problem is solved by saving a reference to the last value as `this.#tail` so that it can reference it to add a new value.
*/
class Node {
	value;
	next;
	constructor(value) {
		this.value = value;
	}
}
export default class Queue {
	#head;
	#tail;
	#size;
	constructor() {
		this.clear();
	}
	enqueue(value) {
		const node = new Node(value);
		if (this.#head) {
			this.#tail.next = node;
			this.#tail = node;
		} else {
			this.#head = node;
			this.#tail = node;
		}
		this.#size++;
	}
	dequeue() {
		const current = this.#head;
		if (!current) {
			return;
		}
		this.#head = this.#head.next;
		this.#size--;
		return current.value;
	}
	clear() {
		this.#head = undefined;
		this.#tail = undefined;
		this.#size = 0;
	}
	get size() {
		return this.#size;
	}
	* [Symbol.iterator]() {
		let current = this.#head;
		while (current) {
			yield current.value;
			current = current.next;
		}
	}
}

隊(duì)列

隊(duì)列是一種先進(jìn)先出(FIFO)的數(shù)據(jù)結(jié)構(gòu),具有以下幾個特點(diǎn):

  • 新元素總是添加到隊(duì)列的末尾。
  • 已經(jīng)在隊(duì)列中的元素保持原有的順序不變。
  • 任何時候,只能從隊(duì)列的開頭(頂部)刪除元素。

入隊(duì)

	enqueue(value) {
		const node = new Node(value);
		if (this.#head) {
			this.#tail.next = node;
			this.#tail = node;
		} else {
			this.#head = node;
			this.#tail = node;
		}
		this.#size++;
	}

向隊(duì)列中添加值。該方法需要一個值作為參數(shù),它用來創(chuàng)建一個新的 Node 對象。

如果隊(duì)列中已經(jīng)有一個 head 和 tail 節(jié)點(diǎn),新節(jié)點(diǎn)將會添加到隊(duì)列末尾,通過將 tail 節(jié)點(diǎn)的 next 屬性設(shè)置為新節(jié)點(diǎn),并更新 tail 屬性為新節(jié)點(diǎn)。

如果隊(duì)列為空,新節(jié)點(diǎn)將成為 head 和 tail 節(jié)點(diǎn)。最后,隊(duì)列的 size 屬性會增加以反映新添加的節(jié)點(diǎn)。

出隊(duì)

從隊(duì)列中刪除頂部節(jié)點(diǎn)的值,并將其返回。

	dequeue() {
		const current = this.#head;
		if (!current) {
			return;
		}
		this.#head = this.#head.next;
		this.#size--;
		return current.value;
	}

它首先通過檢查 head 屬性是否為空來檢查隊(duì)列是否為空。如果隊(duì)列為空,該方法返回 null。如果隊(duì)列不為空,head 屬性將更新為隊(duì)列中的下一個節(jié)點(diǎn),并且 size 屬性減少以反映刪除的節(jié)點(diǎn)。然后返回原 head 節(jié)點(diǎn)的值。

迭代器

允許在 for...of 循環(huán)中使用 yocto-queue.

	* [Symbol.iterator]() {
		let current = this.#head;
		while (current) {
			yield current.value;
			current = current.next;
		}
	}

使用 Symbol.iterator 符號來為隊(duì)列定義一個自定義迭代器。迭代器首先將 current 變量設(shè)置為隊(duì)列的 head 屬性。然后進(jìn)入一個循環(huán),只要 current 不為 null 就繼續(xù)循環(huán)。每次迭代,都會使用 yield 關(guān)鍵字產(chǎn)生 current 節(jié)點(diǎn)的 value 屬性。然后 current 變量將更新為隊(duì)列中的下一個節(jié)點(diǎn),循環(huán)繼續(xù)。這樣 for...of 循環(huán)就可以遍歷隊(duì)列中的所有值。

總結(jié)

通過閱讀yocto-queue的源碼,學(xué)習(xí)到了隊(duì)列的實(shí)現(xiàn)方式,以及迭代器的使用。數(shù)組 以及 隊(duì)列兩種數(shù)據(jù)結(jié)構(gòu)在使用場景上的異同,數(shù)組是查詢快,插入慢,隊(duì)列是查詢慢,插入快。

以上就是JavaScript數(shù)據(jù)結(jié)構(gòu)yocto queue隊(duì)列鏈表代碼分析的詳細(xì)內(nèi)容,更多關(guān)于JavaScript yocto queue隊(duì)列鏈表的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • BootStrap的兩種模態(tài)框方式

    BootStrap的兩種模態(tài)框方式

    bootstrap彈出層有多種觸發(fā)方式,以下是我用到的bootstrap的兩種模態(tài)框方式,需要的的朋友參考下吧
    2017-05-05
  • JavaScript實(shí)現(xiàn)圖片縮放功能

    JavaScript實(shí)現(xiàn)圖片縮放功能

    本文,我們來講講如何使用 JavaScript 實(shí)現(xiàn)圖片的縮放,當(dāng)然,我們可以類比到其他的元素,比如視頻的縮放,文中有詳細(xì)的代碼示例,對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-07-07
  • javaScript讓文本框內(nèi)的最后一個文字的后面獲得焦點(diǎn)實(shí)現(xiàn)代碼

    javaScript讓文本框內(nèi)的最后一個文字的后面獲得焦點(diǎn)實(shí)現(xiàn)代碼

    讓文本框內(nèi)的最后一個文字的后面獲得焦點(diǎn),在應(yīng)用中很常見,接下來提供解決方案,按興趣的朋友可以了解下
    2013-01-01
  • JavaScript oncopy事件用法實(shí)例解析

    JavaScript oncopy事件用法實(shí)例解析

    這篇文章主要介紹了JavaScript oncopy事件用法實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05
  • 有趣的JavaScript數(shù)組長度問題代碼說明

    有趣的JavaScript數(shù)組長度問題代碼說明

    有趣的JavaScript數(shù)組代碼示例,學(xué)習(xí)js的朋友可以參考下。注意以下的情況。
    2011-01-01
  • Javascript中eval函數(shù)的詳細(xì)用法與說明

    Javascript中eval函數(shù)的詳細(xì)用法與說明

    Javascript中eval函數(shù)的詳細(xì)用法與說明...
    2007-03-03
  • 一文徹底理解JS回調(diào)函數(shù)

    一文徹底理解JS回調(diào)函數(shù)

    回調(diào)函數(shù)是從一個叫函數(shù)式編程的編程范式中衍生出來的概念,簡單來說,函數(shù)式編程就是使用函數(shù)作為變量,這篇文章主要介紹了一文徹底理解JS回調(diào)函數(shù),需要的朋友可以參考下
    2022-12-12
  • Dom加載讓圖片加載完再執(zhí)行的腳本代碼

    Dom加載讓圖片加載完再執(zhí)行的腳本代碼

    當(dāng)大家使用window.onload執(zhí)行一個函數(shù)時,必須要等到頁面上的圖片等信息全部加載完畢之后才執(zhí)行的。但很多時候圖片的數(shù)量比較多,所以需要很多時間下載。更令人尷尬的是,當(dāng)網(wǎng)頁文檔(或者說Dom)已經(jīng)加載完畢,而圖片尚未加載完畢,很多用戶已經(jīng)開始瀏覽網(wǎng)頁,但這時很多由window.onload所觸發(fā)的函數(shù)不能執(zhí)行,這就導(dǎo)致一部分功能不能完美地給用戶使用,更嚴(yán)重的是會給用戶留下不好的印象!
    2008-05-05
  • 解決layui數(shù)據(jù)表格table的橫向滾動條顯示問題

    解決layui數(shù)據(jù)表格table的橫向滾動條顯示問題

    今天小編就為大家分享一篇解決layui數(shù)據(jù)表格table的橫向滾動條顯示問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • JavaScript技巧44招【實(shí)用】

    JavaScript技巧44招【實(shí)用】

    JavaScript是一個絕冠全球的編程語言,可用于Web開發(fā)、移動應(yīng)用開發(fā)(PhoneGap、Appcelerator)、服務(wù)器端開發(fā)(Node.js和Wakanda)等等。本文主要介紹JavaScript應(yīng)用的一些小技巧。
    2016-12-12

最新評論

甘肃省| 太白县| 正宁县| 福安市| 江安县| 红桥区| 扬中市| 客服| 弋阳县| 新泰市| 潜山县| 岳西县| 娄底市| 民权县| 太和县| 大荔县| 萨嘎县| 双柏县| 瓮安县| 长宁县| 保靖县| 和田市| 白朗县| 南阳市| 顺平县| 祥云县| 新沂市| 城固县| 南平市| 论坛| 富平县| 杭锦旗| 铜川市| 习水县| 长宁区| 海南省| 博客| 色达县| 江都市| 融水| 资源县|