您好,登錄后才能下訂單哦!
線性表的順序存儲結構 (sequential list),也叫順序表中,存和讀數據時間復雜度為 O(1),插入和刪除數據時間復雜度為 O(n)。
線性表優點:
1.無需為表中元素之間的邏輯關系而額外增加存儲空間
2.可以快速存取表中任一位置的元素
線性表缺點:
1.插入和刪除操作需要移動大量元素
2.當線性表長度變化較大時,難以確定存儲空間的容量 (這個對 php 不是問題,而且貌似php只能申請動態數組。。。)
3.造成存儲空間的碎片
下面是 php 的實現
<?php /** * @author Dongjie LIU * @version chinese * *順序表 (sequential list):線性表的順序存儲結構 *需要3個屬性,數組,最大存儲容量,線性表長度, *但由于php 特性,無法在初始化時定義數組長度, *故只定義數組一個屬性 * * 線性表基本操作包括 * 1.線性表表初始化操作 __contruct() * 2.清空線性表 __destruct() * 3.判斷線性表是否為空 listEmpty() * 4.返回線性表元素個數 listLength() * 5.根據下標返回線性表中的某個元素 getElem() * 6.返回線性表中某個元素的位置 locateElem() * 7.根據給定位置在線性表中插入元素 listInsert() * 8.根據給定位置在線性表中刪除元素 listDelete() */ class seqList{ private $seq_list; //順序表 /** * 順序表初始化 * * @param mixed $seq_list * @return void */ public function __construct($seq_list=array()){ $this->seq_list = $seq_list; } /** * 清空順序表 * * @return void */ public function __destruct(){ unset($this->seq_list); } /** * 判斷順序表是否為空 * * @return bool 為空返回true,否則返回false */ public function listEmpty(){ return empty($this->seq_list); } /** * 返回順序表元素個數 * * @return int */ public function listLength(){ return count($this->seq_list); } /** * 返回順序表中下標為i的元素值 * * @param int i * @return mixed 如找到返回元素值,否則返回false */ public function getElem($i){ if ($i > 0 && $i <= $this->listLength()) { return $this->seq_list[$i-1]; }else{ return false; } } /** * 在順序表中查找與給定值 $value 相等的元素, * 這里沒有考慮 $value 為數組的情況 * * @param mixed $value * @return mixed 如查找成功,返回該元素在表中序號,否則返回 0 */ public function locateElem($value){ if (in_array($value, $this->seq_list)) { $i = 0; foreach ($this->seq_list as $key=>$val) { if (strcmp($value, $val) === 0){ //若存在多個元素與匹配值相等 if ($i == 0) { $i = $key + 1; }else{ $i .= ",".($key + 1); } } } return $i; }else{ return false; } } /** * 在指定位置 i 插入一個新元素 $value * * @param int $i * @param mixed $value * @return bool 插入成功返回 true, 否則返回 false */ public function listInsert($i, $value){ //三種情況:插入位置不合理,元素加在末尾和其他 if ($i > $this->listLength()+1 || $i < 1) { return false; }elseif ($i == $this->listLength()+1) { $this->seq_list[$i-1] = $value; }else{ //從 $i-1 到最后的元素位置向后移動一位 for ($k = $this->listLength()-1; $k >= $i-1; $k--) { $this->seq_list[$k+1] = $this->seq_list[$k]; } $this->seq_list[$i-1] = $value; } return true; } /** * 刪除順序表中 i 位置的元素, 并用 $value 返回其值 * * @param int $i * @return mixed 刪除成功返回 $value,否則返回 false */ public function listDelete($i){ //兩種情況:插入位置不合理和其他 if ($i <= 0 || $i > $this->listLength()) { return false; }else{ $value = $this->seq_list[$i-1]; for ($k=$i-1; $k < $this->listLength()-1; $k++) { $this->seq_list[$k] = $this->seq_list[$k+1]; } unset($this->seq_list[$this->listLength()-1]); return $value; } } } ?>
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。