儲存位址的思路:
利用異或的性質,a^b=p
b^p=a
a^p=b
因此只要知道後繼節點的位址,就可以得到前驅節點的位址
只要知道前驅節點的位址,就可以得到後繼節點的位址
#include
template
struct node ;
template
class list ;
template
list::list()
:size(0)
template
node* list::search(const type&item)
return now; }
template
bool list::insert(const type &item)
template
bool list::delete(const type &item)
node* prev_prev;
node* next_next;
node* next;
if (now == null)
return false;
prev_prev = (node*)((long long)now ^ prev->np);
if (now == tail)
else
delete now;
size--;
return true;
// if(now==tail)
}
雙向鍊錶實現
template class link link link pre null,link ne null void operator new size t void operator delete void ptr template link link freelist null template v...
雙向鍊錶實現
雙向鍊錶的應用背景主要是單向鍊錶只能順序訪問,逆序訪問單向鍊錶 尤其是較大的單向鍊錶是一件極其費時費力的工作 相比於單向鍊錶,雙向鍊錶增加了乙個域,這個域裡面增加了乙個指向前驅節點的指標,使得整個鍊錶可以順序訪問或者逆序訪問,來去自如 定義的雙向鍊錶的標頭檔案,裡面包含了雙向鍊錶的宣告和資料型別的定...
實現雙向鍊錶
雙向鍊錶和單向鍊錶相比更加靈活,它的每乙個元素除了本身的值以為擁有兩個指標,分別指向上乙個和下乙個節點。維護成本上要高於單向鍊錶。鍊錶的大部分操作依賴於遍歷,這一方面雙向鍊錶會效率會好一些,可以根據查詢下標的位置從而選擇從煉表頭開始遍歷還是從鍊錶尾開始遍歷。返回元素個數 public intsize...