鍊錶(linked list)
是一種常見的基礎資料結構,是一種線性表,但是並不會按線性的順序儲存資料,而是在每乙個節點裡存到下乙個節點的指標(pointer)。
使用鍊錶結構可以克服陣列鍊錶需要預先知道資料大小的缺點,鍊錶結構可以充分利用計算機記憶體空間,實現靈活的記憶體動態管理。但是鍊錶失去了陣列隨機讀取的優點,同時鍊錶由於增加了結點的指標域,空間開銷比較大。
雙端鍊錶:
只能從乙個方向遍歷,相對於單向鍊錶多了乙個對尾節點的引用,這樣在操作新增尾節點會方便很多;在單向鍊錶中,新增尾節點每次都需要從頭節點遍歷到尾部找到尾節點再新增。
示例**:
/**
* created by administrator on 2019/4/28.
*/public class doublepointlinkedlist
}public doublepointlinkedlist()
//新增頭結點
public node addhead(object data) else
this.size++;
return node;
}//新增尾節點
public node addtail(object data)
//是否為空
public boolean isempty()
//刪除頭結點
public node delhead()
this.head = node.next;
this.size--;
return node;
}//刪除尾節點
public node deltail()
if(null == node.next.next)
node = node.next;
}this.size--;
return node;
}//根據節點內容查詢節點
public node findobj(object data)
}return null;
}//顯示節點資訊
public void display() else
node = temp;
}system.out.println("]");
}}
測試**:
public class main
private static void testsinglelinkedlist()
private static void testdoublepointlinkedlist()
}
測試結果:
[a->b->c]
[a->b->c->d->e->f]
[b->c->d->e->f]
[b->c->d->e]
鍊錶結構之雙端鍊錶
雙端鍊錶 雙端鍊錶與傳統鍊錶非常相似.只是新增了乙個屬性 即對最後乙個鏈結點的引用 如上圖所示 由於有著對最後乙個鏈結點的直接引用.所以雙端鍊錶比傳統鍊錶在某些方面要方便.比如在尾部插入乙個鏈結點.雙端鍊錶可以進行直接操作 但傳統鍊錶只能通過next節點迴圈找到最後鏈結點操作.所以雙端鍊錶適合製造佇...
資料結構 雙端鍊錶和雙向鍊錶
雙端鍊錶 一 什麼是雙端鍊錶。鍊錶中儲存著對最後乙個鏈節點引用的鍊錶。二 從頭部進行插入 要對鍊錶進行判斷,如果為空則設定尾節點為新新增的節點。三 從尾部進行插入 如果鍊錶為空,則直接設定頭結點為新新增的節點,否則設定尾節點的後乙個節點為新新增節點。四 從頭部進行刪除 判斷頭結點是否為下乙個結點,如...
redis資料結構之雙端鍊錶
redis 的鍊錶資料結構基於 adlist.h 檔案定義的以下三種資料結構來展開 node typedef struct listnode listnode 這裡 node 的value 為什麼要弄成指標?是為了相容多種型別的 node 顯然這裡的 node 既可以儲存 int等常規數字,也可以存...