//建立空鍊錶
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 所以後來火車就有了兩個頭,由此可見雙向鍊錶的重要性!雙向鍊錶 在單鏈表結點上增添了乙...