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