文章目錄:
01. 博文簡介:
02. 概念:
03. 示例圖:
04. 優缺點:
05. 代碼分析:
06. 運行環境:
07. 題記:
一:概念
雙向鏈表也叫雙鏈表,是鏈表的一種,它的每個數據結點中都有兩個指針,分別指向直接後繼和直接前驅。所以,從雙向鏈表中的任意一個結點開始,都可以很方便地訪問它的前驅結點和後繼結點,一般我們都構造雙向循環表,STL。
二:示例圖
三:鏈表的優缺點
鏈表最大的一個缺點,就是查找一個元素,必須整個鏈表遍歷,也可以看出這種數據結構便於插入或者刪除一個接點。
四:代碼分析
1、獲取節點信息
DLNode<T>* GetElemP(size_t i) j = DLNode<T> *p = p = p-> j++ }(p != head && j < DLNode<T>* GetElemE( T &e) DLNode<T> *p = head-> (p != head && e != p-> p = p-> }
2、插入節點
插入過程如下圖:
代碼分析如下:
Insert(size_t i, T & DLNode<T> *p = Insert(DLNode<T> *p, T & DLNode<T> *q = DLNode<T> q->next = p-> q->prev = p->next->prev = p->next = AddHead( T & Insert( T & Insert( }
3、刪除節點
刪除節點如下圖,可以從圖中看到,刪除節點僅僅改變前驅和後繼節點相關的指針域,這個就是為什麼數據刪除高手還可以找回來原因;
代碼分析如下:
Delete( T & DLNode<T> *p = std::auto_ptr<DLNode<T> > p->next->prev = p-> p->prev->next = p-> }
DLNode<T> *p = head-> (p != std::cout<<<<p-> std::cout<<<< p = p-> }
DLNode<T> *p = head-> (p != head && p != std::auto_ptr<DLNode<T> > std::cout<< std::cout<< p = p-> head->next = head->prev = }
6、是否為空和計算鏈表長度
head->next = i = <T> *p = head-> (p != p = p-> i++
std::cout<<<< ( i = ; i <= ; ++ AddHead( AddHead( std::cout<<<< std::cout<<<<Length()<< std::cout<<<< Delete( std::cout<<<< std::cout<<<<Length()<< std::cout<<<< Delete( std::cout<<<<Length()<< }
9、完整代碼
View Code1
2
六:題記
1
2
3
歡迎繼續閱讀“啟迪思維:數據結構和算法”系列