Js 數據結構全面講解

一、數組

1、定義:數組是一種數據結構,用於存儲有序的元素集合。

2、操作:


//創建一個空數組
let arr = [];

//添加元素
arr.push(1);
arr.push(2);

//獲取元素
console.log(arr[0]); //1

//獲取數組長度
console.log(arr.length); //2

//刪除元素
arr.splice(0, 1); //從下標0開始刪除1個元素

//遍曆數組
for(let i = 0; i < arr.length; i++){
    console.log(arr[i]);
}

3、應用:

使用數組存儲多個元素,實現數據的批量操作,如購物車中存儲多個商品,網頁中存儲多個評論等。

二、棧

1、定義:棧是一種特殊的數據結構,只能在數組的末尾添加或刪除元素。

2、操作:


//創建一個棧
let stack = [];

//添加元素
stack.push(1);
stack.push(2);

//刪除元素
stack.pop();

//獲取棧頂元素
console.log(stack[stack.length - 1]);

//判斷棧是否為空
console.log(stack.length === 0);

3、應用:

在計算機程序中,棧常用於配合遞歸實現函數調用、括弧匹配等操作。

三、隊列

1、定義:隊列是一種特殊的數據結構,只能在數組的末尾添加元素,在數組的開頭刪除元素。

2、操作:


//創建一個隊列
let queue = [];

//添加元素
queue.push(1);
queue.push(2);

//刪除元素
queue.shift();

//獲取隊列頭部元素
console.log(queue[0]);

//判斷隊列是否為空
console.log(queue.length === 0);

3、應用:

隊列常用於實現廣度優先搜索演算法,並且在計算機中還有很多其他的應用場景,如操作系統中的任務隊列、印表機中的列印隊列等。

四、鏈表

1、定義:鏈表是一種數據結構,由節點組成,每個節點保存數據和指向下一個節點的指針。

2、操作:


//定義一個節點
class Node {
    constructor(val, next = null) {
        this.val = val;
        this.next = next;
    }
}

//創建一個鏈表
let head = new Node(1);
head.next = new Node(2);
head.next.next = new Node(3);

//遍歷鏈表
let cur = head;
while(cur){
    console.log(cur.val);
    cur = cur.next;
}

//在鏈表中插入節點
let newNode = new Node(4);
newNode.next = head.next;
head.next = newNode;

//在鏈表中刪除節點
head.next = head.next.next;

3、應用:

鏈表常用於實現LRU緩存、哈希表中的拉鏈法等。

五、樹

1、定義:樹是一種數據結構,由節點和邊組成,每個節點保存數據,並指向零或多個子節點。

2、操作:


//定義一個節點
class Node {
    constructor(val, children = []) {
        this.val = val;
        this.children = children;
    }
}

//創建一個樹
let root = new Node(1);
root.children = [new Node(2), new Node(3)];

//遍歷樹-深度優先搜索
function DFS(root) {
    console.log(root.val);
    for(let child of root.children){
        DFS(child);
    }
}
DFS(root);

//遍歷樹-廣度優先搜索
function BFS(root) {
    let queue = [root];
    while(queue.length){
        let node = queue.shift();
        console.log(node.val);
        for(let child of node.children){
            queue.push(child);
        }
    }
}
BFS(root);

3、應用:

樹的應用廣泛,如在頁面中渲染組件、文件系統中的目錄結構、計算機網路中的路由表等。

六、圖

1、定義:圖是一種數據結構,由點和邊組成,每個點可以與其他點直接相連。

2、操作:


//定義一個點
class Node {
    constructor(val, neighbors = []) {
        this.val = val;
        this.neighbors = neighbors;
    }
}

//創建一個圖
let node1 = new Node(1);
let node2 = new Node(2);
let node3 = new Node(3);
let node4 = new Node(4);
node1.neighbors = [node2, node4];
node2.neighbors = [node1, node3];
node3.neighbors = [node2, node4];
node4.neighbors = [node1, node3];

//遍歷圖-深度優先搜索
let visited = new Set();
function DFS(node) {
    visited.add(node);
    console.log(node.val);
    for(let neighbor of node.neighbors){
        if(!visited.has(neighbor)){
            DFS(neighbor);
        }
    }
}
DFS(node1);

//遍歷圖-廣度優先搜索
function BFS(node) {
    let queue = [node];
    visited.add(node);
    while(queue.length){
        let curr = queue.shift();
        console.log(curr.val);
        for(let neighbor of curr.neighbors){
            if(!visited.has(neighbor)){
                visited.add(neighbor);
                queue.push(neighbor);
            }
        }
    }
}
BFS(node1);

3、應用:

在現實生活中,圖的應用非常多,如社交網路中的人際關係、地圖中的路徑規劃、路網中的交通流等。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/289598.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-24 03:03
下一篇 2024-12-24 03:03

相關推薦

  • JS Proxy(array)用法介紹

    JS Proxy(array)可以說是ES6中非常重要的一個特性,它可以代理一個數組,監聽數據變化並進行攔截、處理。在實際開發中,使用Proxy(array)可以方便地實現數據的監…

    編程 2025-04-29
  • Python應用程序的全面指南

    Python是一種功能強大而簡單易學的編程語言,適用於多種應用場景。本篇文章將從多個方面介紹Python如何應用於開發應用程序。 一、Web應用程序 目前,基於Python的Web…

    編程 2025-04-29
  • 數據結構與演算法基礎青島大學PPT解析

    本文將從多個方面對數據結構與演算法基礎青島大學PPT進行詳細的闡述,包括數據類型、集合類型、排序演算法、字元串匹配和動態規劃等內容。通過對這些內容的解析,讀者可以更好地了解數據結構與算…

    編程 2025-04-29
  • Python zscore函數全面解析

    本文將介紹什麼是zscore函數,它在數據分析中的作用以及如何使用Python實現zscore函數,為讀者提供全面的指導。 一、zscore函數的概念 zscore函數是一種用於標…

    編程 2025-04-29
  • 全面解讀數據屬性r/w

    數據屬性r/w是指數據屬性的可讀/可寫性,它在程序設計中扮演著非常重要的角色。下面我們從多個方面對數據屬性r/w進行詳細的闡述。 一、r/w的概念 數據屬性r/w即指數據屬性的可讀…

    編程 2025-04-29
  • Python計算機程序代碼全面介紹

    本文將從多個方面對Python計算機程序代碼進行詳細介紹,包括基礎語法、數據類型、控制語句、函數、模塊及面向對象編程等。 一、基礎語法 Python是一種解釋型、面向對象、動態數據…

    編程 2025-04-29
  • 數據結構學生成績管理系統

    在現代教育中,學生成績的管理已經成為了一個不可或缺的部分。藉助數據結構,一個高效、可靠的學生成績管理系統可以被輕鬆實現。 一、數據結構的選擇 在構建學生成績管理系統時,選擇合適的數…

    編程 2025-04-29
  • 解析js base64並轉成unit

    本文將從多個方面詳細介紹js中如何解析base64編碼並轉成unit格式。 一、base64編碼解析 在JavaScript中解析base64編碼可以使用atob()函數,它會將b…

    編程 2025-04-29
  • Node.js使用Body-Parser處理HTTP POST請求時,特殊字元無法返回的解決方法

    本文將解決Node.js使用Body-Parser處理HTTP POST請求時,特殊字元無法返回的問題。同時,給出一些相關示例代碼,以幫助讀者更好的理解並處理這個問題。 一、問題解…

    編程 2025-04-29
  • Matlab二值圖像全面解析

    本文將全面介紹Matlab二值圖像的相關知識,包括二值圖像的基本原理、如何對二值圖像進行處理、如何從二值圖像中提取信息等等。通過本文的學習,你將能夠掌握Matlab二值圖像的基本操…

    編程 2025-04-28

發表回復

登錄後才能評論