標頭檔案:
#ifndef _linklist_h_#define _linklist_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
cpp檔案:
#include "linklist.h
"#include
using
namespace
std;
//定義乙個煉表頭
typedef struct
_tag_linklist
taglist;
//生成乙個鍊錶
linklist*linklist_create()
//刪除乙個鍊錶
void linklist_destory(linklist*list)
return;}
//清空乙個鍊錶
void linklist_clear(linklist*list)
tlist = (taglist *)list;
tlist->length = 0
; tlist->header.next =null;
return;}
//鍊錶長度
int linklist_length(linklist*list)
tlist = (taglist *)list;
return tlist->length;}//
在某個位置插入乙個節點 //
鍊錶是單向的 pos位置儲存在pos-1的next域裡面
int linklist_insert(linklist* list, linklistnode* node, int
pos)
tlist = (taglist*)list;
current = &(tlist->header); //
current首先指向頭結點
for(int i = 0; ((i < pos) && (current->next !=null)); i++)
//node的next改變 將current的next域的資訊存入node的next域
node->next = current->next;
//current的next域指向node 從而實現插入
current->next =node;
tlist->length++;
return0;
}//獲取某個位置的節點
linklistnode* linklist_get(linklist* list, int
pos)
tlist = (taglist*)list;
current = &(tlist->header); //
current首先指向頭結點
for(int i = 0; ((i < pos) && (current->next !=null)); i++)
temp = current->next;
//返回current的next域為pos位置資訊
return
temp;}
//刪除某個位置的節點
linklistnode* linklist_delete(linklist* list, int
pos)
tlist = (taglist*)list;
current = &(tlist->header);
for(int i = 0; ((i < pos) && (current->next !=null)); i++)
//temp指標指向pos位置的節點
temp = current->next;
//將temp 也就是pos位置的next域值賦給currentnext域 從而實現跳過刪除
current->next =temp->next;
tlist->length--;
return
temp;}
測試函式:
#include #include"linklist.h
"using
namespace
std;
typedef
struct
_teacher
teacher;
intmain()
len =linklist_length(list);
//逐條插入
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);
for (int i = 0; i < linklist_length(list); i++)
cout
/頭刪
while(linklist_length(list) > 0
)
system(
"pause");
return0;
}
基於鏈式鍊錶的棧鏈式儲存的C風格實現
鏈式鍊錶的標頭檔案與cpp檔案見前文 標頭檔案 1 ifndef linkstack h 2 define linkstack h 34 5 typedef void linkstack 6 建立乙個棧 7 linkstack linkstack create 8 刪除乙個棧 9void links...
C 資料結構 鍊錶的鏈式實現
傳統的鍊錶不能實現資料和鍊錶的分離,一旦資料改變則鍊錶就不能用了,就要重新開發。如上說示 外層是teacher,裡面小的是node.ifndef mylinklist h define mylinklist h typedef void linklist 鍊錶上下文,任意型別 typedef str...
順序表的 鏈式儲存(鍊錶)
一.單鏈表節點的型別定義 typedef int elemtype typedef struct node lnode,linklist lnode h,p linklist h,p 其中 p 表示p指向的節點 p data p data表示p指向節點的資料域 p next p next表示p指向節...