n個結點鏈結成乙個鍊錶,即為線性表的鏈式儲存結構,因為此鍊錶的每個結點中只包含乙個指標域,所以叫做單鏈表。
線性表的單鏈表儲存結構:
typedef struct node
node;
typedef struct node *linklist; /* 定義linklist */
單鏈表的讀取:
/* 初始條件:順序線性表l已存在,1<=i<=listlength(l) */
/* 操作結果:用e返回l中第i個資料元素的值 */
status getelem( linklist l, int i, elemtype *e )
if( !p || j > i )
return error; /* 第i個結點不存在 */
*e = p->data; /* 取第i個結點的資料 */
return ok;
}
單鏈表的插入:
/* 初始條件:順序線性表l已存在,1<=i<=listlength(l) */
/* 操作結果:在l中第i個結點位置之前插入新的資料元素e,l的長度加1 */
status listinsert( linklist *l, int i,elemtype e )
if( !p || j > i )
return error; /* 第i個結點不存在 */
s = ( linklist )malloc( sizeof( node ) ); /* 生成新節點(c標準函式) */
s->data = e;
s->next = p->next; /* 將p的後繼結點賦值給s的後繼 */
p->next = s; /* 將s賦值給p的後繼 */
return ok;
}
單鏈表的刪除:
/* 初始條件:順序線性表l已存在,1<=i<=listlength */
/* 操作結果:刪除l的第i個結點,並用e返回其值,l的長度減1 */
status listdelete( linklist *l, int i, elemtype *e )
if( !( p->next ) || j > i )
return error; /* 第i個結點不存在 */
q = p->next;
p->next = q->next; /* 將q的後繼賦值給p的後繼 */
*e = q->data; /* 將q結點中的資料給e */
free( q ); /* 讓系統**此結點,釋放記憶體 */
return ok;
}
單鏈表的整表建立(頭插法):
/* 隨機產生n個元素的值,建立帶表頭結點的單鏈線性表l(頭插法) */
void createlisthead( linklist *l, int n )
}
單鏈表的整表建立(尾插法):
/* 隨機產生n個元素的值,建立帶表頭結點的單鏈線性表l(尾插法) */
void createlisttail( linklist *l, int n )
r->next = null; /* 表示當前鍊錶結束 */
}
單鏈表的整表刪除:
/* 初始條件:順序線性表l已存在 */
/* 操作結果:將l重置為空表 */
status clearlist( linklist *l )
( *l )->next = null; /* 頭結點指標域為空 */
return ok;
}
適用範圍:
1,需要頻繁插入和刪除
2,線性表中的元素個數變化較大或不知道有多大時
對比與順序儲存結構,
優缺點:
1,儲存分配方式
順序儲存結構用一段連續的儲存單元依次儲存線性表的資料元素;
單鏈表採用鏈式儲存結構,用一組任意的儲存單元存放線性表的元素。
2,時間效能
在查詢方面,順序儲存結構為o(1),單鏈表為o(n);
在插入和刪除方面,順序儲存結構需要平均移動表長一半的元素,時間為o(n),而單鏈表僅為o(1)。
3,空間效能
順序儲存結構需要預分配儲存空間,分大了,浪費,分小了易發生上溢;
單鏈表不需要預分配儲存空間,只要有就可以分配,元素個數也不受限制。
資料結構 鏈式儲存線性表
鏈式儲存結構的線性表 簡稱為鍊錶 將採用一組位址任意的儲存單元存放線性表中的資料元素,鏈式結構的線性表不會按線性的邏輯順序來儲存資料元素,它需要在每乙個資料元素裡儲存乙個引用下乙個資料元素的引用。優點 插入 刪除元素快,充分利用計算機記憶體空間 缺點 查詢元素需要整體遍歷,空間開銷大 單鏈表 cre...
線性表的鏈式儲存 資料結構
為了表示每個資料元素與其直接後繼資料元素之間的邏輯關係,除了儲存本身的資訊之外,還需儲存乙個指示其直接後繼的資訊 即直接後繼的儲存位置 我們把儲存資料元素資訊的位置稱為資料域,把儲存其直接後繼資訊的位置稱為指標域。這兩部分組成資料元素的結點 node 頭結點頭結點是為了操作的統一和方便而設立的,放在...
資料結構 線性表之鏈式儲存結構
資料結構定義 common.h ifndef hi comm h define hi comm h include include include include define list init size 100 線性表儲存空間的初始分配量 define list increment 10 線性表...