鏈式鍊錶的C風格實現

2022-01-11 23:53:18 字數 3370 閱讀 8716

標頭檔案:

#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指向節...