分類:
* 順序儲存結構——順序表
* 鏈式儲存結構——鍊錶
比較:順序表:
* 可以隨機訪問
* 占用連續空間,儲存分配只能預先進行,即靜態分配。一旦分配好了,在對其操作過程中不變
* 插入操作需要移動多個元素
鍊錶* 不可以隨機訪問
* 不需要占用連續空間,動態分配。即在要建立新結點的時候再進行空間劃分。
* 插入操作不需要移動多個元素
* 每個結點劃一部分空間儲存指向下一結點位置的指標,故儲存空間利用率比順序表稍低
頭結點可帶、可不帶。
不帶頭結點的,head指標則指向開始結點,當head為null時,鍊錶為空。
帶頭結點的,head指標始終不為空。head -> next 為null時,鍊錶為空。
頭結點不儲存資訊,只是作為標記
雙鏈表就是在單鏈表結點上增添了乙個指標域,指向當前結點的前驅。這樣就可以方便的由其後繼來找到其前驅,而實現輸出終端結點到開始結點的資料序列。
同樣,雙鏈表也分為帶頭結點的雙鏈表和不帶頭結點的雙鏈表,情況類似於單鏈表。帶頭結點的雙鏈表 head->next 為null
的時候鍊錶為空。不帶頭結點的雙鏈表head為null的時候鍊錶為空。
只要將單鏈表的最後乙個指標域(空指標)指向鍊錶中第乙個結點即可(這裡之所以說第乙個結點而不說是頭結點是因為,如果迴圈單鏈表是帶頭結點的則最後乙個結點的指標域要指向頭結點;如果迴圈單鏈表不帶頭結點,則最後乙個指標域要指向開始結點)。
帶頭結點的迴圈單鏈表當head等於head->next時煉表為空;
不帶頭結點的迴圈單鏈表當head等於null時煉表為空。
迴圈雙鏈表的構造源自雙鏈表,即將終端結點的nnext指標指向鍊錶中第乙個結點,將鍊錶中第乙個結點的prior指標指向終端結點。
帶頭結點的迴圈雙鏈表當head->next和heaad->prior兩個指標都等於head時煉表為空。
不帶頭結點的迴圈雙鏈表當head等於null的時候為空。
這種鍊錶借助一維陣列來表示,例如:
線性表的定義
#define max 100 //這裡定義乙個整型常量max,值為100
###線性表的定義
#define max 100
1. 順序表的結構定義
typedef struct
sqlist; //順序表型別的定義。
typedef struct lnode
lnode;
//定義單鏈表結點型別。
typedef struct dlnode
dlnode; //定義單鏈表結點型別
大話資料結構學習筆記(二)
測定執行時間最可靠的方法就是計算對執行時間有消耗的基本操作的執行次數。在評定演算法的優劣時,與最高次項相乘的常數並不重要,而與最高端項的階數有關。演算法時間複雜度 大o記法。o 1 常數階,o n 線性階,o n 2 平方階。推導大o階 1.用常數1取代執行時間中的所有加法常數 2.在修改後的執行次...
大話資料結構學習筆記(二)
演算法 algorithm 是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條指令表示乙個或多個操作。演算法五個基本特性 輸入 輸出 有窮性 確定性和可行性。1 輸入輸出 演算法具有零個或多個輸入,乙個或多個輸出。2 有窮性 指演算法在執行有限的步驟之後,自動結束而不會出現無限迴...
資料結構學習筆記(緒論二)
計算任意n個整數之和。使用不同的演算法求和,比較優劣。典型演算法int sum array claassical int a,int n 該演算法複雜度 t n o n 線性遞迴 遞迴 減而治之,將大問題分解成乙個小的子問題和另乙個稍大的問題,一步一步自頂向下分解稍大問題,最終解決問題。int su...