#include
#include
struct dblnode;
typedef struct dblnode dblnode;
typedef struct dblnode * dbllink;
void create_link(dbllink *head); //建立鍊錶
void create_newnode(dbllink *newnode); //建立新的節點
void is_malloc_ok(dbllink *newnode); //判斷動態分配記憶體是否成功
void insert_node_head(dbllink *head,dbllink *newnode); //頭插鍊錶
void display_node_forword(dbllink head); //先序顯示鍊錶
void insert_node_tail(dbllink *head,dbllink *newnode); //尾插鍊錶
void display_node_backword(dbllink head); //後序顯示鍊錶
void release_link(dbllink *head); //釋放整個鍊錶
void insert_node_mid(dbllink *head,dbllink *newnode,int num); //中間插鍊錶(從小到大)
int main()
display_node_forword(head); //呼叫先序顯示函式
release_link(&head); //呼叫釋放鍊錶函式
display_node_backword(head); //呼叫後序顯示函式
return 0;}
//建立新的鍊錶,形成迴圈鍊錶
void create_link(dbllink *head)
//建立新的節點
void create_newnode(dbllink *newnode)
//判斷動態儲存空間是否成功
void is_malloc_ok(dbllink *newnode)}
//頭插鍊錶
void insert_node_head(dbllink *head,dbllink *newnode)}
//先序顯示鍊錶
void display_node_forword(dbllink head)
while(temp != head) //鍊錶不為空}
//尾插鍊錶
void insert_node_tail(dbllink *head,dbllink *newnode)
//後序顯示鍊錶
void display_node_backword(dbllink head)
while(temp != head) //鍊錶不為空}
//釋放鍊錶
void release_link(dbllink *head)}
//中間插鍊錶(從小到大)
void insert_node_mid(dbllink *head,dbllink *newnode,int num)
if(temp->next == *head) //鍊錶不為空,只有乙個節點
else
}else
if(temp == (*head)->next) //遇到第乙個節點就退出迴圈,即新節點為當前鍊錶最小
else
else
}else //對於不到尾節點的新節點作處理}}
}
雙向帶環帶頭節點的鍊錶
建立乙個雙向鍊錶的節點 class listnode 關於頭插 如何將鍊錶列印出來 public void display system.out.println system.out.println 反向 system.out.print for listnode cur head.prev cur...
資料結構 雙向迴圈帶頭結點鍊錶
前面我們寫過了不帶頭結點的單鏈表,由於沒有頭結點,在對單鏈表進行頭插 刪的時候需要傳入二級指標 在需要進行尾插 刪的時候,需要先根據頭指標找到頭結點,然後從頭往後遍歷找到最後乙個結點再進行相應操作。而我們今天要寫的雙向迴圈帶頭結點鍊錶,相對於不帶頭結點的單鏈表做增刪時,將會方便許多。typedef ...
雙向迴圈帶頭結點鍊錶的常見操作
include dlist.h include malloc.h include assert.h include pdlnode buydlist dldatatype data pnewnode pnext null 剛開始給節點並不知道位置所以給null pnewnode ppre null ...