資料結構基礎 線性表的鏈式儲存結構 單鏈表

2021-06-28 02:29:50 字數 2355 閱讀 4072

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 線性表...