#define ok 1
#define error 0
typedef int status;
typedef struct
node;
typedef struct node *linklist; // 定義單鏈表
// 獲取單鏈表的長度
status getelem(linklist l, int i, elemtype *e)
if (!p || j > i) // 當p為空或者j大於i時
return error; // 返回錯誤
*e = p->data; // 將p的值賦給e
return ok; // 返回ok
}// 在單鏈表中插入元素
status listinsert(linklist *l, int i, elemtype e)
if (!p || j > i) // 當p為空或者j大於i時
return error; // 返回錯誤
s = (linklist)malloc(sizeof(node)); // 分配空間
s->data = e; // 將e賦給新結點
s->next = p->next; // 將新結點插入到p的後面
p->next = s; // 將p的後繼指向新結點
return ok; // 返回ok
}// 刪除單鏈表中的第i個元素
status listdelete(linklist *l, int i, elemtype *e)
if (!(p->next) || j > i) // 當p為空或者j大於i時
return error; // 返回錯誤
q = p->next; // q指向待刪除結點
p->next = q->next; // 將q的後繼指向p的後繼
*e = q->data; // 將q的值賦給e
free(q); // 釋放q,free函式的作用是釋放記憶體
return ok; // 返回ok}/*
插入和刪除演算法都是由2部分組成,第一部分就是查詢第i個元素,第二部分就是插入或刪除元素。
對於插入或刪除資料越頻繁的操作,單鏈表比起順序儲存來說,單鏈表的優勢是很明顯的。
*/
單鏈表與結構與順序結構的優缺點:
①儲存分配的方式不同,順序儲存結構用一段連續儲存單元一次儲存線性表的資料元素,單鏈表則採用鏈式儲存結構,用一組任意的儲存單元存放線性表的元素。
②時間效能:查詢:順序儲存結構:o(1),單鏈表o(n),
插入和刪除:順序儲存結構需要平均移動表長一半的元素,時間複雜度為o(n);單鏈表在找出位置的指標後,插入和刪除時間複雜度僅為o(1)
③空間效能:順序儲存結構需要預分配儲存空間,分大了就浪費,分小了,就容易發生溢位;單鏈表不需要分配空間,只要有就分配,元素個數也不收限制。
大話資料結構學習 線性表的順序儲存結構
define maxsize 20 typedef int elemtype typedef struct sqlist 初始化順序表 status initlist sqlist l 返回順序表的長度 int listlength sqlist l define ok 1 define error...
資料結構學習 線性表
線性表一般分為順序結構和鏈式結構。順序表裡面元素的位址是連續的,如陣列 鍊錶裡面節點的位址不是連續的,是通過指標連起來的,如單鏈表 順序結構 優點 易於查詢,索引快 list n 這樣的操作,o 1 複雜度。缺點 擴充套件性弱,不易刪除 插入,這兩項操作均是o n 的時間複雜度 鍊錶結構 優點 擴充...
資料結構學習 線性表
考試前複習下資料結構,把一些知識點整理在這!主要參考了殷人昆主編的 資料結構 用物件導向方法與c 語言描述 這本書,以及中山大學劉聰老師的課件內容!鍊錶雙鏈表 線性表 linear list 是由n n 0 個資料元素 結點 a 0 a 1 a 2 a n 1 組成的有限序列。維基百科 線性表是乙個...