1. 程式人生 > >資料結構淺談

資料結構淺談

時間:2017年4月21日15:47:46

資料結構是計算機儲存、組織資料的方式。資料結構是指相互之間存在一種或多種特定關係的資料元素的集合。通常情況下,精心選擇的資料結構可以帶來更高的執行或者儲存效率。[百度百科]

資料結構分為八類:陣列-array、佇列-queue、堆-heap、棧-stack、連結串列-linked list、樹-tree、圖-graph、散列表-hash。

    資料結構是人為定義的一種模型,看不見摸不著但可以用概念清晰形容出來,即程式設計思想;物件和麵向物件程式設計的思想尤為重要,只可意會不可言傳,聽不懂沒關係,可以通過經年累月的摸索和總結去深刻認知。

    運用js中一切皆物件的思想,可以很方便的去構造出各種複雜的資料型別物件。所有的資料結構都可以被實現為物件。JavaScript 提供了多種方式來建立和使用物件。這裡通過如下方式建立:定義包含屬性和方法宣告的建構函式, 並在建構函式後緊跟方法的定義。

1、陣列

2、棧

    棧,stack,儲存五種(undefined、null、boolean、number、string)基本資料型別的 值,這些 值 佔用的記憶體空間固定(資料大小確定),由系統自動分配自動釋放。(可以直接訪問資料)

    棧,是一種高效的資料結構, 因為資料只能在棧頂新增或刪除, 所以這樣的操作很快;是一種特殊的列表, 棧內的元素只能通過列表的一端訪問, 這一端稱為棧頂;一摞盤子是現實世界中常見的棧的例子;棧具有後入先出的特點, 所以任何不在棧頂的元素都無法訪問;為了得到棧底的元素, 必須先拿掉上面的元素。

    屬性:
top  棧陣列的第一個空位置
empty 棧內是否含有元素,用 length 屬性也可以達到同樣的目的
    方法:
push() 元素入棧,
pop() 元素出棧,(也可以訪問棧頂的元素,但是呼叫該方法後,棧頂元素被刪除)
peek() 預覽棧頂元素,只返回棧頂元素,不刪除它。
length() 返回棧內元素的個數(top應該是等於陣列的length的,所以用top屬性也可)
clear() 清除棧內所有元素

    棧類的建構函式
function Stack() {
    this.dataStore = []; //底層資料結構是陣列
    this.top = 0; //top應該是等於陣列的length的
    this.push = push;
    this.pop = pop;
    this.peek = peek;
    this.length = length;
    this.clear = clear;
}

    將push() pop() peek() length() clear方法重寫就可以得到棧類;

3、佇列

4、連結串列

5、樹

6、圖

7、堆

    堆,heap,儲存引用型別(object、array、function)的 值,這些 值 佔用的記憶體空間不定(資料大小不確定)

,由系統動態分配且不會釋放。(引用型別的地址指標儲存在 棧 中,當我們訪問引用型別的值時,首先從棧中獲得該物件的地址指標,然後再從堆記憶體中取得所需的資料。)

8、散列表

    散列表,Hash Table,也叫雜湊表,是根據關鍵碼值(key value)而直接進行訪問的資料結構