資料結構面試考點
棧是一種遵從後進先出(lifo,後進先出)原則的有序集合。新新增的或者待刪除的元素都儲存在棧的末尾。稱作棧頂,另一端就叫棧底。在棧裡,新元素都靠近棧頂,舊元素都接近棧底。
棧的建立
function stack()
接下來,是棧的方法:
push(element) -- 新增新元素到棧頂。
pop() -- 移除棧頂的元素,同時返回被移除的元素。
peek() -- 返回棧頂的元素,但不對棧做任何操作。
isempty() -- 如果棧裡沒有任何元素就返回true,否則返回false。
clear() -- 移除棧裡的所有元素。
size() -- 返回棧裡的元素個數。
佇列是遵循fifo(first in first out, 先進先出)原則的一組有序的項。佇列在尾部新增新元素,並從頂部移除元素。最新新增的元素必須排在佇列的末尾。
首先要乙個用於儲存佇列中元素的資料結果。
function queue()
佇列的方法
enqueue(element) -- 向佇列尾部新增乙個或多個的項。
dequeue() -- 移除佇列的第一(即排在佇列最前面的)項,並返回被移除的元素。
front() -- 返回佇列中第乙個元素,也就是最先被移除的元素。佇列不坐任何編訂。
isempty()--佇列是否包含元素。
size() -- 返回佇列包含的元素個數。
優先佇列優先佇列就是元素的新增和移除是基於乙個優先順序的。在現實中的例子就是很多時候機場登機的順序,是頭等艙的乘客和商務艙的乘客優先順序高於經濟艙的乘客。可以先登機。
實現乙個優先佇列,有兩種選項:設定優先順序,然後再正確的位置新增元素;或者用入列操作新增元素,然後按照優先順序移除它們。我們將會在正確的位置新增元素。
說到儲存多個元素,陣列可能是最常用的資料結構。這種資料結構非常方便,提供了語法來訪問它的元素。但是陣列的缺點就是對元素進行插入或者刪除操作的成本很高,需要移動元素
鍊錶儲存有序的元素集合,但不同於陣列,鍊錶中的元素在記憶體中並不是連續放置的。每個元素由乙個儲存元素本身的節點和乙個指向下乙個元素的引用組成。鍊錶的乙個好處在於,增加或刪除元素的時候不需要移動其它元素。陣列的另乙個細節是可以直接訪問任何位置的任何元素,而要訪問鍊錶中間的乙個元素,需要從起點開始迭代鍊錶直到找到所需的元素。
建立鍊錶
function linkedlist()
var length = 0;
var head = null;
}
鍊錶的方法
insert(position, element) -- 向鍊錶的特定位置插入乙個新的項
remove(element) -- 從鍊錶中移除元素
indexof(element) -- 返回元素在鍊錶中的索引。如果鍊錶中沒有該元素則返回-1
removeat(position) -- 從鍊錶的特定位置移除一項
isempty() -- 如果鍊錶中不包含任何元素,返回true,如果鍊錶長度大於0返回false
size() -- 返回鍊錶包含的元素個數
陣列建立和初始化,你可以通過var arr=new arrray()
或者var array=new array('a','b','c')
或者最通用的var arr=
陣列的常用方法
concat
every–對陣列中的每一項執行給定函式,如果該函式對每一項都返回true,則返回true.
filter–對陣列中的每一項執行給定函式,返回該函式會返回true的項組成的陣列。
foreach–對陣列中的每一項執行給定函式。
join–將所有的陣列元素連線成乙個字串。
indexof–返回第乙個與給定引數相等的陣列元素的索引,沒有則返回-1
lastindexof–返回在陣列中搜尋到的與給定引數相等的元素的索引裡最大的項。
map–對陣列中的每一項執行給定函式,返回每次函式呼叫的結果組成的陣列。
reverse–顛倒陣列中元素的順序。
slice–傳入索引值,將陣列對應索引範圍內的元素作為新陣列返回。
some–對陣列中的每一項執行給定函式,如果任一項返回true,則返回true。
sort–按照字母順序對陣列排序,支援傳入指定排序方法的函式作為引數。
tostring–將陣列作為字串返回
valueof–將陣列作為字串返回
鍊錶查詢o(n),插入o(1);陣列查詢o(1),插入o(n)。
對於有序的陣列(不能是鍊錶,鍊錶需要乙個乙個的next引用),可以用折半查詢o(nlogn),有遞迴和非遞迴兩種方式。
查詢top10大的數,可以維護乙個大小為10的最大堆。
對於資料量多的,可以用雜湊,能在o(1)情況下查到(其實就是雜湊索引),也可以建立索引。
對於查詢大小為n-1的陣列中(每個值不同,在1~n中,等於漏乙個),可以用位圖法,等於是new乙個bool型的陣列,因為bool型只佔1個位,而乙個int佔4位元組(4*8=32位),大小為1/32,而且在o(n)解決了問題。思想其實是雜湊,以數的值作為bool陣列的下表。
雜湊的概念:將乙個物件通過一種雜湊函式,雜湊成乙個數值,這個數值是陣列的下標,而陣列裡存放的即為這個物件,這就是建雜湊表的過程。如果要查詢,其實就是上面過程一樣。
插入排序
選擇排序
氣泡排序
堆排序快速排序
歸併排序
前端面試中常見的資料結構題
一 鍊錶 1 如何判斷乙個煉表裡有沒有環 思路 快慢指標,乙個走的快,乙個走的慢,那麼若干步以後,快慢指標會相遇。definition for singly linked list.function listnode val var hascycle function head var slow h...
前端面試總結 資料結構與演算法一
陣列是比較簡單的內容,這裡介紹陣列常用的操作。陣列的建立和初始化非常簡單,你可以通過var arr new array 或者var arr new array a b c 來建立乙個陣列。當然也可以簡單的var arr 這也是最通常的用法。需要在陣列末端追加元素,我們可以簡單的使用number nu...
前端面試總結 資料結構與演算法二
棧是一種遵從後進先出 lifo 原則的有序集合。新新增的或者待刪除的元素都儲存在棧的末尾。稱作棧頂,另一端就叫棧底。在棧裡,新元素都靠近棧頂,舊元素都接近棧底。function stack 接下來,是棧的方法 push element 新增新元素到棧頂。pop 移除棧頂的元素,同時返回被移除的元素。...