摘要:本文首發于我的博客引用數據結構與算法鏈表該文章提供的版的鏈表的實現。
本文首發于我的博客
引用:Java數據結構與算法——鏈表
該文章提供的JAVA版的鏈表的實現。
現在我也貼一下PHP版的鏈表的實現:
class Node { private $data; private $next; public function getData() { return $this->data; } public function setData($data) { $this->data = $data; return true; } public function getNext() { return $this->next; } public function setNext($next) { $this->next = $next; return true; } } /** * 鏈表類 */ class Link { private $size = 0; private $first; private $last; /** * 獲取鏈表長度 */ public function getLength() { return $this->size; } /** * 鏈表中插入第一個元素的時候,頭和尾部都是同一個元素 */ public function oneNode(string $element) { $this->first = new Node; $this->first->setData($element); $this->last = $this->first; } /** * 當只有一個元素的時候,刪除$fist和$last */ public function clear() { $this->first = $this->last = null; } /** * 頭節點插入 */ public function addHead(string $element) { if ($this->size == 0) { $this->oneNode($element); } else { $node = new Node; $node->setData($element); $node->setNext($this->first); $this->first = $node; } $this->size++; return true; } /** * 尾節點插入 */ public function addTail(string $element) { if ($this->size == 0) { $this->oneNode($element); } else { $node = new Node(); $node->setData($element); $this->last->setNext($node); $this->last = $node; } $this->size++; } /** * 中間節點插入 */ public function add(int $index, string $element) { if ($index <= $this->size) { if ($this->size == 0) { oneNode($element); } elseif ($index == 0) { $this->addHead($element); } elseif ($index == $this->size) { $this->addTail($element); } else { $tmp = $this->get($index - 1); $node = new Node; $node->setData($element); $node->setNext($tmp->getNext()); $tmp->setNext($node); } $this->size++; } else { throw new Exception("插入位置無效或超出鏈表長度"); } } /** * 獲取指定位置的元素 */ public function get(int $index) { $tmp = $this->first; for ($i = 0; $i < $index - 1; $i++) { $tmp = $tmp->getNext(); } return $tmp; } /** * 刪除頭節點 */ public function deleteFirst() { if ($this->size == 0) { throw new Exception("空鏈表,無元素可刪除"); } elseif ($this->size == 1) { $this->clear(); } else { $tmp = $this->first; $this->first = $tmp->getNext(); $this->size--; } } /** * 刪除尾節點 */ public function deleteLast() { if ($this->size == 0) { throw new Exception("空鏈表,無元素可刪除"); } elseif ($this->size == 1) { $this->clear(); } else { $tmp = $this->get($this->size - 1); $tmp->setNext(null); $this->size--; } } /** * 刪除指定節點 */ public function deleteIndex(int $index) { if ($this->size == 0) { throw new Exception("空鏈表,無元素可刪除"); } elseif ($this->size == 1) { $this->clear(); } else { $tmp = $this->get($index - 1); $tmp->setNext($tmp->getNext()->getNext()); $this->size--; } } /** * 打印現有的所有元素 */ public function printLink() { $tmp = $this->first; if(is_null($tmp)) { return false; } echo $tmp->getData(); while(!is_null($tmp->getNext())) { $tmp = $tmp->getNext(); echo "->" . $tmp->getData(); } echo " "; } } $link = new Link(); $link->addHead("1"); $link->printLink(); // 1 $link->addHead("5"); $link->printLink(); // 5->1 $link->addTail("9"); $link->printLink(); // 5->1->9 $link->addTail("7"); $link->printLink(); // 5->1->9->7 $link->add(3, "8"); $link->printLink(); // 5->1->9->8->7 print_r("鏈表長度:" . $link->getLength() . " "); $link->deleteFirst(); $link->printLink(); $link->deleteLast(); $link->printLink(); $link->deleteIndex(1); $link->printLink(); print_r("鏈表長度:" . $link->getLength() . " ");
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/28683.html
摘要:一鏈表鏈表是一種常見的基礎數據結構,是一種線性表,但是并不會按線性的順序存儲數據,而是在每一個節點里存到下一個節點的指針。指向整個列表的指針可以被稱作訪問指針。 你好,是我琉憶,PHP程序員面試筆試系列圖書的作者。 本周(2019.3.18至3.22)的一三五更新的文章如下: 周一:PHP面試??贾當祿Y構——鏈表的概念周三:PHP面試??贾當祿Y構——棧和隊列周五:PHP面試??贾?..
摘要:數組是最常用的數據類型,同時容易上手也得益于其強大的數組,但是數組在中是如何實現的呢首先,我們還是先了解下相關的數據結構,為下面的內容打好基礎哈希表哈希表,顧名思義,即將不同的關鍵字映射到不同單元的一種數據結構。 數組是PHPer最常用的數據類型,同時php容易上手也得益于其強大的數組,但是數組在php中是如何實現的呢? 首先,我們還是先了解下相關的數據結構,為下面的內容打好基礎 哈希...
php中的哈希表 php中的變量是以符號表的方式進行存儲的,實際上也是個HashTable,哈希表是通過特定的哈希算法將索引轉換成特定的index然后映射到對應的槽中,然后采用拉鏈法,在一個槽中使用鏈表將數據進行存儲,鏈表的時間復雜度為O(n)。 php中的hashtable的結構定義在Zend/zend_hash.h文件中: //保存數據的單鏈表結構 typedef struct bucket ...
開始對數據結構的學習 今天寫代碼換了一個字體,以前一直用console很好看,今天發現一個更喜歡的風格Source Code Pro上兩張圖,還是挺好看的?。?!showImg(https://segmentfault.com/img/remote/1460000014556516?w=414&h=441);showImg(https://segmentfault.com/img/remote/1...
閱讀 894·2021-09-03 10:42
閱讀 1512·2019-08-30 15:56
閱讀 1445·2019-08-29 17:27
閱讀 870·2019-08-29 15:25
閱讀 3157·2019-08-26 18:27
閱讀 2481·2019-08-26 13:41
閱讀 1888·2019-08-26 10:39
閱讀 1570·2019-08-23 18:36