js 資料結構

2021-08-27 23:47:59 字數 2896 閱讀 8555

樹是電腦科學中經常用到的一種資料結構。樹是一種非線性的資料結構,以分層的方式儲存資料。

二叉樹每個節點的子節點不允許超過兩個。乙個父節點的兩個子節點分別稱為左節點和右節點,通過將子節點的個數限定為2,可以寫出高效的程式在樹中插入、查詢和刪除資料

二叉查詢樹(bst)是一種特殊的二叉樹,相對較小的值儲存在左節點中,較大的值儲存在右節點中。這一特性使得查詢的效率很高,對於數值型和非數值型的資料,比如單詞和字串,都是如此。

二叉查詢樹實現方法

function node(data, left, right) 

function show ()

function bst ()

function insert (data) else

} else }}

}}

遍歷bst的方式有三種:中序遍歷(以公升序訪問樹中所有節點,先訪問左節點,再訪問根節點,最後訪問右節點)、先序遍歷(先訪問根節點,再以同樣的方式訪問左節點和右節點)、後序遍歷(先訪問葉子節點,從左子樹到右子樹,再到根節點)

基本排序演算法,其核心思想是指對一組陣列按照一定的順序重新排列。重新排列時用到的技術是一組巢狀的for迴圈。其中外迴圈會遍歷陣列的每一項,內迴圈則用於比較元素。

氣泡排序是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果它們的順序錯誤就把它們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢「浮」到數列的頂端。

function bubblesort (arr) 

} i = pos

} return arr

}var arr=[3,44,38,5,47,15,36,26,27,2,46,4,19,50,48];

console.log(bubblesort(arr));//[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50]

選擇排序(selection-sort)是一種簡單直觀的排序演算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。

function selectionsort (arr) 

} temp = arr[minindex]

arr[minindex] = arr[i]

arr[i] = temp

} return arr

}var arr=[3,44,38,5,47,15,36,26,27,2,46,4,19,50,48];

console.log(selectionsort(arr));//[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50]

插入排序(insertion-sort)的演算法描述是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。插入排序在實現上,通常採用in-place排序(即只需用到o(1)的額外空間的排序),因而在從後向前掃瞄過程中,需要反覆把已排序元素逐步向後挪位,為最新元素提供插入空間。、

function insertsort (arr) 

arr[j+1] = key

} return arr

}var arr=[3,44,38,5,47,15,36,26,27,2,46,4,19,50,48];

快速排序是處理 大資料集最快的排序演算法之一。它是一種分而治之的演算法,通過遞迴的方法將資料依次分解為包含較小元素和較大元素的不同子串行。該演算法不斷重複這個步驟知道所有資料都是有序的。

這個演算法首先要在列表中選擇乙個元素作為基準值。資料排序圍繞基準值進行,將列表中小於基準值的元素移到陣列的底部,將大於基準值的元素移到陣列的頂部。

function qsort (arr) 

var left =

var right =

var pivot = arr[0]

for (var i = 1; i < arr.length; i++) else

} return qsort(left).concat(pivot, qsort(right))

}var arr=[3,44,38,5,47,15,36,26,27,2,46,4,19,50,48];

console.log(qsort(arr));

在列表中查詢資料有兩種方式:順序查詢和二分查詢。順序查詢適用於元素隨機排列的列表;二分查詢適用於元素已排序的列表。二分查詢效率更高,但是必須在進行查詢之前花費額外的時間將列表中的元素排序。

對於查詢資料,最簡單的方法就是從列表的第乙個元素開始對列表元素逐個進行判斷,直到找到了想要的結果,或者直到列表結尾也沒有找到。這種方法稱為順序查詢,有時也被稱為線性查詢。

function seqsearch (arr, data) 

} return -1;

}var arr=[3,44,38,5,47,15,36,26,27,2,46,4,19,50,48];

console.log(seqsearch(arr, 15))

二分法查詢,也稱折半查詢,是一種在有序陣列中查詢特定元素的搜尋演算法。查詢過程可以分為以下步驟:

function binsearch (arr, data)  else if (arr[middle] > data)  else 

} return -1

}var arr=[3,44,38,5,47,15,36,26,27,2,46,4,19,50,48];

console.log(binsearch(arr, 15))

js資料結構

一 堆疊的概念 在計算機領域中,堆疊是兩種資料結構。棧 佇列優先,先進先出 由作業系統自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。堆 先進後出 動態分配的空間 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os 分配方式倒是類似於鍊錶。二 js的...

js資料結構 棧

棧是一種遵循後進先出 lifo 的資料結構,其總共就兩個主要的操作,分別是push和pop。看上面這張圖可以大致的知道,棧的幾個特點 push操作 pop操作 通過上面的幾個特點,來看一看js如何用 實現乙個棧 class stack push操作 push x push乙個新的資料,棧頂的指向也同...

js 資料結構 map Set

js 對空位的處理,已經很不一致了,大多數情況下會忽略空位。1.擴充套件運算子 spread 是三個點 console.log 1,2,3,4 5 function push array,items 陣列複製 const a1 1,2 const a2 a1.concat const a3 a1 c...