封裝鍊錶:
尾新增的效率低,非法下標的判斷也非常低。
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...