鍊錶實現的邏輯分析**
為了實現業務結點的靈活定義,我們需要定義單獨定義鍊錶結點來實現鍊錶的串接與查詢,而要讓業務結點包含鍊錶結點,以實現通過鍊錶結點將業務結點串接起來。
而為了實現業務結點與鍊錶結點的位址統一,我們在定義業務結點時要將鍊錶結點包含在頭部,以實現目的。 示意圖如下圖所示。
鍊錶結點定義:
typedef struct _tag_linklistnode
linklistnode;
定義業務結點時將鍊錶結點包含進來
typedef struct teacher
teacher;
linklist.h
#ifndef _mylinklist_h_
#define _mylinklist_h_
typedef void linklist;
typedef struct _tag_linklistnode
linklistnode;
linklist* linklist_create();
void linklist_destroy(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_
linklist.c
先定義乙個鍊錶控制代碼,注入乙個頭結點和存放鍊錶長度的變數。
typedef struct _tag_linklist
tlinklist;
建立鍊錶,通過控制代碼申請鍊錶記憶體,進行長度和指標初始化。將控制代碼的指標位址返回
linklist* linklist_create()
銷毀和清空鍊錶
void linklist_destroy(linklist* list)
return ;
}void linklist_clear(linklist* list)
tlist = (tlinklist *)list;
tlist->length = 0;
tlist->header.next = null;
return ;
}
返回長度
插入結點,定義乙個current結點從頭結點開始查起,到pos位置結束
int linklist_insert(linklist* list, linklistnode* node, int pos)
tlist = (tlinklist *)list;
current = &(tlist->header);
for (i = 0; i < pos&&(current->next!=null); i++)
node->next = current->next;
current->next = node;
tlist->length++;
return 0;
}
刪除結點
linklistnode* linklist_delete(linklist* list, int pos)
tlist = (tlinklist *)list;
current = &(tlist->header);
for (i = 0; i < pos && (current->next != null); i++)
ret = current->next;
current->next = ret->next;
tlist->length--;
return ret;
}
獲取結點
linklistnode* linklist_get(linklist* list, int pos)
tlist = (tlinklist *)list;
current = &(tlist->header);
for (i = 0; i < pos && (current->next != null); i++)
return current->next;
}
測試用例
ret = linklist_insert(list, (linklistnode*)&t5, 0);
for (i = 0; i < linklist_length(list); i++)
printf("tmp->age:%d", tmp->age);
}
資料結構C語言實現 線性鍊錶
declaration.h ifndef declaration h included define declaration h included define true 1 define false 0 define ok 1 define error 0 define infeasible 1 ...
資料結構 線性表(C語言實現)
一.線性表 1 定義 是由同一型別的資料元素構成的有序序列的線性結構。2 儲存實現 順序儲存,鏈式儲存 順序儲存的優點 儲存密度大,由於用的是陣列不需要儲存位址。順序儲存的缺點 對順序表插入刪除時需要移動資料元素來實現,影響執行效率 鏈式儲存的優點 對線性表的插入刪除不需要移動資料元素,只需要修改鏈...
資料結構線性表C語言實現
include include define true 1 define false 0 define ok 1 define error 0 define infeasible 1 define overflow 2 define initsize 100 typedef int status t...