資料結構之雙向鍊錶

2021-09-02 23:39:04 字數 3507 閱讀 4824

//建立空鍊錶

list* creat ();

//摧毀鍊錶

//[in]list : 需要摧毀的鍊錶

void

destroy

(list*list)

;//插入資料:頭插

// [in]list : 要插入的雙向鍊錶

// [in]data : 要插入的資料

bool insert_head

(list*list,data data)

;//插入資料:尾插

// [in]list : 要插入的雙向鍊錶

// [in]data : 要插入的資料

bool insert_tail

(list*list,data data)

;//插入資料: 按位置插入

// [in]list : 要插入的雙向鍊錶

// [in]pos : 要插入的位置

// [in]data : 要插入的資料

bool insert_pos

(list*list,

int pos,data data)

;//刪除資料: 按位置刪除

// [in]list : 要插入的雙向鍊錶

// [in]pos : 要插入的位置

bool delete_pos

(list*list,

int pos)

;//刪除資料: 按資料刪除

// [in]list : 要插入的雙向鍊錶

// [in]data : 要插入的資料

bool delete_data

(list*list,data data)

;//雙向鍊錶逆序

bool reverse

(list *list)

;//列印

void

display

(list*list)

;#endif

// _linklist_h_

#include

#include

#include

"linklist.h"

//建立空鍊錶

list* creat (

) list->head =

(node*

)malloc

(sizeof

(node)

/sizeof

(char))

;if(null

== list->head )

list->head->pre =

null

; list->head->next =

null

;return list;

}//摧毀鍊錶

void

destroy

(list*list)

free

(list->head )

;free

(list);}

bool insert_head

(list*list,data data)

new_node ->data = data;

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

list->head->next = new_node;

new_node->pre = list->head;if(

null

!= new_node ->next)

return true;

}bool insert_tail

(list*list,data data)

new_node ->data = data;

new_node ->next =

null

;//找到最後指向空的節點

node *tmp = list->head;

//指向頭結點

while

(tmp->next)

tmp->next = new_node;

new_node->next =

null

; new_node->pre = tmp;

return true;

}bool insert_pos

(list*list,

int pos,data data)

node *tmp =list->head;

//指向頭結點

//找到指點位置的插入的前乙個節點

int i;

for(i=

0;i1;i++)}

node->data = data;

node->next = tmp->next;

tmp->next = node;

node->pre = tmp;if(

null

!= node ->next)

return true;

}bool delete_pos

(list*list,

int pos)

} node *pos_node = tmp->next;

tmp->next = pos_node->next;

pos_node->pre = tmp;

free

(pos_node)

;return true;

}bool delete_data

(list*list,data data)

tmp = tmp->next;

}return false;

}bool reverse

(list *list)

//逆序後的最後乙個節點指向null

list->head->next->next =

null

;//頭結點指向逆序後的第乙個節點

list->head->next = cur;

cur->next = cur->pre;

cur->pre = list->head;

return true;

}void

display

(list*list)

printf

("\n");

}

資料結構之雙向鍊錶

簡述 指標域有乙個指標 而言,占用資源更大,但相應的 雙向鍊錶遍歷的時候只需要乙個指標就可以,而且 只有得到其中任何乙個節點就是得到整個鍊錶,單向鍊錶必須得到他的頭節點,才能遍歷整個鍊錶,而且得有兩個指標。實現 bothwaylinklist.h ifndef mymodule h define m...

資料結構之 雙向鍊錶

單鏈表的結點都只有乙個指向下乙個結點的指標。單鏈表的資料元素無法直接訪問其前驅元素。建立鍊錶 銷毀鍊錶 獲取鍊錶長度 清空鍊錶 獲取第pos個元素操作 插入元素到位置pos 刪除位置pos處的元素 dlinklist dlinklist creat 建立乙個鍊錶 void dlinklist des...

資料結構之雙向鍊錶

雙向鍊錶宛如一列火車,剛發明的時候只有乙個頭,如果它的行駛路線為 a b c d e f g h i j k a 這個時候有一批貨物需要從k運到j,那麼它的運輸路線一定是 k a b c d e f g h i j 所以後來火車就有了兩個頭,由此可見雙向鍊錶的重要性!雙向鍊錶 在單鏈表結點上增添了乙...