1. 程式人生 > >線性表-順序結構存儲

線性表-順序結構存儲

nbsp emp function locate amp pty return 容易 pre

線性表反映數據之間的關系是一對多一的關系,每個節點都有唯一的前驅,唯一的後繼。它可以采用順序存儲,也可以采用鏈式存儲。本章寫的是順序存儲的實現。

class sqList {
    public $list = null; // 順序表
    /**
     * 初始化線性表
     * @param array $list
     * @return void
     */
    public function __construct(&$list) {
        if (!is_array($list))
            return false;
        
$this->list = $list; } /** * 求表長 * @return int */ public function listLength() { return count($this->list); } /** * 查找元素 * @param mixed $elem 線性表內的元素 * @return int */ public function locateElem($elem) { foreach ($this->list
as $v => $k) { if ($k == $elem) { return $v+1; } else { continue; } } return -1; } /** * 在線性表第i個位置插入元素$elem * @param int 位置索引從1開始 * @param mixed $elem * @return boolean true代表插入成功 false反之
*/ public function listInsert($i, $elem) { $i = $i - 1; /* 位置判斷 */ if ($i < 0 || $i > $this->listLength()) return false; /* 待插入的元素判斷 */ if (empty($elem)) return false; /* 插入元素 */ $j = $this->listLength() - 1; for (; $j >= $i; $j--) { $this->list[$j+1] = $this->list[$j]; } $this->list[$i] = $elem; return true; } /** * 刪除第i個元素 * @param int $i 從1開始的位置 */ public function listDelete($i) { /* 位置判斷 */ if ($i <= 0 || $i > $this->listLength()) return false; array_splice($this->list, $i-1, 1); // 不能使用unset()函數,這樣會破壞數組下標的連續性 } /** * 讀取第i個元素 * @param int $i 從1開始的位置 */ public function getElem($i) { /* 位置判斷 */ if ($i <= 0 || $i > $this->listLength()) return false; /* 判斷是不是空表 */ if ($this->listLength() == 0) return false; return $this->list[$i -1]; } /** * 遍歷元素 * return void */ public function listTraverse() { if (!empty($this->list)) { foreach ($this->list as $v => $k) { echo $k.‘<br>‘; } } else { echo ‘順序表無元素‘; } } /** * 撤銷操作 */ public function destoryList() { unset($this->list); } }
總結來說,順序表查找元素的時間復雜度是O(1),刪除和插入元素的時間復雜度是O(n)。因此,順序表相對於鏈表來說,查找容易,而插入和刪除則不如鏈表

線性表-順序結構存儲