線性資料結構

2021-10-23 16:30:27 字數 2011 閱讀 2800

線性資料結構分為一維,二維,三維,四維等,

一維資料結構(線性資料結構, 陣列,鍊錶) 線性的資料結構強調儲存與順序。陣列最大的特點是定長,陣列的長度是不可以變的,如果陣列需要擴容,擴容不是直接往後擴容,而是直接在乙個新的空間生成乙個更長的陣列,正因為基於這種方式,陣列擴容是消耗效能的。原因:(1.先拿乙個能放得下陣列長度的新的內容空間,2. 將原來的陣列的內容賦值到新的陣列中,這兩個過程都是js引擎幫我們做好了,所以在前端的書寫陣列可以不宣告陣列的長度)

思考:為啥陣列的擴容不是直接往後擴容? 因為作業系統分配的內容空間是分配乙個連續的長度的空間

陣列的特點:

1.儲存在物理空間,是連續的

2.底層陣列長度是不可以變的,(前端可以變是js引擎的優化)

3.陣列的變數,指向了陣列第乙個元素的位置

陣列的優缺點

缺點:1.因為空間必須的是連續的,所以如果陣列比較大,當系統的空間碎片比較多的時候,容易存不下(作業系統整理空間碎片,非常慢)

2.因為陣列的長度是固定的,所以內容難以被新增和刪除

鍊錶(預設是單鏈表):我想傳遞乙個鍊錶,我必須傳遞鍊錶的根節點,

每乙個節點都認為自己是跟節點

鍊錶的特點:

1.鍊錶在空間上不是連續的。

2.鍊錶每存乙個值,都要多開銷乙個引用

優點:

1.只要記憶體足夠大,就能存的下,不用擔心空間碎片問題。

2.鍊錶的新增和刪除非常的容易(只要解決引用問題就好) 缺點:

1.查詢速度比較慢,(指的是查詢某個位置)

2.鍊錶的每乙個系欸但都需要建立乙個指向next的引用,浪費一些空間,但是也可以避免,當節點內資料越多的時候,這部分佔的比列越小,資料越多越適合使用鍊錶

思考:如何建立乙個鍊錶?

function

node

(value)

var a =

newnode(1

);var b =

newnode(2

);var c =

newnode(3

);var d =

newnode(4

);a.next = b;

b.next = c;

c.next =

null

;如何獲取位置呢?分別列印a,b,c,d的值

console.

log(a.value)

// 列印的是a的值

console.

log(a.next.value)

// 列印的是b的值

console.

log(a.next.next.value)

// 列印的是c的值

console.

log(a.next.next.next.value)

// 列印的是d的值

以上就可以把a創成乙個鍊錶。

線性資料結構的遍歷

遍歷: 將乙個集合中的每乙個元素進行獲取並且檢視

// 迴圈遍歷鍊錶

function

looplink

(root)

else

temp = temp.next;}}

looplink

(a);

// 就會列印出1,2,3,4,

// 遞迴遍歷鍊錶, 遞迴遍歷必須有出口

function

looplink1

(root)

// 鍊錶的逆置

//鍊錶的逆置的突破點是在找到鍊錶的最後乙個節點

function

nizhi

(root)

else

}var ni =

nizhi

(node1)

;looplink

(ni)

;

資料結構 線性結構

typedef int position typedef struct lnode list struct lnode 初始化 list makeempty 查詢 define error 1 position find list l,elementtype x 插入 bool insert lis...

資料結構 線性結構

線性表基本操作有 1 list makeempty 初始化乙個新的線性表 2 elementtype findkth list l,int i 根據指定的位序i,返回l中相應元素ai i是下標 3 position find list l,elementtype x 已知x,返回線性表l中與x相同的...

線性資料結構

一般將資料結構分為兩在類 線性資料結構和非線性資料結構。線性資料結構有線性表 棧 佇列 串 陣列和檔案 非線性資料結構有樹和圖。線性表 一 arraylist 1 arraylist底層採用陣列實現,當使用不帶引數的構造方法生成arraylist物件時,實際上會在底層生成長度為10的object型別...