線性表(1):線性表順序存儲結構的php實現(xiàn)

線性表的順序存儲結構 (sequential list),也叫順序表中,存和讀數(shù)據(jù)時間復雜度為 O(1),插入和刪除數(shù)據(jù)時間復雜度為 O(n)。

創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設、高性價比大連網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式大連網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設找我們,業(yè)務覆蓋大連地區(qū)。費用合理售后完善,十多年實體公司更值得信賴。

線性表優(yōu)點:

1.無需為表中元素之間的邏輯關系而額外增加存儲空間

2.可以快速存取表中任一位置的元素

線性表缺點:

1.插入和刪除操作需要移動大量元素

2.當線性表長度變化較大時,難以確定存儲空間的容量 (這個對 php 不是問題,而且貌似php只能申請動態(tài)數(shù)組。。。)

3.造成存儲空間的碎片

下面是 php 的實現(xiàn)

<?php 
/**
 * @author Dongjie LIU
 * @version chinese
 * 
 *順序表 (sequential list):線性表的順序存儲結構
 *需要3個屬性,數(shù)組,最大存儲容量,線性表長度,
 *但由于php 特性,無法在初始化時定義數(shù)組長度,
 *故只定義數(shù)組一個屬性
 * 
 * 線性表基本操作包括
 * 1.線性表表初始化操作 __contruct()
 * 2.清空線性表 __destruct()
 * 3.判斷線性表是否為空 listEmpty()
 * 4.返回線性表元素個數(shù) listLength()
 * 5.根據(jù)下標返回線性表中的某個元素 getElem()
 * 6.返回線性表中某個元素的位置 locateElem()
 * 7.根據(jù)給定位置在線性表中插入元素 listInsert()
 * 8.根據(jù)給定位置在線性表中刪除元素 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);
    }

    /**
     * 返回順序表元素個數(shù)
     *
     * @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 為數(shù)組的情況
     *
     * @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;        	
        }
    }

}

?>

文章標題:線性表(1):線性表順序存儲結構的php實現(xiàn)
鏈接分享:http://muchs.cn/article44/gecihe.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設、用戶體驗App開發(fā)、自適應網(wǎng)站、關鍵詞優(yōu)化、服務器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

h5響應式網(wǎng)站建設