国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

PHP版鏈表的實現

Jinkey / 1208人閱讀

摘要:本文首發于我的博客引用數據結構與算法鏈表該文章提供的版的鏈表的實現。

本文首發于我的博客
引用: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面試??贾當祿Y構——鏈表的概念

    摘要:一鏈表鏈表是一種常見的基礎數據結構,是一種線性表,但是并不會按線性的順序存儲數據,而是在每一個節點里存到下一個節點的指針。指向整個列表的指針可以被稱作訪問指針。 你好,是我琉憶,PHP程序員面試筆試系列圖書的作者。 本周(2019.3.18至3.22)的一三五更新的文章如下: 周一:PHP面試??贾當祿Y構——鏈表的概念周三:PHP面試??贾當祿Y構——棧和隊列周五:PHP面試??贾?..

    dreamans 評論0 收藏0
  • php底層原理之數組實現

    摘要:數組是最常用的數據類型,同時容易上手也得益于其強大的數組,但是數組在中是如何實現的呢首先,我們還是先了解下相關的數據結構,為下面的內容打好基礎哈希表哈希表,顧名思義,即將不同的關鍵字映射到不同單元的一種數據結構。 數組是PHPer最常用的數據類型,同時php容易上手也得益于其強大的數組,但是數組在php中是如何實現的呢? 首先,我們還是先了解下相關的數據結構,為下面的內容打好基礎 哈希...

    HackerShell 評論0 收藏0
  • php中的哈希碰撞以及防御

    php中的哈希表 php中的變量是以符號表的方式進行存儲的,實際上也是個HashTable,哈希表是通過特定的哈希算法將索引轉換成特定的index然后映射到對應的槽中,然后采用拉鏈法,在一個槽中使用鏈表將數據進行存儲,鏈表的時間復雜度為O(n)。 php中的hashtable的結構定義在Zend/zend_hash.h文件中: //保存數據的單鏈表結構 typedef struct bucket ...

    周國輝 評論0 收藏0
  • [數據結構]鏈表的實現PHP

    開始對數據結構的學習 今天寫代碼換了一個字體,以前一直用console很好看,今天發現一個更喜歡的風格Source Code Pro上兩張圖,還是挺好看的?。?!showImg(https://segmentfault.com/img/remote/1460000014556516?w=414&h=441);showImg(https://segmentfault.com/img/remote/1...

    I_Am 評論0 收藏0

發表評論

0條評論

Jinkey

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<