封裝鍊錶和雙向鍊錶

2021-10-08 22:45:10 字數 2884 閱讀 6984

封裝鍊錶:

尾新增的效率低,非法下標的判斷也非常低。

1、單鏈表

節點:資料域

指標域資料項:

頭指標尾指標

節點數量

2、靜態鍊錶

節點:資料域

游標靜態鍊錶的節點儲存在連續的記憶體,通過遊戲來訪問下乙個節點。

這種鍊錶在插入刪除時只需要修改游標的值,而不用申請、釋放記憶體達到鏈式結構的效果。

但是也犧牲的隨機訪問的功能,是給沒有指標的編譯實現的一種單鏈表。

3、迴圈鍊錶

鍊錶的最後乙個節點的next不再指向null,面是指向頭節點,這種鍊錶叫單向迴圈鍊錶,簡稱迴圈鍊錶,它的好處理就是可以通過任何節點遍歷整個鍊錶。

4、雙向鍊錶

節點:前驅指標

資料域後繼指標

封裝雙向鍊錶:

#include

#include

#include

#define type student

// 節點

typedef

struct node

node;

// 建立節點

node*

create_node

(type data)

// 鍊錶

typedef

struct doublelist

doublelist;

// 建立鍊錶

doublelist*

create_list

(void

)// 在前驅和後繼之間新增乙個節點

void

_add_list

(node* p,node* n,type data)

// 刪除當前節點

void

_del_list

(node* node)

// 訪問指定位置的節點

node*

_index_list

(doublelist* list,size_t index)

else

}// 根據值查詢節點

node*

_data_list

(doublelist* list,type data)

return

null;}

// 頭新增

void

add_head_list

(doublelist* list,type data)

// 尾新增

void

add_tail_list

(doublelist* list,type data)

// 插入

bool insert_list

(doublelist* list,size_t index,type data)

// 按位置修改

bool modify_index_list

(doublelist* list,size_t index,type data)

// 按值修改 更新

intmodify_value_list

(doublelist* list,type old,type data)

}return cnt;

}// 訪問

bool access_list

(doublelist* list,size_t index,type* ptr)

// 查詢

intquery_list

(doublelist* list,type data)

return-1

;}// 按位置刪除

bool del_index_list

(doublelist* list,size_t index)

// 按值刪除

bool del_value_list

(doublelist* list,type data)

// 遍歷

void

show_list

(doublelist* list)

printf

("\n");

}// 清空

void

clean_list

(doublelist* list)

list->head->prev = list->head;

list->head->next = list->head;

list->size =0;

}// 銷毀

void

destory_list

(doublelist* list)

intmain

(int argc,

const

char

* ar**)

/* show_list(list);

insert_list(list,9,1000);

modify_index_list(list,9,1234);

show_list(list);

modify_value_list(list,0,666);

for(int i=0; isize; i++)

*/show_list

(list)

;clean_list

(list)

;add_tail_list

(list,

666)

;insert_list

(list,0,

100)

;insert_list

(list,0,

200)

;insert_list

(list,0,

300)

;show_list

(list)

;destory_list

(list)

;}

雙向鍊錶封裝

雙向鍊錶 function doublelinkedlist 煉表頭節點 this.head null 鍊錶尾節點 this.fail null 鍊錶長度 this.length 0 在鍊錶尾部新增元素 var newelement new node value if this.head else ...

單向鍊錶和雙向鍊錶區別 雙向鍊錶

一開始確實被這個雙向鍊錶整暈了,node裡面不停套node,簡直無限套娃,讓人不知道該怎麼下手。後來看了資料結構與演算法分析這本書的 才算整明白。我把鍊錶分成了三個部分 第一部分是node.node是乙個由兩根指標,以及我們需要儲存的資料構成的結構體。這個node就是無限套娃的起源,也是鍊錶用於儲存...

雙向鍊錶和雙向迴圈鍊錶

和單向鍊錶相比,多了乙個前驅結點。如果他為空,那麼next和prior都指向自己。而對於雙迴圈鍊錶,只需要最後乙個元素的next指向head next,head next的prior指向最後乙個節點即可。新節點s插入鍊錶,s next給p結點,s prior給p prior,然後,p prior n...