C 資料結構 鍊錶的鏈式實現

2021-09-07 02:23:19 字數 3124 閱讀 9170

傳統的鍊錶不能實現資料和鍊錶的分離,一旦資料改變則鍊錶就不能用了,就要重新開發。

如上說示:外層是teacher,裡面小的是node.

#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

#define  _crt_secure_no_warnings #include 

#include

#include

#include

"linklist.h

"typedef

struct _tag_linklist//

這個鍊錶的上下文資訊,類似於handle.這裡面是鍊錶的頭結點和鍊錶的長度。

tlinklist;

linklist* linklist_create() //

o(1)

memset(tmp,

0, sizeof

(tlinklist));

tmp->length = 0

; tmp->header.next = null; //

return

tmp;

}void linklist_destroy(linklist* list) //

o(1)

free(list);

//只把上下文資訊釋放。因為加進去的teacher物件是區域性的,main函式執行完後會自動釋放,所以這裡不用手動釋放。

return;}

void linklist_clear(linklist* list) //

o(1)

tlist->header.next =null;

tlist->length = 0

;

return;}

int linklist_length(linklist* list) //

o(1)

return tlist->length;

}int linklist_insert(linklist* list, linklistnode* node, int pos) //

在pos位置插入節點,先連線後面的再連線前面的。

tlist = (tlinklist *)list;

current = &(tlist->header);//

節點要取位址給指標

for (i=0; i//

鍊錶節點序號從0開始

//先連線後面節點在連線前面節點

node->next = current->next;

//前面的鍊錶 連線 新結點

current->next =node;

tlist->length ++;

return0;

}linklistnode* linklist_get(linklist* list, int pos) //

o(n)

current = &(tlist->header); //

賦值指標變數初始化

for (i=0; i)

return current->next;

}linklistnode* linklist_delete(linklist* list, int pos) //

o(n)

current = &(tlist->header);

for (i=0; i)

ret = current->next; //

快取要刪除的結點

current->next = ret->next;

tlist->length --;

return

ret;

}

#define  _crt_secure_no_warnings #include 

#include

#include

#include

"linklist.h"/*

typedef struct _node

node;

typedef struct _teacher1

teacher1;

typedef struct _teacher2

teacher2;

teacher2 t2;

*/typedef

struct

_teacher

teacher;

void

main()

printf(

"age:%d \n

", tmp->age);

}//刪除鍊錶結點

while (linklist_length(list) > 0

)

printf(

"age:%d \n

", tmp->age);

}linklist_destroy(list);

printf(

"hello...\n");

system(

"pause");

return

;}

c 資料結構鍊錶的實現

資料結構中最開始學習實現的就是鍊錶 1 這個標頭檔案 list head 為建立結構體,用來儲存資料 include using namespace std template struct node 建立結構體 template node node template node node type i...

資料結構 鍊錶的實現 C

昨天寫了鍊錶,目前只寫了單鏈表,等有時間把迴圈鍊錶什麼的變異產品再寫出來 只有頭指標 沒有頭結點 的單鏈表 pragma once template struct node template class singlelinkedlist include singlelinkedlist.h temp...

資料結構 鍊錶的c 實現

ifndef my head h define my head h include g code c myhead.h endif my head h template typename elemtype class linklist typedef list node nodepointer 指向...