分類:
* 順序存儲結構——順序表
* 鏈式存儲結構——鏈表數組
比較:spa
順序表:
* 能夠隨機訪問
* 佔用連續空間,存儲分配只能預先進行,即靜態分配。一旦分配好了,在對其操做過程當中不變
* 插入操做須要移動多個元素3d
鏈表
* 不能夠隨機訪問
* 不須要佔用連續空間,動態分配。即在要建立新結點的時候再進行空間劃分。
* 插入操做不須要移動多個元素
* 每一個結點劃一部分空間存儲指向下一結點位置的指針,故存儲空間利用率比順序表稍低指針
頭結點可帶、可不帶。code
不帶頭結點的,head指針則指向開始結點,當head爲null時,鏈表爲空。blog
帶頭結點的,head指針始終不爲空。head -> next 爲null時,鏈表爲空。ip
頭結點不存儲信息,只是做爲標記
io
雙鏈表就是在單鏈表結點上增添了一個指針域,指向當前結點的前驅。這樣就能夠方便的由其後繼來找到其前驅,而實現輸出終端結點到開始結點的數據序列。class
一樣,雙鏈表也分爲帶頭結點的雙鏈表和不帶頭結點的雙鏈表,狀況相似於單鏈表。帶頭結點的雙鏈表 head->next 爲null
的時候鏈表爲空。不帶頭結點的雙鏈表head爲null的時候鏈表爲空。cli
只要將單鏈表的最後一個指針域(空指針)指向鏈表中第一個結點便可(這裏之因此說第一個結點而不說是頭結點是由於,若是循環單鏈表是帶頭結點的則最後一個結點的指針域要指向頭結點;若是循環單鏈表不帶頭結點,則最後一個指針域要指向開始結點)。
帶頭結點的循環單鏈表當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 { int data[MAX]; //存放順序表元素的數組(默認是int型,可根據題目要求將int換成其餘類型)。存放順序表的長度。 int length; //存放順序表的長度。 } Sqlist; //順序表類型的定義。
typedef struct LNode { int data; //data中存放結點數據域(默認是int型)。 struct LNode *next; //指向後繼結點的指針。 }LNode; //定義單鏈表結點類型。
typedef struct DLNode { int data; //data中存放結點數據域(默認是int型) struct DLNode *prior; //指向後繼結點的指針 struct DLNode *next; //指向前驅結點的指針 }DLNode; //定義單鏈表結點類型