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

JavaScript數(shù)據(jù)結構yocto queue隊列鏈表代碼分析

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

前言

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

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

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

準備工作

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

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

vscode 會提示安裝Githbu Workspace 插件,實際上它跟 Remote SHH 插件的功能差不多,為我們在遠程服務器上開發(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;
		}
	}
}

隊列

隊列是一種先進先出(FIFO)的數(shù)據(jù)結構,具有以下幾個特點:

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

入隊

	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++;
	}

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

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

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

出隊

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

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

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

迭代器

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

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

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

總結

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

以上就是JavaScript數(shù)據(jù)結構yocto queue隊列鏈表代碼分析的詳細內容,更多關于JavaScript yocto queue隊列鏈表的資料請關注腳本之家其它相關文章!

相關文章

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

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

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

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

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

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

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

    JavaScript oncopy事件用法實例解析

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

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

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

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

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

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

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

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

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

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

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

    JavaScript技巧44招【實用】

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

最新評論

原平市| 台东县| 石柱| 阳信县| 年辖:市辖区| 葫芦岛市| 东山县| 霍州市| 金塔县| 永平县| 宁陵县| 丰宁| 芜湖市| 峨山| 吴川市| 临西县| 内江市| 通州区| 温宿县| 乐至县| 浮梁县| 泸溪县| 绿春县| 巢湖市| 宁强县| 新竹市| 通州区| 乌兰察布市| 隆安县| 勐海县| 曲靖市| 乌鲁木齐市| 琼海市| 西平县| 电白县| 平原县| 奉贤区| 涞水县| 平山县| 汉中市| 确山县|