1.概念
(1)為了儲存每個資料元素和其直接後繼元素之間的邏輯關係,每個元素除了儲存本身的資訊之外,還需儲存只是其直接後繼的資訊。n個結點鏈結成乙個鍊錶,每個結點只包含乙個指標域,又叫單鏈表。
(2)單鏈表正是通過每個結點的指標域將線性表的資料元素按其邏輯次序鏈結在一起。
(3)表頭結點:鍊錶中的第乙個結點,包含指向第乙個資料元素的指標和鍊錶自身的一些資訊。
2.實現過程
(1)linklist.h
#ifndef _mylinklist_h_
#define _mylinklist_h_
typedef void linklist;
typedef struct _tag_linklistnode
linklistnode;
linklist* linklist_create();
void linklist_destory(linklist* list);
void linklist_clear(linklist* list);
int linklist_length(linklist* list);
int linklist_insert(linklist* list, linklistnode* node, int pos);
linklistnode* linklist_get(linklist* list, int pos);
linklistnode* linklist_delete(linklist* list, int pos);
#endif _mylinklist_h_
(2)linklist.c
#include #include #include #include "linklist.h"
typedef void linklist;
typedef struct _tag_linklist
tlinklist;
linklist* linklist_create()
void linklist_destory(linklist* list)
return ;
}void linklist_clear(linklist* list)
tlist = (tlinklist*)list;
tlist->length = 0;
tlist->header.next = null;
return ;
}int linklist_length(linklist* list)
tlist = (tlinklist*)list;
return tlist->length;
}int linklist_insert(linklist* list, linklistnode* node, int pos)
tlist = (tlinklist*)list;
current = &(tlist->header);
for (int i = 0; i < pos && (current->next != null); i++)
//1 讓node連線後續結點
node->next = current->next;
//2 讓node連線前面的鍊錶
current->next = node;
tlist->length++;
return 0;
}linklistnode* linklist_get(linklist* list, int pos)
tlist = (tlinklist*)list;
current = &(tlist->header);
for (int i = 0; i < pos && (current->next != null); i++)
return current->next;
}linklistnode* linklist_delete(linklist* list, int pos)
tlist = (tlinklist*)list;
current = &(tlist->header);
for (int i = 0; i < pos && (current->next != null); i++)
//1 快取被刪除的結點位置
ret = current->next;
//2 鏈結後面的結點
current->next = ret->next;
tlist->length--;
return ret;
}
(3)demo.c
#include
#include
#include #include "linklist.h"
typedef struct teacher
teacher;
void maindm005()
//插入值
ret = linklist_insert(list, (linklistnode*)&t1, 0);
ret = linklist_insert(list, (linklistnode*)&t2, 0);
ret = linklist_insert(list, (linklistnode*)&t3, 0);
ret = linklist_insert(list, (linklistnode*)&t4, 0);
ret = linklist_insert(list, (linklistnode*)&t5, 0);
len = linklist_length(list);
//遍歷
for (i = 0; i < len; i++)
printf("tmp->age:%d ", tmp->age);
} printf("\n");
//刪除元素
while (len > 0)
printf("tmp->age:%d ", tmp->age);
} printf("\n");
linklist_destory(list);
system("pause");
return;
}
3.優缺點
(1)優點
無需一次性控制鍊錶的容量;插入和刪除操作無需一定資料元素。
(2)缺點
資料元素必須儲存后級元素的位置資訊;獲取指定資料的元素操作需要順序訪問之前的元素。
線性表的鏈式儲存的實現(二)
18.11.14 初學者食用 之前的合併線性表是用順序儲存結構做的,這裡鏈式儲存結構是線性表的另一種構建方式。總的來說,這種線性表由乙個頭結點 通常是有的 和很多個結點 每個結點由資料域 data 和指標域 next 也就是乙個存資料的地方和乙個存指標的地方 組成。有頭結點是為了增強可讀性,它的好處...
線性表的鏈式儲存實現
include include 下面的單鏈表是帶頭節點的 typedef int elementtype struct listnode typedef struct listnode list 函式宣告 int insert list tmp,elementtype x,int pos void ...
(資料結構)實驗二 線性表的鏈式儲存結構
1 深入了解線性表的邏輯結構特性及其基本操作。2 熟練掌握線性表的鏈式儲存結構的定義及其基本操作的c 語言實現。3 掌握單向鍊錶 單向迴圈鍊錶的應用,逐步培養解決實際問題的能力。4 能夠從時間和空間複雜度的角度綜合比較線性表兩種儲存結構的不同特點及其適用場合。1 一元稀疏多項式計算器 1 設pn x...