玩轉資料結構之鍊錶

2021-10-03 09:32:24 字數 2411 閱讀 7949

線性資料結構中,動態陣列、棧、佇列,底層都需要依託靜態陣列,靠resize來解決固定容量的問題。

鍊錶是真正的動態資料結構,並且是最簡單的動態資料結構。 

鍊錶(linked list):資料儲存jii在」節點「(node)中

優點:真正的動態,不需要處理固定容量的問題。

缺點:喪失了隨機訪問的能力。

陣列最好用於索引有語意的情況,score[2],最大的優點:支援快速查詢

鍊錶不適合用於索引有語義的情況,最大的優點:動態

基本實現如下:

public class linkedlist

public node(e e)

public node()

@override

public string tostring()

}private node head;

private int size;

public linkedlist()

//獲取鍊錶元素個數

public int getsize()

//返回鍊錶是否為空

public boolean isempty()

}

如何在煉表頭新增元素?

當新增乙個新節點node,其值為666時,將node的next指向現在鍊錶的node,然後將head移動到新的node

//在煉表頭新增新的元素e

public void addfirst(e e)

如何在鍊錶中間新增元素?新增操作的第一步肯定是建立乙個新節點

關鍵就是找到待新增節點的前乙個節點,記為prev

具體實現:

//在鍊錶index(0-based)位置新增新的元素e

//並不是常見操作,一般面試、習題中會出現

public void add(int index, e e)

在鍊錶末尾新增元素?

public void addlast(e e)
思考:執行新增元素操作時,需要對頭節點單獨處理很不方便,可以引入虛擬頭節點dummyhead具體實現:

public class linkedlist

public node(e e)

public node()

@override

public string tostring()

}private node dummyhead;

private int size;

public linkedlist()

//獲取鍊錶元素個數

public int getsize()

//返回鍊錶是否為空

public boolean isempty()

//在鍊錶index(0-based)位置新增新的元素e

//並不是常見操作,一般面試、習題中會出現

public void add(int index, e e)

}public void addlast(e e)

//在煉表頭新增新的元素e

public void addfirst(e e)

}

查詢和修改

//獲取index位置元素

public e get(int index)

//獲取鍊錶最後的元素

public e getlast()

//修改index位置元素

public void set(int index, e e)

//查詢是否有元素e

public boolean contains(e e)

return false;

}

刪除元素

//從鍊錶中刪除index位置元素,並返回刪除的元素

public e remove(int index)

//從鍊錶中刪除第乙個元素,返回刪除元素

public e removefirst()

public e removelast()

玩轉資料結構之遞迴

遞迴本質上,將原來的問題,轉化成更小的同一問題 遞迴函式的呼叫,本質上就是函式的呼叫,只不過是函式在內部呼叫自己 寫遞迴的 一般兩個部分 1.遞迴的終止條件也叫最基本問題 2.遞迴演算法也叫原問題轉化為最基本問題的過程 舉例 陣列求和 sum a0 a1 an 1 求n個數的和 遞迴就是把原問題轉化...

玩轉資料結構《一》

集合是承載元素的容器 特點 每個元素只能存在一次 優點 去重 linkedlist bstadd o n o logn contains o n o logn remove o n o logn 有序集合 元素中具有順序性 多重集合 有序對映和無序對映 有序對映中鍵具有順序性的 無序對映中鍵沒有順序...

資料結構 表之煉表

頭插法建立 尾插法建立 顯示 銷毀 include include using namespace std typedef int elemtype typedef struct lnode linklist void createlinklistf linklist l,elemtype a,in...